Wie Duffy sagte (wieder mal einer schneller) :
Du solltest Dir erstmal klar machen, was Du willst. Wenn Du bestehende Daten ändern willst (und das hinzufügen eines Wertes in ein vormals leeres Feld eines schon existenten Datensatzes ist eine Änderung) dann Duffy's Variante um Delphicode ergänzt:
Delphi-Quellcode:
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('Update Personen');
ADOQuery1.SQL.Add(' set Kind = 1');
ADOQuery1.SQL.Add(' where PersonenID = 2');
ADOQuery1.ExecSQL;
Sollten Die Datensätze jedoch noch nicht in der
DB existieren, so kannst Du die Bedingung nicht im
SQL-Statement formulieren, sondern mußt das schon in Delphi tun:
Delphi-Quellcode:
var i : Integer;
begin
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('
insert into Personen');
ADOQuery1.SQL.Add('
( ');
ADOQuery1.SQL.Add('
FeldA, ');
//PersonenID sollte identity sein und darf
ADOQuery1.SQL.Add('
FeldB, ');
//deshalb nicht eingefügt werden (macht DB selbst)
ADOQuery1.SQL.Add('
Kind ');
ADOQuery1.SQL.Add('
) ');
ADOQuery1.SQL.Add('
VALUES ');
ADOQuery1.SQL.Add('
( ');
ADOQuery1.SQL.Add('
:ParaA, ');
ADOQuery1.SQL.Add('
:ParaB, ');
ADOQuery1.SQL.Add('
:ParaK ');
ADOQuery1.SQL.Add('
) ');
ADOQuery1.Prepare;
for i := 1
to 4
do
begin
ADOQuery1.ParamByName('
ParaA').AsString := '
Test';
//Werte könnten aus z.B. TStringList
ADOQuery2.ParamByName('
ParaA').AsString := '
Probe';
//o.ä. stammen
if i = 2
then begin
ADOQuery2.ParamByName('
ParaK').AsInteger := 1;
end else begin
ADOQuery2.ParamByName('
ParaK').Clear;
// weist dem Parameter für Kind NULL
ADOQuery2.ParamByName('
ParaK').Bound := True;
// zu und verhindert Setzung eines
end;
// Standardwertes
ADOQuery2.ExecSql
end;
end;
greets