TDBGrid, TDBF

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
hbr
Beiträge: 285
Registriert: Mi 20. Feb 2013, 10:30
OS, Lazarus, FPC: Win (L 2.2.4 FPC 3.2.2)
CPU-Target: 32/64,ARM(RPi)

TDBGrid, TDBF

Beitrag von hbr »

Hallo Forum,
ich habe leider immer noch ein Problem mit der Bearbeitung von Datensätzen.
Ich benutze ein TDBGrid zur Anzeige, welches ich für die Edition, für den Anwender gesperrt habe.
Dann natürlich eine DatenBank TDBF und TDatasource.

Wie stell ich es jetzt an, dass wenn der Benutzer auf einen Datensatz klickt, dessen Felder ich dann Programmtechnisch verändern kann?
Ich bekomme ja keinen Index für den Datensatz!

Mir würde hier einfallen, alle Felder zu sichern, verändern, den alten Satz löschen und einen neuen schreiben.
Nur habe ich dann aber wieder ein Problem, wie lösche ich den angezeigten Satz?
Hier fehlt mir auch wieder ein Index des Datensatzes.
Es fehlen mir einfach die Funktionsaufrufe(falls es welche gibt).

Oder gibt es eine elegantere Lösung für mein Problem?

Für jeden Vorschlag währe ich Dankbar.

MFG
hbr

Soner
Beiträge: 624
Registriert: Do 27. Sep 2012, 00:07
OS, Lazarus, FPC: Win10Pro-64Bit, Immer letzte Lazarus Release mit SVN-Fixes
CPU-Target: x86_64-win64
Wohnort: Hamburg

Re: TDBGrid, TDBF

Beitrag von Soner »

Du hast schon "Index". Bei jeder Datenbank komponente wie TTable, TDBF, TQuery zeigt der Datensatzzeiger immer auf eine Datenzeile. Sobald Benutzer in z.B. DBGrid eine andere Zeile klickt oder bei DBNavigator blätter wird der Datensatzzeiger bewegt. Wenn du jezt aktellen Datenzeile ändern willst mußt du so machen:

Code: Alles auswählen

 
  // Änderungen machen
  Dbf1.Edit; //DBf1 ist Die Komponente welche die dein Datasource.Dataset zeigt.
  Dbf1.FieldByName('DEINE SPALTE').AsInteger := 10// oder .AsString usw.
  Dbf1.Post; //Änderungen abschicken, d.h. in die Datei Speichern, DBGrid wird automatisch aktualisiert.
 
  // LÖSCHEN
  Dbf1.Delete;   //aktuelle Datenzeile löschen
 

hbr
Beiträge: 285
Registriert: Mi 20. Feb 2013, 10:30
OS, Lazarus, FPC: Win (L 2.2.4 FPC 3.2.2)
CPU-Target: 32/64,ARM(RPi)

Re: TDBGrid, TDBF

Beitrag von hbr »

Hallo Soner
Soner hat geschrieben:Du hast schon "Index". Bei jeder Datenbank komponente wie TTable, TDBF, TQuery zeigt der Datensatzzeiger immer auf eine Datenzeile. Sobald Benutzer in z.B. DBGrid eine andere Zeile klickt oder bei DBNavigator blätter wird der Datensatzzeiger bewegt. Wenn du jezt aktellen Datenzeile ändern willst mußt du so machen:

Code: Alles auswählen

 
  // Änderungen machen
  Dbf1.Edit; //DBf1 ist Die Komponente welche die dein Datasource.Dataset zeigt.
  Dbf1.FieldByName('DEINE SPALTE').AsInteger := 10// oder .AsString usw.
  Dbf1.Post; //Änderungen abschicken, d.h. in die Datei Speichern, DBGrid wird automatisch aktualisiert.
 
  // LÖSCHEN
  Dbf1.Delete;   //aktuelle Datenzeile löschen
 


Danke, werde ich versuchen, dachte ich muß einen Index haben bzw. angeben.
Das heisst, wenn ich mich mit dem Cursor auf einem Datensatz befinde und Felder übergebe,
dann wird kein neuer Datensatz erzeugt, sondern der vorhande geändert.

mfg
hbr

Soner
Beiträge: 624
Registriert: Do 27. Sep 2012, 00:07
OS, Lazarus, FPC: Win10Pro-64Bit, Immer letzte Lazarus Release mit SVN-Fixes
CPU-Target: x86_64-win64
Wohnort: Hamburg

Re: TDBGrid, TDBF

Beitrag von Soner »

Genau es wird immer aktuelle Datenzeile bearbeitet.
Wenn du neue Datenzeile hinzufügen willst, dann musst du die FUnktion Append (hinzufügen am Ende) oder Insert (hinzufügen am aktuellen Position) benutzen. Wie gesagt fürs bearbeiten musst du Edit aufrufen. Es folgt immer nach follgendem Muster:
1. Befehl zum bearbeiten ausführen.
(Dbf1.Edit oder Dbf1.Append oder Dbf1.Insert)
2. Datensätze ändern
( Dbf1.FieldByName('XYZ').AsXXX := XXX ; )
3. Änderungen Abschließen.
(Dbf1.Post;)

Index oder Spaltenwerte brauchst du nur wenn du bestimmte Datenzeile auswählen willst (d.h. Datencursor dorthin bewegen) . Der Befehl dafür heißt Locate.

Hier findest du die Befehle und Erklärungen:
http://www.freepascal.org/docs-html/fcl/db/tdataset.html

Antworten