AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi dbgrid - geänderte Daten in Tabelle schreiben
Thema durchsuchen
Ansicht
Themen-Optionen

dbgrid - geänderte Daten in Tabelle schreiben

Ein Thema von peterpan21 · begonnen am 8. Mai 2007 · letzter Beitrag vom 9. Mai 2007
Antwort Antwort
Seite 1 von 2  1 2      
peterpan21

Registriert seit: 8. Mai 2007
7 Beiträge
 
#1

dbgrid - geänderte Daten in Tabelle schreiben

  Alt 8. Mai 2007, 14:04
Datenbank: mdb • Zugriff über: ado
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
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: dbgrid - geänderte Daten in Tabelle schreiben

  Alt 8. Mai 2007, 14:24
das macht man mit Hilfe eines updateobjekts, welches man an den Query bindet.
Markus Kinzler
  Mit Zitat antworten Zitat
peterpan21

Registriert seit: 8. Mai 2007
7 Beiträge
 
#3

Re: dbgrid - geänderte Daten in Tabelle schreiben

  Alt 8. Mai 2007, 14:27
und wie macht man das?
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#4

Re: dbgrid - geänderte Daten in Tabelle schreiben

  Alt 8. Mai 2007, 15:09
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 wieSELECT * FROM Tabelle WHERE ..... gibt es keine Probleme, geänderte Daten zurückzuschreiben oder neue Datensätze einzufügen.
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 ?
Andreas
  Mit Zitat antworten Zitat
peterpan21

Registriert seit: 8. Mai 2007
7 Beiträge
 
#5

Re: dbgrid - geänderte Daten in Tabelle schreiben

  Alt 8. Mai 2007, 15:50
Der Quelltext für den eintrag in die dbgrid:
Code:
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;
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.
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#6

Re: dbgrid - geänderte Daten in Tabelle schreiben

  Alt 8. Mai 2007, 16:05
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
Andreas
  Mit Zitat antworten Zitat
peterpan21

Registriert seit: 8. Mai 2007
7 Beiträge
 
#7

Re: dbgrid - geänderte Daten in Tabelle schreiben

  Alt 8. Mai 2007, 16:15
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.
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#8

Re: dbgrid - geänderte Daten in Tabelle schreiben

  Alt 8. Mai 2007, 17:36
Zitat von peterpan21:
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.
Du drückst dich sehr ungenau aus.
Was meinst du mit "nur das zum eintragen"?
Bitte http://www.chiark.greenend.org.uk/~s...m/bugs-de.html lesen.

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.
Andreas
  Mit Zitat antworten Zitat
peterpan21

Registriert seit: 8. Mai 2007
7 Beiträge
 
#9

Re: dbgrid - geänderte Daten in Tabelle schreiben

  Alt 8. Mai 2007, 18:01
Zitat von shmia:
Zitat von peterpan21:
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.
Du drückst dich sehr ungenau aus.
Was meinst du mit "nur das zum eintragen"?
Bitte http://www.chiark.greenend.org.uk/~s...m/bugs-de.html lesen.
Das ist der Quellcode, mit dem die Tabelle in die dbgrid eingelesen wird.

Zitat von shmia:
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.
Genau das funktioniert eben nicht. Die einstellungen sind genauso, wie du sie beschrieben hast.
der query befehl lautete jedoch "SELECT * from liste where... "
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#10

Re: dbgrid - geänderte Daten in Tabelle schreiben

  Alt 8. Mai 2007, 18:11
Zitat von peterpan21:
Genau das funktioniert eben nicht. Die einstellungen sind genauso, wie du sie beschrieben hast.
der query befehl lautete jedoch "SELECT * from liste where... "
Systematische Fehlersuche wird jetzt benötigt.
1.) vereinfache die Abfrage zu "SELECT * FROM liste"
2.) zeig mal deinen ConnectionString her
3.) nimm mal meinen ADO Database Explorer http://www.delphipraxis.net/internal...ct.php?t=19596 und klick auf "Make connection", ConnectionString eingeben, dann Doppelklick auf die Tabelle "liste"
Du kannst auch auf "New Query" klicken und deine eigene Query eingeben (auch mit Parameter)
Andreas
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:30 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz