Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Datensatz wird 2mal erzeugt. Warum? (https://www.delphipraxis.net/88356-datensatz-wird-2mal-erzeugt-warum.html)

fapsons 14. Mär 2007 15:10

Datenbank: Firebird • Version: 2.0 • Zugriff über: InterBase

Datensatz wird 2mal erzeugt. Warum?
 
Hallo Leute,

habe folgendes Problem. Die unten aufgeführte Procedure funktioniert beim Update einwandfrei, beim Insert habe ich das Problem, dass der Datensatz 2x angelegt wird.
Wie kann das sein? Kann mir jemand sagen, warum?

Danke!

Gruß,
-fapsons--


Delphi-Quellcode:
procedure Set_DB_Values;  // Setzt Kundendaten in die Datenbank
var i :Integer;
    SQL_Line: array[1..6] of String;
    SQL_Prompt :String;
begin

 if reg.unwritten then   // falls Datensatz noch nicht existiert, dann Insert
 begin
  SQL_Line[1] := 'INSERT INTO Version ';
  SQL_Line[2] := '(fiid, ze, bde, pep, zk, av, webze, antrv, ';
  SQL_Line[3] := 'sprachv, anz_client, anz_webclient, pc_ddp, ';
  SQL_Line[4] := 'server_name, ma_anz, versionkey) ';
  SQL_Line[5] := 'VALUES (:FILID, :ZE, :BDE, :PEP, :ZK, :AV, :WEBZE, :ANTRV, ';
  SQL_Line[6] := ':SPRACHV, :nCLIENT, :nWClient, :PCDDP, :SERVERNAM, :MAANZ, :VERSKEY)';
 End

 ELSE                   // falls Datensatz schon existiert, dann Update
   begin
    SQL_Line[1] := 'UPDATE Version v ';
    SQL_Line[2] := 'SET v.ze = :ZE, v.bde = :BDE, v.pep = :PEP, v.zk = :ZK, v.av = :AV, v.webze = :WEBZE, v.antrv = :ANTRV, ';
    SQL_Line[3] := 'v.sprachv = :SPRACHV, v.anz_client = :nCLIENT, v.anz_webclient = :nWClient, v.pc_ddp = :PCDDP, ';
    SQL_Line[4] := 'v.server_name = :SERVERNAM, v.ma_anz = :MAANZ, v.versionkey = :VERSKEY ';
    SQL_Line[5] := 'WHERE (v.vsid = :VERSID) AND (v.fiid = :FILID)';
   End;

 for i := 1 to length(SQL_Line) do SQL_Prompt := SQL_Prompt + SQL_Line[i];  // SQL-Prompt erzeugen

 with D_DataModule.DataQuery do
  begin
    SQL.Clear;
    SQL.Text := SQL_Prompt;
    Params.ParamByName('ZE').Value := bool_to_JN(reg.ZE);
    Params.ParamByName('BDE').Value := bool_to_JN(reg.BDE);
    Params.ParamByName('PEP').Value := bool_to_JN(reg.PEP);
    Params.ParamByName('ZK').Value := bool_to_JN(reg.ZK);
    Params.ParamByName('AV').Value := bool_to_JN(reg.AV);
    Params.ParamByName('WEBZE').Value := bool_to_JN(reg.WebZE);
    Params.ParamByName('ANTRV').Value := bool_to_JN(reg.AntragsV);
    Params.ParamByName('SPRACHV').AsInteger := reg.Sprachversion;
    Params.ParamByName('nCLIENT').AsInteger := reg.nClients;
    Params.ParamByName('nWClient').AsInteger := reg.WebZEAccess;
    Params.ParamByName('PCDDP').AsString := reg.PC_DDP;
    Params.ParamByName('SERVERNAM').AsString := reg.ServerName;
    Params.ParamByName('MAANZ').AsInteger := reg.nMitarbeiter;
    Params.ParamByName('VERSKEY').AsString := reg.VersionKey;
    Params.ParamByName('FILID').AsInteger := reg.Filial_ID;
   // Params.ParamByName('VERSID').AsInteger := reg.Versions_ID;
    Prepare;
    ExecSQL;
    Open;
    Close;
  End;
  D_DataModule.Transaction.Commit;
End;

mkinzler 14. Mär 2007 15:13

Re: Datensatz wird 2mal erzeugt. Warum?
 
Das Open ist zuviel.

Bernhard Geyer 14. Mär 2007 15:15

Re: Datensatz wird 2mal erzeugt. Warum?
 
Genauer Open + Close.

Open + Close dürfen nur bei SELECT-Anweisungen verwendet werden. Bei allen anderen SQL-Anweisungen (INSERT, DELETE, ...) wird ExecSQL verwendet.

fapsons 15. Mär 2007 09:14

Re: Datensatz wird 2mal erzeugt. Warum?
 
Danke, liegt manchmal bei den einfachen Dingen...;)


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:45 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