![]() |
Datenbank: MySql • Version: 5.6.24 • Zugriff über: SQLDataSet
nochmal SQLDataSet
Leider nochmal.
Windows 7 und Delphi XE5 Datenbank MySql Komponente aus DBExpress Ich will 2 Insert in zwei Tabellen nacheinander machen. Code:
Delphi-Quellcode:
Nach dieser Routine ist der Satz in Tabelle Ware angelegt und in Tabelle Finanzamt nicht.
1 if mart = 1 then
2 begin 3 Form1.SQLDataSet1.Params.Clear; 4 Form1.SQLDataSet1.CommandText:='INSERT INTO ware (Ware, Warengruppe, Mengeneinheit, Menge, MWST, Preis, Aus)'+' values (:wa5, :wg5, :me5, :f1, :f2, :f3, :wk5)'; 5 Form1.SQLDataSet1.Params.ParamByName('wa5').Value:=wa5; 6 Form1.SQLDataSet1.Params.ParamByName('wg5').Value:=wg5; 7 Form1.SQLDataSet1.Params.ParamByName('me5').Value:=me5; 8 Form1.SQLDataSet1.Params.ParamByName('f1').Value:=f1; 9 Form1.SQLDataSet1.Params.ParamByName('f2').Value:=f2; 10 Form1.SQLDataSet1.Params.ParamByName('f3').Value:=f3; 11 Form1.SQLDataSet1.Params.ParamByName('wk5').Value:=wk5; 12 h1:=Form1.SQLDataSet1.ExecSQL(False); 13 if h1 <> 1 then 14 begin 15 Label2.Caption:='Fehler beim Einfügen in Ware, Administrator verständigen'; 15 end; 16 if finaz = 1 then 17 begin 18 fis:=ialpha; 19 ialpha:=DateTimeToStr(now); 20 Form1.Datumdb; 21 fiz:=ialpha; 22 ialpha:=fis; 23 Form1.SQLDataSet1.Params.Clear; 24 Form1.SQLDataSet1.CommandText:='INSERT INTO finanzamt (Tabelle, Zeit, Art, PNR, Feld1, Feld2, Feld3, Feld4, Feld5, Feld6, Feld7) VALUES (:fia1,:fia2,:fia3,:fia4,:fia5,:fia6,:fia7,:fia8,:fia9,:fia10,:fia11)'; 25 Form1.SQLDataSet1.Params.ParamByName('fia1').Value:='Ware'; 26 Form1.SQLDataSet1.Params.ParamByName('fia2').Value:=fiz; 27 Form1.SQLDataSet1.Params.ParamByName('fia3').Value:='1'; 28 Form1.SQLDataSet1.Params.ParamByName('fia4').Value:=IntToStr(pnr); 29 Form1.SQLDataSet1.Params.ParamByName('fia5').Value:=wa5;30 30 Form1.SQLDataSet1.Params.ParamByName('fia6').Value:=wg5; 31 Form1.SQLDataSet1.Params.ParamByName('fia7').Value:=me5; 32 Form1.SQLDataSet1.Params.ParamByName('fia8').Value:=f1; 33 Form1.SQLDataSet1.Params.ParamByName('fia9').Value:=f2; 34 Form1.SQLDataSet1.Params.ParamByName('fia10').Value:=f3; 35 Form1.SQLDataSet1.Params.ParamByName('fia11').Value:=wk5; 36 h1:=Form1.SQLDataSet1.ExecSQL(False); 37 if h1 <> 1 then 38 begin 39 Label2.Caption:='Fehler beim Einfügen in Finazamt, Administrator verständigen'; 40 end; 41 end; 42 end; Es wurde keine Fehlermeldung angezeigt. Wenn ich das Programm compeliere erschein vor jedem Befehl vorne links ein Punkt in der IDE (ähnlich wie Haltepunkte). Folgende Punkte fehlen aber und werden deshalb auch nicht ausgeführt: Zeilen: 12,34,36,37 Übrigens, wenn ich den zweiten INSERT (Tabelle Finanzamt) rausnehme läuft alles normal. Sind zwei INSERT hintereinander nicht zulässig? Bin mit meinen Latein am Ende. Hilfe wäre schön. Danke und Gruß Jürgen |
AW: nochmal SQLDataSet
Zeile 12 ist
Delphi-Quellcode:
Wenn die nicht ausgeführt wird, kann es auch keinen Satz in der Tabelle Ware geben. Dies widerspricht aber Deiner Aussage, dass der Satz in Tabelle Ware eingefügt wurde.
h1:=Form1.SQLDataSet1.ExecSQL(False);
Bitte mal im Debugger die Routine zeilenweise durchgehen und prüfen, ob die Aussage, dass die Zeilen nicht ausgeführt werden, haltbar ist. Ggfls. auf die Zeilen, jeweils 'nen Haltepunkt setzen und prüfen, welche Werte in h1 stehen. |
AW: nochmal SQLDataSet
habe Programm debugt:
Ablauf: von Zeile 1 bis Zeile 11 normal. Danach Zeile 15 und dann Zeile 42 verstehe wer will!!!!!! |
AW: nochmal SQLDataSet
Wenn die erste Zeile 15 ausgeführt wird, kann kein Satz in die Tabelle Ware eingefügt worden sein, da h1 dann <> 1 sein muss.
Es wurde dann kein Satz eingefügt oder mehr als ein Satz. Die zweite Zeile 15 wäre das End hinter dem Setzen der Label-Caption. Welchen Wert hat denn nun h1? Mal alle DCUs des Projektes löschen und dann das Projekt neu erstellen. Das die Zeilen zwischen 15 und 42 (also dem Ende der Routine, einfach so übersprungen werden, kann ich mir nicht vorstellen. Bau doch bitte mal 'ne Fehlerbehandlung ein und lass Dir dann ggfls. auftretende Exceptions ausgeben. Momentan ist das von Dir beschriebene nur extrem schlecht nachvollziehbar. Hast Du geprüft, ob finaz = 1 ist? Wenn finaz <> 1, so ist der beschrieben Ablauf der Zeilen schon korrekt. |
AW: nochmal SQLDataSet
Moin...:P
Was steht denn in der Variable finaz drin? |
AW: nochmal SQLDataSet
Ich habe einmal versucht den Source zu compilieren:
Delphi-Quellcode:
Bis auf die markierten Ergänzungen {!!} und die Variablendeklarationen ist da alles in Ordnung ??
procedure vv;
var mart, wa5, wg5, me5, f1,f2,f3, wk5, h1, finaz, pnr :integer ; fis, fiz, ialpha : string; begin if mart = 1 then begin Form1.SQLDataSet1.Params.Clear; Form1.SQLDataSet1.CommandText:='INSERT INTO ware (Ware, Warengruppe, Mengeneinheit, Menge, MWST, Preis, Aus)'+' values (:wa5, :wg5, :me5, :f1, :f2, :f3, :wk5)'; Form1.SQLDataSet1.Params.ParamByName('wa5').Value:=wa5; Form1.SQLDataSet1.Params.ParamByName('wg5').Value:=wg5; Form1.SQLDataSet1.Params.ParamByName('me5').Value:=me5; Form1.SQLDataSet1.Params.ParamByName('f1').Value:=f1; Form1.SQLDataSet1.Params.ParamByName('f2').Value:=f2; Form1.SQLDataSet1.Params.ParamByName('f3').Value:=f3; Form1.SQLDataSet1.Params.ParamByName('wk5').Value:=wk5; h1:=Form1.SQLDataSet1.ExecSQL(False); if h1 <> 1 then begin {!!} form1.Label2.Caption:='Fehler beim Einfügen in Ware, Administrator verständigen'; end; if finaz = 1 then begin fis:=ialpha; ialpha:=DateTimeToStr(now); // Form1.Datumdb; fiz:=ialpha; ialpha:=fis; Form1.SQLDataSet1.Params.Clear; Form1.SQLDataSet1.CommandText:='INSERT INTO finanzamt (Tabelle, Zeit, Art, PNR, Feld1, Feld2, Feld3, Feld4, Feld5, Feld6, Feld7) VALUES (:fia1,:fia2,:fia3,:fia4,:fia5,:fia6,:fia7,:fia8,:fia9,:fia10,:fia11)'; Form1.SQLDataSet1.Params.ParamByName('fia1').Value:='Ware'; Form1.SQLDataSet1.Params.ParamByName('fia2').Value:=fiz; Form1.SQLDataSet1.Params.ParamByName('fia3').Value:='1'; Form1.SQLDataSet1.Params.ParamByName('fia4').Value:=IntToStr(pnr); Form1.SQLDataSet1.Params.ParamByName('fia5').Value:=wa5; Form1.SQLDataSet1.Params.ParamByName('fia6').Value:=wg5; Form1.SQLDataSet1.Params.ParamByName('fia7').Value:=me5; Form1.SQLDataSet1.Params.ParamByName('fia8').Value:=f1; Form1.SQLDataSet1.Params.ParamByName('fia9').Value:=f2; Form1.SQLDataSet1.Params.ParamByName('fia10').Value:=f3; Form1.SQLDataSet1.Params.ParamByName('fia11').Value:=wk5; h1:=Form1.SQLDataSet1.ExecSQL(False); if h1 <> 1 then begin {!!} Form1.Label2.Caption:='Fehler beim Einfügen in Finazamt, Administrator verständigen'; end; end; end; {!!} end; Gruß K-H |
AW: nochmal SQLDataSet
h1 = 1
finaz = 1 Routine Datumdb änder das Format vom Datum in ialpha von tt.mm.jjjj in jjjj-mm-tt alle Varialblen sind string bis auf h1 und fianz: integer |
AW: nochmal SQLDataSet
Hallo,
hast Du die Optimierungen ausgeschaltet? Wo wird finaz gesetzt? Welchen Wert hat finaz in Zeile 16? Zeige mal den ganzen Code der Methode. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:16 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