Entwickler-Ecke
Datenbanken - DBGrid: Neuen Datensatz anlegen
Galaxydriver - Di 20.10.09 08:53
Titel: DBGrid: Neuen Datensatz anlegen
Hallo,
ich habe ein DBGrid und möchte einen neuen Datensatz einfügen, indem ich nach dem Verlassen eines Feldes der eingegebene Wert in die Tabelle geschrieben wird und dabei ein neuer Datensatz angelegt wird.
Wenn in einem bestehenden Datensatz nur der Inhalt eines Feldes verändert wird - also ein neuer Wert eingegeben wird, soll dieser den alten Wert im Tabellenfeld ersetzen.
Ich stelle mir das so vor wie in MS-Access. Wenn ich da in ein Feld einen Wert eintrage wird automatisch ein kompletter dazu Datensatz angelegt bzw. veränderte Wert gespeichert.
Unterstützt ein DBGrid diese Aktion oder muss die mit einem OnLeave-Ereignis auf ein Tabellen-Feld selbst implementiert werden?
Momentan ist es so, dass ich im DBGrid zwar mit dem Curser zwar in das Feld klicken kann - allerdings nichts eingeben.
Die Eigenschaft ReadOnly Objektinspektor ist nicht angehakt - also false.
cu
Chris
zuma - Di 20.10.09 09:59
grundsätzlich macht das Grid da gar nichts, es dient 'nur' der Anzeige.
Dein 'Edit/Insert' wird in dem mit dem Grid verbundenen Dataset gemacht.
wenn du kein Readonly auf dem Grid hast, vermute ich, das du es im Dataset hast.
Das kann mehrere Ursachen haben, ich denke mal, das du
a) einen 'nur-Lesen'-zugriff auf die DB gemacht hast
oder
b) die gelesene Datenmenge mit einem Join ermittelt hast (weiss ich bei ADO nicht sicher, aber meist wird bei 'gejointen Sqls' die Datenmenge als 'read only' geöffnet).
Woran's noch liegen kann, kann evtl. meine zur Zeit kaputte Glaskugel zeigen oder ein wenig Source-code ;)
Galaxydriver - Mi 21.10.09 08:19
Danke für den Tipp - es lag an der Eigenschaft "Active" im DataSet!
Die muss man anklicken, dann kann man auch Daten anlegen bzw. zurückschreiben.
Ich habe vergeblich nach dem Quellcodegesucht in der Unit gesucht, der für die Datenbankanbindung benötigt wird.
In der Unit konnte ich z. B. weder den Connection-String, noch ein SQL-Statement finden.
Wo schreibt das Delphi hin - in eine Projektdatei oder ein Include?
Wenn ich z. B. Steuerelemente oder eigene Klassen schreibe, dann finde ich die in der Unit?
cu
Chris
zuma - Mi 21.10.09 13:13
Also sorgt das 'Active' dafür, das die Datenmenge auch schreibend und nicht nur lesend geöffnet wird.
Kenne mich mit ADO nicht so aus, denke aber mal, das es da ein Objekt gibt, das die Datenbankanbindung managed und mit dem deine Table/dein Query verbunden ist?
Und dort wird wahrscheinlich auch sowas wie der connection-string usw. zu finden sein. Aber wie gesagt, bei ADO kenn ich mich nicht aus, kann also nur vermuten.
Bei eigenen Klassen steht natürlich alles da, wo man es selber hinlegt. Den Soucre einer Fremdkomponente zu ändern halte ich generell nicht für sinnvoll, wenn man Änderungen braucht, würde ich es eher vererben.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!