Access Datenübernahme nach Update

16/04/2008 - 12:26 von Sascha | Report spam
Hallo zusammen.
In diesem VB6 - Projekt ist es erforderlich auf eine Access-Tabelle (ADO)
zuzugreifen, per Code Inhalte zu übertragen und mit Update abzuschliessen.
Das klappt auch prima. Die Connection wird anschliessend zerstört und gleich
wieder neu aufgebaut, um die verànderte Tabelle als Datenbasis für eine
weitere Abfrage (ADO) zu verwenden. Blöderweise werden die neuen Inhalte
nicht mit in diese Abfrage übertragen. In der 'alten' sind sie aber deutlich
zu sehen.
Wie schaffe ich es nun die neue Abfrage so aufzubauen, dass auch diese
Inhalte mit übernommen werden? Mit REQUERY hatte ich leider keinen Erfolg.

Danke für jede Antwort.
Sascha
 

Lesen sie die antworten

#1 Peter Götz
16/04/2008 - 13:00 | Warnen spam
Hallo Sascha,

In diesem VB6 - Projekt ist es erforderlich auf eine
Access-Tabelle (ADO) zuzugreifen, per Code Inhalte
zu übertragen und mit Update abzuschliessen.
Das klappt auch prima.
Die Connection wird anschliessend zerstört und gleich
wieder neu aufgebaut,



Keine gute Idee und nebenbei reine Ressourcen-
verschwendung.
Da Du "Access-Tabelle" erwàhnst, gehe ich davon aus,
dass der Zugriff via Jet-Engine erfolgt.
Das Öffnen eine Connection zur *.mdb erfordert im
geteilten (nicht exklusiv) Modus, dass eine neue
*.ldb angelegt oder in eine bereits vorhandene ein
Rechner-/Benutzereintrag gemacht werden muss.
Beim Schliessen der Connection muss dieser
Eintrag wieder gelöscht bzw. beim letzten Benutzer
die gesamte *.ldb gelöscht werden.
Öffnen u. Schliessen der Connection bedeutet also
(vermeidbare) Netzlast und Arbeit für den Server
auf dem die *.mdb liegt.

Öffne Deine Connection beim Programmstart und
schliesse sie beim Programmende. Alle erforderlichen
DB-Zugriffe machst Du wàhrend der gesamten
Programmlaufzeit dann über diese eine Connection.


um die verànderte Tabelle als Datenbasis für eine
weitere Abfrage (ADO) zu verwenden. Blöderweise
werden die neuen Inhalte nicht mit in diese Abfrage
übertragen. In der 'alten' sind sie aber deutlich
zu sehen.



Das liegt am sog. "Caching" der Jet-Engine. Neue oder
geànderte Daten werden nicht sofort in die phys. *.mdb
geschrieben, sondern erst mal in einen Datenpuffer.
Erst wenn Windows u. die Jet-Engine nichts besseres zu
tun haben, werden die Daten vom Puffer in die *.mdb
geschrieben. Dabei kann es zu Verzögerungen von
mehreren Sekunden kommen.

Wie schaffe ich es nun die neue Abfrage so aufzubauen,
dass auch diese Inhalte mit übernommen werden?



s.oben:
Öffne beim Programmstart ein einziges Connectionobjekt
und lasse es bis zum Programmende geöffnet.
Alle DB-Zugriffe (lesen, schreiben, löschen) machts Du
wàhrend der ges. Programmlaufzeit über dieses eine
Connectionobjekt, was dann auch zur Folge hat, dass
alle diese Zugriffe den Datenpuffer dieser einzigen
Connection nutzen und somit jeweils aktuelle Daten
haben.

Du kannst die Jet-Engine zwingen, neue bzw. geànderte
Daten vom Datenpuffer sofort in die *.mdb zu schreiben.
Dazu brauchst Du neben dem Verweis auf

Microsoft.ActiveX.DataObjects 2.x Library

noch einen weiteren Verweis auf

Microsoft Jet and Replication Objects 2.x Libary

der einen direkten Zugriff auf die JetEngine erlaubt.
Mit

Dim JetEng As JRO.JetEngine
JetEng.RefreshCache Cnn

stösst Du dann das sofortige Wegschreiben der
Daten aus dem Puffer in die *.mdb an. Die prakt. Anwendung
dieser Methode siehst Du im Beispiel unter

www.gssg.de -> Visual Basic -> VBclassic
-> Datenbank -> ADO Demo MU2002


Gruß aus St.Georgen
Peter Götz
www.gssg.de (mit VB-Tipps u. Beispielprogrammen)

Ähnliche fragen