![]() |
Programm reagiert nicht
Nabend allerseits,
Vorweg ich programmiere noch nicht allzulange mit Delphi und das was ich kann habe ich mir selber beigebracht. So und nun zu meinem Problem. Ich soll für meine Firma ein Programm schreiben welches Datanorm-Listen runterläd und diese dann in eine MYSQL-Datenbank schreibt. Das ganze stellt im Grunde auch kein Problem da. Das runterladen klappt einwandfrei genauso wie das Importieren in die DB. Das einzige was mich nun stört ist, das mein Programm nicht mehr reagiert wenn es in meiner For-Dchleife die Datanorm-Liste abarbeitet. Leider weiß ich auch nie bei welcher Zeiler er in der Liste ist. Da ich mir auch keinen Status anzeigen lassen kann. Hoffe ihr wisst was ich meine und könnt mir ein wenig helfen. MfG Bootscreen //Edit: Ich häng euch nochma meinen Code von dem besagtem Teil:
Delphi-Quellcode:
procedure TForm1.Button5Click(Sender: TObject);
var mysql_server, mysql_port, mysql_user, mysql_pw, mysql_db : String; verarbeitung,ARTNUM,MATCHCODE,WARENGRUPPE,KURZNAME,LANGNAME,KAS_NAME,VPE,VPE_EK,PR_EINHEIT,EK_PREIS : String; Fehler, i, ii : Integer; artikel_split, langtext_split : TStringList; q, langtext: string; ex: boolean; begin Fehler := 0; ini:=TIniFile.Create(ExtractFilePath(ParamStr(0))+ 'settings.ini'); try mysql_server := ini.ReadString('CAO-Server','server',''); mysql_port := ini.ReadString('CAO-Server','port',''); mysql_user := ini.ReadString('CAO-Server','username',''); mysql_pw := ini.ReadString('CAO-Server','password',''); mysql_db := ini.ReadString('CAO-Server','db',''); finally ini.free; end; If mysql_server = '' then begin ShowMessage('Bitte geben Sie unter Optionen den MySql-Server an.'); Fehler := 1; end; If mysql_port = '' then begin ShowMessage('Bitte geben Sie unter Optionen den MySql-Port an.'); Fehler := 1; end; If mysql_user = '' then begin ShowMessage('Bitte geben Sie unter Optionen den MySql-Usernamen an.'); Fehler := 1; end; If mysql_pw = '' then begin ShowMessage('Bitte geben Sie unter Optionen das MySql-Passwort an.'); Fehler := 1; end; If mysql_db = '' then begin ShowMessage('Bitte geben Sie unter Optionen die MySql-Datenbank an.'); Fehler := 1; end; If Fehler = 0 then begin FMysql.Host := mysql_server; FMysql.port := StrToInt(mysql_port); FMysql.user := mysql_user; FMysql.password := mysql_pw; FMysql.UnixSocket := ''; FMysql.Db := mysql_db; // Datenbank auf dem Server FMysql.UseNamedPipe := false; FMysql.UseSSL := false; FMysql.Compress := true; FMysql.TrySockets := false; if FMysql.Connect then begin //ShowMessage('Verbindung aufgebaut'); // for i := 0 to 10 do for i := 0 to Listbox3.Count-1 do begin Label2.Caption := IntToStr(i); q := ''; langtext := ''; artikel_split := Split2(ListBox3.Items[i],';',false,false); verarbeitung := artikel_split[1]; ARTNUM := artikel_split[2]; MATCHCODE := artikel_split[3]; WARENGRUPPE := '1002'; KURZNAME := artikel_split[3]; KAS_NAME := artikel_split[3]; VPE := artikel_split[6]; VPE_EK := artikel_split[7]; PR_EINHEIT := artikel_split[5]; EK_PREIS := FloatToStr(StrToInt(artikel_split[8])/100); artikel_split.Free; for ii := 0 to Listbox2.Count-1 do begin langtext_split := Split2(ListBox2.Items[ii],';',false,false); if langtext_split[2] = ARTNUM then langtext := langtext + langtext_split[5] + '\n'; langtext_split.Free; end; LANGNAME := langtext; if verarbeitung = 'N' then begin q:= 'SELECT REC_ID FROM artikel WHERE ARTNUM = '+#039+ARTNUM+#039+';'; FResult := FMysql.query(q, true, ex); if FResult.FieldValue(0) = '' then begin FreeAndNil(FResult); q := 'Insert into artikel (ARTNUM,MATCHCODE,WARENGRUPPE,KURZNAME,LANGNAME,KAS_NAME,VPE,VPE_EK,PR_EINHEIT,EK_PREIS)'+ 'values ('+#039+ARTNUM+#039+','+ #039+MATCHCODE+#039+','+ #039+WARENGRUPPE+#039+','+ #039+KURZNAME+#039+','+ #039+LANGNAME+#039+','+ #039+KAS_NAME+#039+','+ #039+VPE+#039+','+ #039+VPE_EK+#039+','+ #039+PR_EINHEIT+#039+','+ #039+EK_PREIS+#039+');'; FResult := FMysql.query(q, true, ex); FreeAndNil(FResult); if ex then begin WriteLog(timetostr(time)); WriteLog('Query erfolgreich'); WriteLog(ARTNUM+' - '+KURZNAME+' erfolgreichhinzugefügt'); WriteLog('-----------------------------------------'); end else begin WriteLog(timetostr(time)); WriteLog('Query fehlgeschlagen: '+FMysql.LastError); WriteLog(q); WriteLog('-----------------------------------------'); end; end else begin WriteLog(timetostr(time)); WriteLog('Query nicht ausgeführt'); WriteLog(ARTNUM+' - '+KURZNAME+' ist bereits vorhanden'); WriteLog('-----------------------------------------'); end; end; if verarbeitung = 'A' then begin q := 'UPDATE artikel SET MATCHCODE = '+#039+MATCHCODE+#039+','+ ' WARENGRUPPE = '+#039+WARENGRUPPE+#039+','+ ' KURZNAME = '+#039+KURZNAME+#039+','+ ' LANGNAME = '+#039+LANGNAME+#039+','+ ' KAS_NAME = '+#039+KAS_NAME+#039+','+ ' VPE = '+#039+VPE+#039+','+ ' VPE_EK = '+#039+VPE_EK+#039+','+ ' PR_EINHEIT = '+#039+PR_EINHEIT+#039+','+ ' EK_PREIS= '+#039+EK_PREIS+#039+ ' WHERE ARTNUM ='+#039+ARTNUM+#039+';'; FResult := FMysql.query(q, true, ex); FreeAndNil(FResult); if not ex then begin WriteLog('Query fehlgeschlagen: '+FMysql.LastError); WriteLog(q); WriteLog('-----------------------------------------'); end; end; if verarbeitung = 'L' then begin q := 'DELETE FROM artikel WHERE ARTNUM = '+#039+ARTNUM+#039+';'; FResult := FMysql.query(q, true, ex); FreeAndNil(FResult); if not ex then begin WriteLog('Query fehlgeschlagen: '+FMysql.LastError); WriteLog(q); WriteLog('-----------------------------------------'); end; end; end; end else ShowMessage('Fehler beim Verbinden: '+FMysql.LastError); FMysql.close; end; end; |
Re: Programm reagiert nicht
Warum kannst du dir keinen Status anzeigen lassen?
Die dürfte der Einsatz von Threads helfen |
Re: Programm reagiert nicht
Damit das Programm auch reagiert, wenn es gerade beschäftogt ist, kann man den betreffenden Cod ein einem Thread auslagern.
|
Re: Programm reagiert nicht
Achso, besten dank ihr Zwei.
Hättet ihr vllt noch einen Link oder sogar ein Tut dazu? |
Re: Programm reagiert nicht
oder Processmesssages einbauen
|
Re: Programm reagiert nicht
Zitat:
|
Re: Programm reagiert nicht
Zitat:
![]() |
Re: Programm reagiert nicht
Besten Dank Luckie.
Ich schaus mir mal und hoffe das ich drauß schlau werde. Wenn cniht meld ich mich nochmal aber in nem neuen Thread. Hier kannt du zumachen :thumb: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:12 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz