Autor Beitrag
gamoes
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 86



BeitragVerfasst: Fr 14.04.06 21:24 
Wenn ich mit folgendem Quelltext den Formularinhalt in die DB abspeichere klappt das zunächst:

ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
*****************************************************
procedure Tfrm_Rechnung.bt_SpeichernClick(Sender: TObject);
begin
  if(lbl_ReNr.Caption<>'0'AND (cb_Nachname.Text<>''AND(Ed_Vorname.Text<>''THEN
   begin
    ora_qry_SpeichernR.SQL.Text:='INSERT INTO rechnung'
                               +'(renr, datum,'
                               +' r_kdnr, gesamtbetrag)'
                               +'VALUES(:RENR, :DATUM,'
                               +' :R_KDNR, :GESAMTBETRAG)';
    ora_qry_SpeichernR.Params.ParamByName('RENR').AsInteger:=StrToInt(lbl_ReNr.Caption);
    ora_qry_SpeichernR.Params.ParamByName('DATUM').AsDateTime:=dtp_Rechnung.DateTime;
    ora_qry_SpeichernR.Params.ParamByName('R_KDNR').AsInteger:=StrToInt(Ed_Kdnr.Text);
    ora_qry_SpeichernR.Params.ParamByName('GESAMTBETRAG').AsFloat:=StrToFloat(lbl_BruttoGesamtbetrag.Caption);
    ora_qry_SpeichernR.Execute;

    Re_Speichern;

    ora_qry_ArtUebernehmen.SQL.Text:='TRUNCATE TABLE tempredat';
    ora_qry_ArtUebernehmen.Execute;

    application.MessageBox('Die Rechnungsdaten wurden gespeichert','Rechnung gespeichert',64);
    //frm_Main.Show;
    end
   else
    begin
    ShowMessage('Solange Sie keine Artikel in Rechnung stellen, läßt sich die Rechnung nicht abspeichern');
     frm_Main.Show;
    end;
end;
****************************************************

Würde ich jetzt mit frm_Main.Show mein aktuelles Formular schließen, dann wieder öffnen kann ich problemlos die nächste Rechnung eingeben und abspeichern. Wenn ich aber das Formular nicht schließé erhalte ich den Fehler:
SQL-Befehl wurde nicht korrekt beendet. Wieso denn das?

Mit folgendem Quelltext beginne ich eine neue Rechung:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
***************************************
procedure Tfrm_Rechnung.bt_NeuClick(Sender: TObject);
begin
   qry_ReNr.Close;
   qry_ReNr.SQL.Add('SELECT MAX(RENR)+1 AS nr FROM rechnung');
   qry_ReNr.Open;
   if (qry_ReNr.Recordset.RecordCount > 0and (qry_ReNr['nr']<> NULL) THEN
    begin
     lbl_ReNr.Caption:=qry_ReNr['nr'];
    end
   else
    begin
     qry_ReNr.Close;
     qry_ReNr.SQL.Clear;
     qry_ReNr.SQL.Add('SELECT renr FROM renummer');
     qry_ReNr.Open;
     lbl_ReNr.Caption:=qry_ReNr['renr'];
    end;
   cb_Nachname.Clear;
   Ed_Vorname.Clear;
   Ed_Kdnr.Clear;
end;
***************************************


Verstehen kann ich das nicht, denn beim erste Abspeichern gibt es keine Probleme alle Daten werde korrekt in die DB gespeichert.

Viele Grüße
Gabi

Moderiert von user profile iconraziel: Delphi-Tags hinzugefügt
bwolf
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 50



BeitragVerfasst: Fr 21.04.06 09:30 
Hi,

du solltest immer, bevor du eine Anweisung in eine Query schreibst diese vorher leeren:

query.SQL.clear;

Ansonsten werden die folgenden Anweisungen nämlich dazu geschrieben, und dann geht da nix ;)
Gruß ben
raiguen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 374

WIN 2000prof, WIN XP prof
D7EP, MSSQL, ABSDB
BeitragVerfasst: Fr 21.04.06 09:46 
Moin :-)
Genau! Speziell dann, wenn sich die Statements ändern...
Am einfachsten geht natürlich auch mit
Query.SQL.Text := ... ;-)
so wie Du das hier gemacht hast :
ora_qry_SpeichernR.SQL.Text:=...
Alpha_Wolf
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 297

Ubuntu, Win XP, Win Vista
C#, Delphi 6 Prof, Delphi 2007 Prof, Java
BeitragVerfasst: Fr 21.04.06 10:03 
user profile iconraiguen hat folgendes geschrieben:

Query.SQL.Text := ... ;-)


Ich würde eher sagen es geht so besser:

ausblenden Delphi-Quelltext
1:
Query.SQL.Text := '';					


Oder kenn ich die Zuweisung "..." schlichtweg nicht? ;)

_________________
Diskutiere nie mit einem Irren - er zieht dich auf sein Niveau und schlägt dich mit seiner Erfahrung.
gamoes Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 86



BeitragVerfasst: Fr 21.04.06 10:40 
Vielen Dank für Eure Hilfe.
Zum einen klappt es jetzt fehlerfrei und zum anderen habe ich es auch verstanden warum es vorher nicht geklappt hat.

Viele Grüße
Gabi
raiguen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 374

WIN 2000prof, WIN XP prof
D7EP, MSSQL, ABSDB
BeitragVerfasst: Fr 21.04.06 10:48 
boarrrr :roll:
Also zur Verdeutlichung nehme ich noch mal das Codebeispiel von user profile icongamoes:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
***************************************
procedure Tfrm_Rechnung.bt_NeuClick(Sender: TObject);
begin
   qry_ReNr.Close;
   qry_ReNr.SQL.Add('SELECT MAX(RENR)+1 AS nr FROM rechnung');
   qry_ReNr.Open;
   {weitere Anweisungen}
   else
    begin
     qry_ReNr.Close;
     qry_ReNr.SQL.Clear;
     qry_ReNr.SQL.Add('SELECT renr FROM renummer');
     qry_ReNr.Open;
     lbl_ReNr.Caption:=qry_ReNr['renr'];
    end;
   {weitere Anweisungen}
end;
***************************************

Das kann man auch so schreiben:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
***************************************
procedure Tfrm_Rechnung.bt_NeuClick(Sender: TObject);
begin
   qry_ReNr.Close;
   qry_ReNr.SQL.Text := 'SELECT MAX(RENR)+1 AS nr FROM rechnung';
   qry_ReNr.Open;
   {weitere Anweisungen}
   else
    begin
     qry_ReNr.Close;
     qry_ReNr.SQL.Text := 'SELECT renr FROM renummer';
     qry_ReNr.Open;
     lbl_ReNr.Caption:=qry_ReNr['renr'];
    end;
   {weitere Anweisungen}
end;
***************************************

user profile icongamoes selbst hat ja bereits diese Art benutzt:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
    ora_qry_SpeichernR.SQL.Text:='INSERT INTO rechnung'
                               +'(renr, datum,'
                               +' r_kdnr, gesamtbetrag)'
                               +'VALUES(:RENR, :DATUM,'
                               +' :R_KDNR, :GESAMTBETRAG)';

und darauf bezog sich meine Anmerkung ora_qry_SpeichernR.SQL.Text:=... ;-)
Selbstredend sind die ... durch ein entsprechendes Statement zu ersetzen ;-)
Mit Query.SQL.Text := '' weist Du dem Statement nix zu, also wird beim Ausführen die Query natürlich meckern...
bwolf
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 50



BeitragVerfasst: Fr 21.04.06 10:58 
Hi,

du solltest immer, bevor du eine Anweisung in eine Query schreibst diese vorher leeren:

query.SQL.clear;

Ansonsten werden die folgenden Anweisungen nämlich dazu geschrieben, und dann geht da nix ;)
Gruß ben
Alpha_Wolf
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 297

Ubuntu, Win XP, Win Vista
C#, Delphi 6 Prof, Delphi 2007 Prof, Java
BeitragVerfasst: Fr 21.04.06 11:01 
Sicher kann sie das ;) war eigentlich eher als späßle gedacht.

Es sah für mich nur so aus als würde sich dein Post auf das vorige Post beziehen und da ging es ums clearen.

Und deine Variante funktioniert natürlich genauso :)

@bwolf

Was hat das für einen Sinn dein Post von oben zu kopieren und erneut zu posten?

_________________
Diskutiere nie mit einem Irren - er zieht dich auf sein Niveau und schlägt dich mit seiner Erfahrung.