![]() |
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; |
Re: Datensatz wird 2mal erzeugt. Warum?
Das Open ist zuviel.
|
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. |
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