Hallöle...
Zitat:
das .Close natürlich auch
immer wieder interessant wie sich manche Aussagen halten. Das CLOSE muß nicht hin. Die
Query macht intern ein automatisch ein CLOSE im Ausführen vor dem Setzen des
SQL.Text
Umkehrschluß: Ich habe noch nie ein Close benötigt.
Zitat:
hab ich erst jetzt bemerkt, was hat es mit IsEdit auf sich?
...aus seinem letzten Testprojekt...ein Flag für den Bearbeiten Modus. Hier nicht relevant.
Delphi-Quellcode:
procedure TMainFrm.btnTestInput1Click(Sender: TObject);
var
CurrentCustomerID:
string;
begin
// qryMain.SQL.Clear; ! nicht notwendig -> raus
// qryMain.Params.Clear; ! nicht notwendig -> raus
if IsEdit
then // Ist das Flag gesetzt?
begin
//richtig wenn die Selected.Caption auch die "2" enthällt. (Debugger)
CurrentCustomerID := lvProductList.Selected.Caption;
// es fehlen Parameter (die "2" wieder auf Parameter gesetzt)
// benenne die Parameter mit 3 stelligen Kürzeln. Da siehst du was ist ein Parameter...
// die Parameter im SQL müssen vorhanden sein
// ENTWEDER bei kompletten Update
qryMain.SQL.Text := '
UPDATE WARENVERKAUF1 SET KDNR = :KNR, NAME = :NAM, VORNAME = :VNA, FIRMA = :FIR,
PRODUKT = :PRO, ANZAHL = :ANZ, PREIS = :PRE WHERE ID = :CID';
// das ist die ID für die Auswahl des Datensatzes (WHERE ID = :CID)
qryMain.ParamByName('
CID').AsString := CurrentCustomerID;
// Hier gehören die Eingabefelder hin als Quelle für das UPDATE
qryMain.ParamByName('
KNR').AsString := edtCustomerNumber.Text;
qryMain.ParamByName('
NAM').AsString := edtName.Text;
qryMain.ParamByName('
VAN').AsString := edtVorname.Text;
qryMain.ParamByName('
FIR').AsString := edtFirma.Text;
qryMain.ParamByName('
PRO').AsString := edtProdukt.Text;
qryMain.ParamByName('
ANZ').AsInteger := StrToInt(edtTestInput.Text);
qryMain.ParamByName('
PRE').AsString := edtPreis.Text;
// ODER nur die Anzahl
qryMain.SQL.Text := '
UPDATE WARENVERKAUF1 SET ANZAHL = :ANZ WHERE ID = :CID';
// das ist die ID für die Auswahl des Datensatzes (WHERE ID = :CID)
qryMain.ParamByName('
CID').AsString := CurrentCustomerID;
qryMain.ParamByName('
ANZ').AsInteger := StrToInt(edtTestInput.Text);
// Ausführen des Updates
qryMain.ExecSQL;
// qryMain.Close; ! nicht notwendig -> raus
// Alle Daten neu holen
qryMain.SQL.Text := '
SELECT ID, KDNR, NAME, VORNAME, FIRMA, PRODUKT, ANZAHL, PREIS FROM WARENVERKAUF1';
qryMain.Open;
// Aktualisierung ListView
while not qryMain.EOF
do
begin // Der "Datenszeiger" wird auf den nächsten Datensatz gesetzt
RefreshItems(qryMain.FieldByName('
ID').AsString;,
qryMain.FieldByName('
KDNR').AsString,
qryMain.FieldByName('
NAME').AsString,
qryMain.FieldByName('
VORNAME').AsString,
qryMain.FieldByName('
FIRMA').AsString,
qryMain.FieldByName('
PRODUKT').AsString,
IntToStr(qryMain.FieldByName('
ANZAHL').AsInteger),
qryMain.FieldByName('
PREIS').AsString);
// nächsten Datensatz auswählen
qryMain.Next;
end;
//qryMain.close; ! nicht notwendig -> raus
//qryMain.ExecSQL; ! nicht notwendig -> raus
end;
end;