Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   nochmal SQLDataSet (https://www.delphipraxis.net/194684-nochmal-sqldataset.html)

juelin 21. Dez 2017 10:56

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:
 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;
Nach dieser Routine ist der Satz in Tabelle Ware angelegt und in Tabelle Finanzamt nicht.
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

Delphi.Narium 21. Dez 2017 11:26

AW: nochmal SQLDataSet
 
Zeile 12 ist
Delphi-Quellcode:
 h1:=Form1.SQLDataSet1.ExecSQL(False);
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.

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.

juelin 21. Dez 2017 11:57

AW: nochmal SQLDataSet
 
habe Programm debugt:

Ablauf:
von Zeile 1 bis Zeile 11 normal.
Danach Zeile 15
und dann Zeile 42

verstehe wer will!!!!!!

Delphi.Narium 21. Dez 2017 12:11

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.

haentschman 21. Dez 2017 12:11

AW: nochmal SQLDataSet
 
Moin...:P

Was steht denn in der Variable finaz drin?

p80286 21. Dez 2017 12:21

AW: nochmal SQLDataSet
 
Ich habe einmal versucht den Source zu compilieren:
Delphi-Quellcode:
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;
Bis auf die markierten Ergänzungen {!!} und die Variablendeklarationen ist da alles in Ordnung ??

Gruß
K-H

juelin 21. Dez 2017 12:26

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

hoika 28. Dez 2017 11:59

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 04:15 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz