Registriert seit: 29. Jan 2007
Ort: Berlin
65 Beiträge
|
Datensatz wird 2mal erzeugt. Warum?
14. Mär 2007, 16:10
Datenbank: Firebird • Version: 2.0 • Zugriff über: InterBase
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;
|