Hallo,
[
OT]Xong war schneller als ich
[/
OT]
@HolgerCW
wenn Du es auf diese Art und Weise machen willst, musst Du wohl sowas machen:
Delphi-Quellcode:
with DM_Query_XYZ do
begin
QueryInsert.Close;
QueryInsert.SQL[0] := 'INSERT INTO ' + Tabelle + '';
QueryInsert.SQL[1] := '(' + Spalten + ')';
QueryInsert.SQL[2] := 'VALUES(' + AnsiReplaceText(Werte,'''','''''') + ')';
QueryInsert.ExecSQL;
end;
Nichtsdestotrotz überleg' Dir, ob Du das nicht doch lieber über Parameter machen willst.
Delphi-Quellcode:
procedure Datensatz_insert(
Query : TAdoQuery;Werte: tStringList; Spalten: tStringList; Tabelle:
String);
Var
i : Integer;
sParams :
String;
sSpalten :
String;
begin
if Werte.Count <> Spalten.Count
then begin
ShowMessage('
Keine Übereinstimmung im Werte-/Spaltenpaar.');
Exit;
end;
Query.Close;
Query.SQL.Clear;
sParams := '
';
sSpalten := '
';
for i := 0
To Werte.Count - 1
Do begin
if i = Werte.Count - 1
then begin
sSpalten := sSpalten + Spalten[i];
sParams := sParams + '
:' + Spalten[i];
Query.Parameters.AddParameter.
Name := Spalten[i];
end else begin
sSpalten := sSpalten + Spalten[i] + '
,';
sParams := sParams + '
:' + Spalten[i] + '
,';
Query.Parameters.AddParameter.
Name := Spalten[i];
end;
End;
Query.SQL.Add('
Insert into ' + Tabelle + '
(');
Query.SQL.Add(sSpalten);
Query.SQL.Add('
) values (');
Query.SQL.Add(sParams);
Query.SQL.Add('
)');
for i := 0
To Werte.Count - 1
Do Query.Parameters[i].Value := Werte[i];
Query.ExecSQL;
end;
procedure TForm1.Button1Click(Sender: TObject);
Var
Werte : TStringList;
Spalten : TStringList;
begin
Werte := TStringList.Create;
Spalten := TStringList.Create;
Werte.Add('
Wert 1');
// Das könnte man ggfls. auch als Commaseperated übergeben
Werte.Add('
Wert 2');
Werte.Add('
Wert 3');
Spalten.Add('
Spalte1');
Spalten.Add('
Spalte2');
Spalten.Add('
Spalte3');
Datensatz_insert(QueryInsert, Werte, Spalten, '
Tabelle');
Werte.Free;
Spalten.Free;
end;
Hat bei mir soeben funktioniert.