![]() |
Datenbank: Access • Zugriff über: ADO
Aktualisierung eines DBGRID
Hallo zusammen,
ich habe jetzt wieder ein neues Thema welches mich beschäftig. Ich füge einen neuen Datensatz per Adotable in eine Accessdatenbank ein. Darauf folgt dann eine Aktualisierung des DBGRID. Beim ersten mal einfügen wird das Grid aber nicht aktualsiert. Erst wenn ich einen weiteren Datensatz hinzufüge erscheinen beider neuen Datesätze in dem DBGrid. Was mache ich falsch?
Delphi-Quellcode:
Das oben eingebaute Delay führt zwar zum gewünschten Effekt, ist aber nicht sonderlich schön.
procedure TMain.AddBtnClick(Sender: TObject);
begin Adotable1.Active := false; Adotable1.tablename := 'anpassd'; Adotable1.Active := true; if fitteredit.Text <> '' then begin adotable1.Edit; AdoTable1.Append; adotable1.FieldByName('Anpasser').AsString := fitteredit.Text; adotable1.post; end; //delay(1000); gridrefresh('anpassd','Anpasser'); end; procedure TMain.Gridrefresh(Tabelle,fieldn:string); begin jvdbgrid2.Update; adoquery1.active:=false; adoquery1.sql.Clear; adoquery1.sql.text := 'SELECT * FROM '+ Tabelle; adoquery1.active:=true; adoquery1.ExecSQL; adoquery1.Requery(); jvdbgrid2.Columns[0].FieldName := fieldn; jvdbgrid2.Columns[0].Width := 177; end; Zudem muss ja irgendwo in meinem Code ein Fehler sein. :gruebel: |
Re: Aktualisierung eines DBGRID
Zitat:
Zitat:
Das Gridrefresh sollte ebnfalls unnoetig sein. ^^^^^^^^^^^^^^Darin: ExecSQL ist fuer Update, Insert und Delete statements, die keine Datenmenge zurueckliefern. Ein Open sollte genuegen. Requery ist ueberfluessig, wenn Du open ausfuehrst. |
Re: Aktualisierung eines DBGRID
Zitat:
Delphi-Quellcode:
procedure TMain.Gridrefresh(Tabelle,fieldn:string;clwidth:integer);
begin jvdbgrid2.Update; adoquery1.active:=false; adoquery1.sql.Clear; adoquery1.sql.text := 'SELECT * FROM '+ Tabelle; adoquery1.active:=true; //adoquery1.ExecSQL; adoquery1.Open; //adoquery1.Requery(); jvdbgrid2.Columns[0].FieldName := fieldn; jvdbgrid2.Columns[0].Width := clwidth; end; |
Re: Aktualisierung eines DBGRID
Schmeiss das Gridrefresch raus. So weit ich das sehen kann tut es nichts sinnvolles.
Die Spaltenbreite kann man auch anders einstellen und das Problem liegt vermutlich an ACCESS (kann ich jetzt nicht verifizieren, aber mit einer Datenbank tut es) |
Re: Aktualisierung eines DBGRID
Bei Access über ADO darf nur eine einzige ADO-Conncetion aufgebaut werden!!
Es ist vom Konzept her auch möglich, dass jede ADOTable oder ADOQuery seine eigene Connection aufbaut, das sollte man aber nicht tun. Bei Access sollte man die CursorLocation auf clUseServer einstellen. Lass dich durch die Seitenhiebe auf Access nicht verunsichern, solange du folgende Bedingungen einhältst, ist Access recht brauchbar: 1.) nur single user Betrieb 2.) Datenbank muss auf lokaler Festplatte liegen (auf einer Netzwerkplatte tritt ab ca. 200 MB Datenbankgrösse ein Leistungseinbruch auf) 3.) Datenbank darf nicht >= 2 GB werden 4.) bei sehr komplexen SQL abfragen (mehrere Tabellen mit Unterabfragen) können Probleme auftreten |
Re: Aktualisierung eines DBGRID
Ich habe es jetzt anders gelöst. So funzt es.
Delphi-Quellcode:
Danke für die Hilfe
procedure TMain.Button1Click(Sender: TObject);
begin adoquery1.active:=false; adoquery1.sql.Clear; adoquery1.sql.text := 'insert into anpassd (anpasser) values ('''+fitteredit.Text+''')'; adoquery1.ExecSQL; gridrefresh('anpassd','Anpasser',177); end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:57 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