OK, nochmal zum mitschreiben (
)
- Die Zeile mit der Fehlermeldung
versflid := ADOQuery1.FieldByName('Bearbeiter').asString;
Du willst einen Wert aus ADOQuery1 an versflid übergeben.
ADOQuery1 wird aber nie (!) mit einem SELECT-Stement aufgerufen, erst recht nicht mit einem, dass die Spalte "Bearbeiter" enthält.
Wenn du Daten aus der DB in die Edits schreiben willst, dann schau dir mal OnCreate im Form "Versuch2" an.
Außerdem hat diese Zeile keinen Sinn, da du die Variable "versflid" im Code nicht mehr benutzt.
- Das UPDATE-Statement
Delphi-Quellcode:
With FindComponent(CompNames[i])
As TEdit
Do
If Text <> '
'
Then
Begin
// Wenn Edit <> '' -> Wert in den Array & Spalte kommt mit in die SET-Clause...
SetVals[SetCount] := Text;
SetStr := SetStr + '
,' + #10 + '
' + Fieldnames[i] + '
= :' + '
i_F' + IntToStr(SetCount);
inc(SetCount);
End;
...
With ADOQuery1
Do
Begin
SQL.Text :=
'
UPDATE dbo_VFL_VERZ_TEMP t' + #10 +
'
SET ' + SetStr + #10 +
'
WHERE t.Bearbeiter = :i_Versuch';
Prepared := True;
// Werte der Paramter :i_F(1 - ...)
For i := 0
To pred(SetCount)
Do
Parameters.ParamByName('
i_F' + IntToStr(i)).Value := SetVals[i];
...
Für jedes Edit, dass beschrieben wurde, kommt eine Zuweisung ins UPDATE-Statement (incl. Parameter).
Die Werte, für die Parameter kommen in den Array SetVals.
In SetCount steht wieviele Felder zu ändern sind. Es wird eine Schleife durchlaufen, in der die Parameterwete an die Query übergeben werden.
Hier fehlt der Wert für :i_Versuch! Das könnte so aussehen:
Parameters.ParamByName('i_Versuch').AsString := TB_Bearbeiter.Text;