Einzelnen Beitrag anzeigen

Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.297 Beiträge
 
Delphi 12 Athens
 
#16

AW: gesonderte Ergebnisberechnung in DB-Tab eingeben

  Alt 11. Apr 2017, 18:52
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;
  Mit Zitat antworten Zitat