![]() |
Datenbank: mdb • Zugriff über: ado
dbgrid - geänderte Daten in Tabelle schreiben
Guten Tag,
ich habe eine dbgrid, in der ich mir über eine query bestimmte zeilen einer tabelle ausgeben lassen kann. Wenn ich einen wert direkt in dem dbgrid änder, wird der wert nicht in der tabelle geändert, weil ja eine query und kein table die verbindung über eine datasource mit dem dbgrid herstellt. Wie kann ich das erreichen, dass die änderungen sofort in die tabelle geschrieben werden? st eine mdb datenbank. die abfrage der query ist einfach nur "select * from ... where (vorher ausgewählte person)" adoconnection <- adoquery <- datasource <-dbgrid |
Re: dbgrid - geänderte Daten in Tabelle schreiben
das macht man mit Hilfe eines updateobjekts, welches man an den Query bindet.
|
Re: dbgrid - geänderte Daten in Tabelle schreiben
und wie macht man das?
|
Re: dbgrid - geänderte Daten in Tabelle schreiben
Wenn die Zeile im DBGrid nach einer Änderung verlassen wird, dann wird automatisch [TDataSet].Post aufgerufen.
Dabei ist es egal, ob es eine TADOTable oder TADOQuery ist. (Locktype muss ltOptimistic sein) Bei Abfragen einfacher Art wie
SQL-Code:
gibt es keine Probleme, geänderte Daten zurückzuschreiben oder neue Datensätze einzufügen.
SELECT * FROM Tabelle WHERE .....
Abfragen, die mehr als eine Tabelle benützen oder GROUP BY enthalten sind nicht updatefähig. Wo ist also dein Problem und wie lautet deine Abfrage genau ? |
Re: dbgrid - geänderte Daten in Tabelle schreiben
Der Quelltext für den eintrag in die dbgrid:
Code:
Mein Problem ist, dass wenn ich einen Wert in dem dbgrid änder, diese Änderung nicht in die Tabelle geschrieben wird. Beim Neustart ist also alles so wie vorher, ohne eingetragene Werte.
begin
DataModule1.ADOQuery4.close; DataModule1.ADOQuery4.SQL.Clear; DataModule1.ADOQuery4.SQL.Add('Select * from liste where Jahrgang=:''Cat1'' and Gruppe=:''Cat2'' and NAME=:''Cat3'''); Datamodule1.ADOQuery4.Parameters.ParamByName('Cat1').Value:= strtoint(Combobox1.text); Datamodule1.ADOQuery4.Parameters.ParamByName('Cat2').Value:=Combobox2.text; Datamodule1.ADOQuery4.Parameters.ParamByName('Cat3').Value:=Combobox4.text; DataModule1.ADOQuery4.Open; dbgrid1.visible:=true; end; |
Re: dbgrid - geänderte Daten in Tabelle schreiben
Delphi-Quellcode:
DataModule1.ADOQuery4.SQL.Add('Select * from liste where Jahrgang=:''Cat1'' and Gruppe=:''Cat2'' and NAME=:''Cat3'''); // Falsch
DataModule1.ADOQuery4.SQL.Add('Select * from liste where Jahrgang=:Cat1 and Gruppe=:Cat2 and NAME=:Cat3'); // Richtig |
Re: dbgrid - geänderte Daten in Tabelle schreiben
die abfrage funktioniert auch mit ''cat1''
wie gesagt, das ändern ist das problem. der quellcode oben ist nur das zum eintragen, damit habe ich keine probleme. |
Re: dbgrid - geänderte Daten in Tabelle schreiben
Zitat:
Was meinst du mit "nur das zum eintragen"? Bitte ![]() Zurück zu den Grundlagen: Angenommen du hast eine ADO Query mit "SELECT * FROM liste" verbunden mit einer DataSource verbunden mit einem DBGrid. Die ADOConnection verweisst auf eine MS Access Datenbank. (Jet Engine 4.0) Dann kann man über das DBGrid Daten verändern, neue Datensätze einfügen oder Datensätze löschen. No Problemo!!! Es sei denn, die MDW-Datei wäre schreibgeschützt oder in der ADO Connection sind falsche Share-Attribute eingestellt oder Locktype <> ltOptimistic oder DataSource.AutoEdit = False. Wenn die Tabelle keine Primärschlüssel hat kann es ebenfalls Probleme geben. Wenn du über dein Programm Daten änderst und gleichzeitig mit MS Access die Änderungen überprüfst, dann scheint es so, als ob dein Programm nichts bewirken würde. Das liegt am Cache. Bei Access solte man das Property CursorLocation immer auf clUseServer stellen. |
Re: dbgrid - geänderte Daten in Tabelle schreiben
Zitat:
Zitat:
der query befehl lautete jedoch "SELECT * from liste where... " |
Re: dbgrid - geänderte Daten in Tabelle schreiben
Zitat:
1.) vereinfache die Abfrage zu "SELECT * FROM liste" 2.) zeig mal deinen ConnectionString her 3.) nimm mal meinen ADO Database Explorer ![]() Du kannst auch auf "New Query" klicken und deine eigene Query eingeben (auch mit Parameter) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:28 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz