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
TDBGrid, TDBF
-
- Beiträge: 729
- 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
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
-
- Beiträge: 321
- 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
Hallo Soner
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
Danke, werde ich versuchen, dachte ich muß einen Index haben bzw. angeben.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
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
-
- Beiträge: 729
- 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
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 ... taset.html
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 ... taset.html