Einzelnen Beitrag anzeigen

nahpets
(Gast)

n/a Beiträge
 
#50

AW: Problem mit zugriff auf dbf Dateien und bearbeiten.

  Alt 4. Feb 2016, 13:02
Delphi-Quellcode:
procedure TMainForm.FileExit(Sender: TObject);
begin
  dbf1.active := false;
  dbf1.Close;
  application.Terminate;
end;
Das ist nicht wirklich klever.
Active := false; schließt die Tabelle, das folgende Close ist dann überflüssig.
Das Programm beenden geht auch eleganter durch das Schließen des Formulares.
Delphi-Quellcode:
procedure TMainForm.FileExit(Sender: TObject);
begin
  dbf1.Close;
  Close;
end;
Gibt den Buttons bitte Namen, an denen man erkennen kann, welche Funktion sie ausüben sollen (z. B. statt Button1 btnKuLimitSetzen).
Den Editfeldern gib bitte Namen, die auf ihren Inhalt schließen lassen (z. B. statt edit1 edKuLimit).

Und wenn Du dann noch jeder Prozedur einen Kommentar verpasst, was ihre Aufgabe sein soll, so könnte das durchaus hilfreich sein.
Man kann dann ggfls. aus Vergleich von Kommentar und Quelltext auf eventuelle Probleme schließen bzw. Widersprüche zwischen "Theorie und Praxis" erkennen.
Und wenn man ein Programm nach Jahren nochmal pflegen muss, dann reicht es den Kommentar zu lesen und nicht erst mehr oder weniger Quelltext, aus dem man dann auf die (vermutete) Aufgabe schließen muss.

Was soll denn hier jetzt passieren?
Für alle Datensätze KULimit auf einen einheitlichen Wert setzen?
Delphi-Quellcode:
procedure TMainForm.Button1Click(Sender: TObject);
begin
  dbf1.First;
  while not dbf1.EoF do begin
    dbf1.Edit;
    dbf1.FieldByName('KULimit').AsString := edit3.Text;
    dbf1.Post;
    dbf1.Next;
  end;
end;
oder war das der Versuch für die gefilterten Sätze KULimit zu setzen?
Dann könnte eventuell dashier hilfreich sein:
Delphi-Quellcode:
procedure TMainForm.btnKULimitClick(Sender: TObject);
// Für alle Datensätze mit KUNR im Bereich vonGast - bisGast
// KULimit auf den Wert aus edKULimit setzen.
begin
  dbf1.Filtered := false;
  dbf1.Filter := Format('KUNR >= %s and KUNR <= %s', [vonGast.Text, bisGast.Text]);
  dbf1.Filtered := true;
  dbf1.First;
  while not dbf1.EoF do begin
    dbf1.Edit;
    dbf1.FieldByName('KULimit').AsString := edKULimit.Text;
    dbf1.Post;
    dbf1.Next;
  end;
  dbf1.Filtered := false;
  dbf1.Filter := '';
  dbf1.First;
end;
Dashier würd' ich auch anpassen (wenn ich denn den Sinn verstehen würde).
Unklar ist z. B., was hier denn geöffnet werden soll, das Ergebnis des OpenDialogs wird doch überhauptnicht ausgewertet.
Delphi-Quellcode:
procedure TMainForm.Oeffnen1Click(Sender: TObject);
begin
   dbf1.active := false;
   DataSource1.DataSet := dbf1;
   OpenDialog1.execute;
   dbf1.active := true;
end;
Die bisherige Funktion entspricht:
Delphi-Quellcode:
procedure TMainForm.Oeffnen1Click(Sender: TObject);
begin
  dbf1.Close;
  dbf1.Open;
end;
Soll hier eventuell eine Datei ausgewählt werden?
Dann könnte dashier eventuell eine Lösung sein:
Delphi-Quellcode:
procedure TMainForm.Oeffnen1Click(Sender: TObject);
begin
   dbf1.Close
   if OpenDialog1.Execute then begin
     dbf1.TableName := OpenDialog1.FileName;
   end;
   dbf1.Open;
end;
  Mit Zitat antworten Zitat