AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

nochmal SQLDataSet

Ein Thema von juelin · begonnen am 21. Dez 2017 · letzter Beitrag vom 28. Dez 2017
Antwort Antwort
juelin

Registriert seit: 9. Mai 2006
Ort: Mannheim
142 Beiträge
 
Delphi XE5 Professional
 
#1

nochmal SQLDataSet

  Alt 21. Dez 2017, 11:56
Datenbank: MySql • Version: 5.6.24 • Zugriff über: 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
Jürgen Linder

Geändert von juelin (21. Dez 2017 um 12:17 Uhr) Grund: Delphi-Tag eingefügt
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.490 Beiträge
 
Delphi 7 Professional
 
#2

AW: nochmal SQLDataSet

  Alt 21. Dez 2017, 12:26
Zeile 12 ist  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.
  Mit Zitat antworten Zitat
juelin

Registriert seit: 9. Mai 2006
Ort: Mannheim
142 Beiträge
 
Delphi XE5 Professional
 
#3

AW: nochmal SQLDataSet

  Alt 21. Dez 2017, 12:57
habe Programm debugt:

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

verstehe wer will!!!!!!
Jürgen Linder
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.490 Beiträge
 
Delphi 7 Professional
 
#4

AW: nochmal SQLDataSet

  Alt 21. Dez 2017, 13:11
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.
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.387 Beiträge
 
Delphi 12 Athens
 
#5

AW: nochmal SQLDataSet

  Alt 21. Dez 2017, 13:11
Moin...

Was steht denn in der Variable finaz drin?
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#6

AW: nochmal SQLDataSet

  Alt 21. Dez 2017, 13:21
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
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
juelin

Registriert seit: 9. Mai 2006
Ort: Mannheim
142 Beiträge
 
Delphi XE5 Professional
 
#7

AW: nochmal SQLDataSet

  Alt 21. Dez 2017, 13:26
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
Jürgen Linder
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.275 Beiträge
 
Delphi 10.4 Sydney
 
#8

AW: nochmal SQLDataSet

  Alt 28. Dez 2017, 12:59
Hallo,
hast Du die Optimierungen ausgeschaltet?
Wo wird finaz gesetzt?
Welchen Wert hat finaz in Zeile 16?

Zeige mal den ganzen Code der Methode.
Heiko
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:53 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