Verweise, Fehlersuche mit LateBinding

17/09/2008 - 15:06 von Thomas Raasch | Report spam
Hallo NG,

ich baue kleine Anwendungen in AccessXP. Diese gehen als MDE raus an die
Kunden... manchmal gibts auch ne RT dazu :)


ich habe nun das (wohlbekannte) Problem, dass an manchen Kunden-PCs komische
Sachen passieren (Felder mit "#Name", Fehlermeldungen, ...).
Es stellt sich idR. heraus, dass fehlerhafte Verweise schuld sind.

Da sich diese Probleme nun hàufen bin ich derzeit am Erstellen eines
ordentlichen Setups mit InnoSetup. Weiterhin wollte ich meinen Anwendungen
aber einen Start-Test vorschalten, der auf defekte Verweise prüft UND auch
ausgibt welcher Verweis defekt ist.
Entsprechend habe ich (wie von google empfohlen) ein AutoExec-Makro
erstellt, dass als erstes mal die Verweise per Code durchgehen soll.

erstes Problem:
Im Code eine Schleife über die Verweise zu durchlaufen und dann
"References(i).IsBroken" abtesten geht nicht. Dabei kommt es beim Kunden nur
zu einem Laufzeitfehler ohne zu sehen welcher Verweis schuld ist.
...Gelesen und Gesucht...
und die Lösung dessen heißt LateBinding! Habe also meine Funktion umgebaut
von "References(i).IsBroken" auf "CreateObject "Excel.Application"'. Durch
diesen indirekten Aufruf kann ich mit "On Error" die ganze Sache abfangen
und gut.

neues Problem:
Nun ist mein Problem, dass ich nicht weiß wie ich die ganzen Objekte
erstellen/benennen soll! Also welcher String (welcher Name) beschreibt mein
zu testenden Verweis?

bei Excel mache ich
CreateObject "Excel.Application"
klaro, kann man überall finden
bei Word
CreateObject "Word.Application"
ebenso einfach
bei Access
CreateObject "Access.Application"
ebenso einfach
bei DAO
CreateObject "DAO.DBEngine.36"
hab ich durch Zufall gefunden
bei ADO
CreateObject "ADODB.Connection"
durch raten und ausprobieren gefunden

soweit OK...
fehlen tun mir

CreateObject "VBA.___"
Verweis: Visual Basic for Applications (VBA6)
evtl. nicht nötig weil wenn das nicht geht, geht sowieso gar nix!?
CreateObject "MSComctlLib.___"
Verweis: MS Windows Common Controls 6.0
CreateObject "Office.___"
Verweis: MS Office 10.0 Object Library

und wenn dann mal irgendwann ein neuer Verweis dazu kommt stehe ich wieder
da und hab keine Ahnung welches "Object" ich "Createn" muss. Ich weiß auch
nicht genau wo ich suchen soll/kann.

Hilfe!

Grüße
Thomas
 

Lesen sie die antworten

#1 Henry Habermacher
17/09/2008 - 16:01 | Warnen spam
Hallo Thomas

"Thomas Raasch" wrote:

bei Excel mache ich
CreateObject "Excel.Application"
klaro, kann man überall finden
bei Word
CreateObject "Word.Application"
ebenso einfach

bei Access
CreateObject "Access.Application"
ebenso einfach



Lass das sein. Access wird nicht laufen, wenn der Verweis auf Access nicht
tut! Diesen Verweis kannst Du nicht auf Late Binding àndern. Der làsst sich
gar nicht löschen.

bei DAO
CreateObject "DAO.DBEngine.36"
hab ich durch Zufall gefunden
bei ADO
CreateObject "ADODB.Connection"
durch raten und ausprobieren gefunden



DAO und ADO solltest Du ebenfalls nicht auf late Binding umstellen. Die
Verweise werden von den Access Formularen und Berichten benötigt.


CreateObject "VBA.___"
Verweis: Visual Basic for Applications (VBA6)
evtl. nicht nötig weil wenn das nicht geht, geht sowieso gar nix!?



Ohne den geht gar nichts. Der darf also auch nicht "broken" werden. Das ist
ebenfalls einer, den Du nicht löschen kannst.

CreateObject "MSComctlLib.___"
Verweis: MS Windows Common Controls 6.0



Hier solltest du nicht diese Library brauchen. Verwende statt dessen die
Ersatz Funktionen, die z.B. auf API Calls basieren. Diese kommen ohne
Verweise aus. Beispiele findest Du im www.dbdev.org im Downlaod Bereich
(ComDlg32 Ersatz) und z.B. in diversen FileDialog Ersatz funktionen und
Klassenmodulen.

CreateObject "Office.___"
Verweis: MS Office 10.0 Object Library



wozu brauchst Du diesen? Lösche diesen mal weg und schaue, ob's dann
wirklich nicht mehr kompilierbar ist. dieser wird IIRC teilweise
überflüssigerweise hinzugefügt, wenn man den Office File Dialog in neueren
Access Versionen verwenden will. ist aber idR. überflüssig. Falls Du diesen
für die Command Bars brauchst, google mal danach. Auch das geht mit Late
Binding. Evt. ist da sogar ein eintrag in der FAQ oder zumindest ein Link auf
Anettes Website drin, wo das beschrieben ist.

Gruss und viel Erfolg beim loswerden der überflüssigen, fehleranfàlligen
Verweise. Wie bereits gesagt, folgende solltest du drin lassen:
- Access
- VBA
- DAO
- ADO
Wobei die Reihenfolge bei den letzen beiden von Deinem Code abhàngig ist.
Brauchst Du übrigens wirklich ADO? Falls ja, sollte das alles auch durch DAO
erledigt werden können, womit der ADO Verweis überflüssig wird.

Gruss
Henry

Microsoft MVP Office Access
Keine E-Mails auf Postings in NGs. Danke.
Access FAQ www.donkarl.com

Ähnliche fragen