Ich habe es jetzt mal getestet, so funktioniert es in dem Testprogramm ( UniDAC statt IBDAC; aber UniDAC verwendet ja den IBDAC-Provider)
Delphi-Quellcode:
var
sL, slF: TStrings;
i, id: Integer;
begin
try
sl := TStringlist.Create;
slf := TStringList.Create;
slf.Delimiter := ';';
sl.add( 'Susi;Mueller;01.01.1900');
sl.add( 'Peter;Mueller;01.01.1990');
sl.add( 'Susi;Mueller;24.12.1974');
sl.add( 'Susi;Maier;01.01.1900');
IBQuery.SQL.Text := 'update or insert into Person ( vorname, nachname, gebdat) values ( :vorname, :nachname, :gebdat ) MATCHING ( vorname, gebdat) RETURNING id;';
for i := 0 to sl.Count -1 do
begin
slf.DelimitedText := sl[i];
IBQuery.Params[0].Value := slf[0];
IBQuery.Params[1].Value := slf[1];
IBQuery.Params[2].asString := slf[2];
IBQuery.ExecSQL;
id := IBQuery.Params[3].Value; //oder id := IBQuery.ParamByName('RET_ID').Value;
UniQuery1.Refresh;
Application.ProcessMessages;
ShowMessage( Format( 'Rückgabe: %d', [id]));
end;
finally
slf.Free;
sl.Free;
end;
end;