Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

The expression you entered has a function name that XXX can´t find

Begonnen von Aficio, Juli 22, 2011, 02:29:25

⏪ vorheriges - nächstes ⏩

Aficio

Hi,
Ich kämpfe seit Tagen mit einem ernsthaften Fehler, der viele Jahre der Arbeit zerstören könnte.

Ich entwickle seit nun mehr 8 Jahren an einer DB-Version, die aus 1 FE und 3 BE besteht.
Es läuft alles seit vielen Jahren super und ohne Probleme.

Regelmäßig wird die Version angepasst, d.h. neue Funktionen eingefügt oder verbessert, also klassische Updates programmiert.
Nach Test und Fertigstellung wird eine ACCDE erstellt, die dann auf den verschiedenen Clients unter der Runtime 2010 laufen.

Nach der letzten kleineren Änderung (Neues Feld in Form und eine kleine Funktion dahinter) konnte ich ohne murren die ACCDE erstellen.
Beim Starten der DB auf dem Client erhalte ich sofort die Fehlermeldung >The expression you entered has a function name that XXX can´t find.<.

Nach Klicken auf OK passiert nichts weiter.
Starte ich die DB unter einer ACCESS 2010 Vollversion, dann geht alles seinen normalen weg. Keine Meldungen. Alles läuft.

Ich habe schon diverse unlogische Dinge versucht. U.a. alles zurückgedreht. Später habe ich einfach eine alte Version aus dem März genommen (die ja lief) und diese ohne irgendetwas zu ändern als ACCDE auf dem Client gestartet. Auch diese Version läuft nicht mehr. Das betrifft JEDEN Client PC.

Auch habe ich eine ganz neue DB erstellt und alles importiert. Gleicher Effekt. Keine ACCDE läuft unter der Runtime mehr.

Nun habe ich keine Ideen mehr.. Die einzige Lösung wäre zurzeit: auf jeden PC eine Vollversion und keine ACCDE mehr nutzen!
Momentan läuft auf den Client-PC eine Vorgänger ACCDE ohne Probleme. Ich kann nur leider kein Update mehr einspielen, weil es nicht mehr laufen würde...


Eine Idee?

thx

database

Hallo,

die Fehlermeldung kann mehrere unterschiedliche Gründe haben.
Das geht von einer falsch deklarierten Function über ein zerschossenes VBA-Projekt innerhalb der Datei bis hin zu einem Windows-Update oder einem Betriebssystemupgrade.
Kann natürlich aber auch ein Verweis-Problem sein!
Zitat.... eine kleine Funktion dahinter ..
...war das der Auslösende Moment?
Hast du schon mal auf den Clients die Verweise gesichtet, ob diese mit deinem Entwicklungsrechner ident sind?

Zitat... erhalte ich sofort die Fehlermeldung  ...
oder
ZitatKeine ACCDE läuft unter der Runtime mehr
Würde mich vermuten lassen, dass ev. ein Update der Betriebssysteme der Auslöser gewesen sein KÖNNTE.
Versuche, wenn regelmäßige Updates auf allen Rechnern gemacht werden, einen der Clients auf einen früheren Status (Wiederherstellungspunkt) zurückzusetzen.

Aficio

Hallo Peter,

danke für Deine Hilfe.

Ich habe natürlich schon so einiges Versucht. Auch die Verweise. Allerdings wurde ja nie etwas geändert. Ein Update habe ich auch schon geprüft, aber es gab kein Windowsupdate was in den Zeitraum passen würde. Beim Prüfen eines Computers ist mir aufgefallen, dass die Datei Referenz nicht identisch war - obwohl nichts geändert wurde. Z.B. habe ich auf einem Client PC (Win-XP)ein Verweis für ADO Ext 2.8 auf die Datei msadox.dll. Auf meinem System Läuft Windows 7 und der gleiche Verweis referenziert bei mir auf die Datei msadox28.tlb. Da ich hier nie etwas angepasst habe, sollte das kein Problem darstellen. Wundert mich aber trotzdem etwas.

Es mach aber auch kein Sinn, da es auch andere System betrifft. Selbst über RemoteDesktop auf einem Win2003Server klappt es nicht. Da ich nicht einmal mehr eine alte Backup-Version zum Laufen bringe, kann es daran ja auch nicht liegen. Ich habe dann versucht die bestehende ACCDB auf einem Client Rechner als ACCDE zu speichern. Das klappte auch. Beim Starten auf dem selben System bekam ich die Fehlermeldung nicht mehr. Es tauchten die ersten Prozessfenster der Anwendung auf und dann verschwand der Access Prozess einfach ohne jegliche Meldung. Das kann man beliebig häufig reproduzieren. Danach habe ich die selbe ACCDE auf einen anderen XP PC gestartet und hatte keine Probleme!!!
Ein zweites Mal konnte ich dieses Version aber nicht starten, danach erhielt ich diverse andere Fehlermeldungen aus Formularen, etc. Also alles insgesamt nicht besonders logisch und schlecht nachvollziehbar.

Deinen Ansatz mit dem zerschossenen VBA Projekt würde ich gerne folgen. Hast Du eine Lösung wie ich das prüfen kann?

thx
Mario

database

#3
Hallo,

Zitatauf einem Client PC (Win-XP)ein Verweis für ADO Ext 2.8 auf die Datei msadox.dll.
Um die gleiche Bibliothek (msadox.dll) auf einem W7-Rechner mit Acc2010 anzusprechen muß dort der Verweis auf ADO Ext 6.0 gesetzt werden,
gleiches gilt auch für die ActiveX DataObjects 2.8 - auch hier muss der Verweis auf die Version 6.0 gesetzt werden, da nur die die gleiche dll (msado15.dll) anspricht.
Hast du in der Ursprungsversion deiner Entwicklung DAO eingesetzt? Wenn ja, muss auch in der ACCDB dieser Verweis gesetzt werden,
die neuere Version, die MS Office 14 Access database engine Object Library passt nicht immer mit den 'alten' Sachen zusammen.... :-\  

Siehe bitte daher in dem Zusammenhang auch:
http://www.donkarl.com?FAQ7.1 + die dort angegebenen weiterführenden Links.

ZitatDa ich hier nie etwas angepasst habe, sollte das kein Problem darstellen
Das mag ich dir gerne glauben, die Änderung/Anpassung hat Office 2010 und Windows7 für dich vollzogen.  ;)

Vergleiche daher ALLE Verweise die in einer funktionierenden XP-Variante vorhanden sind peinlich genau mit jenen, die unter W7 / Acc2010 angewendet werden.
M.E. müsste es möglich sein die ACCDB auf einem XP-System so zu debuggen, dass das 'Verschwinden' des Access-Prozesses erklärt werden kann.
Das gelingt natürlich mit einer ACCDE nicht mehr, da du da ja auf VBA nicht mehr zugreifen kannst.
Am Besten natürlich mit einer Office-Vollversion

ZitatDa ich nicht einmal mehr eine alte Backup-Version zum Laufen bringe
...was mich nicht sonderlich wundert, wenn du nämlich auf allen relevanten Rechnern eine höhere Access-Version
wie die ursprüngliche Entwicklungsumgebung des Backups verwendest, erlärt sich dieser Effekt für mich als logisch.

ZitatDeinen Ansatz mit dem zerschossenen VBA Projekt würde ich gerne folgen
Eine neue Datei erstellen und alle Objekte des defekten Teils importieren ist die für mich beste Variante.
Allerdings glaube ich, dass es nur wirklich hilfreich werden kann, wenn die Versionen der Access-Umbebung gleich sind.
Für mein Verständnis liegt der Hund einzig in der VBA-Umgebung begraben und ich bin fast überzeugt davon, dass es dennoch in irgend einer Weise an den Verweisen liegt.
Diese Fehlermeldung...
ZitatThe expression you entered has a function name that XXX can´t find.
... die NACH dem Kompilieren des VBA-Codes auftritt scheint mir MEHR ALS VERDÄCHTIG darauf hinzuweisen, dass eine Funktion in einer abhängigen Bibliothek nicht gefunden werden kann (also die Verweise)

Insgesamt gesehen ... solcherlei Fehler nachzuproduzieren ist natürlich für mich - und ich denke auch für andere Helfer hier im Forum - nicht möglich, aber du könntest noch versuchen die ACCDB auf Version 2003 zurückzuentwickeln - also von 2010 auf 2007 und dann von 2007 auf 2003
Es wäre höchst interessant, was dann auf einem XP-System mit Office 2003 bei allen 'alten' Verweisen passiert.

HTH



Aficio

Danke für die ausführliche Analyse.

Da ich glaube das ich mich falsch ausgedrückt habe, nochmals zur Klarstellung der Installation:

Entwicklungsumgebung ist WIN7 mit Office 2010 Prof
ClientPC sind alles XP Rechner mit Runtime 2010
Zusätzlich läuft die Applikation auch auf einem Win2003 Server System in einer RDT Verbindung.

Mit einer älteren Version meine ich nicht eine Vorgängerversion von Access, sondern z.B. ein ältere Version der Anwendung (3 Monate).
Also eine Version, die durch eine andere Version abgelöst wurde und voll funktionsfähig ist.
Diese Version (als ACCDE) war auch nicht mehr auf dem Clients lauffähig.

Da ich nun von einem Fehler auf MEINEM System ausgegangen bin, habe ich die "Problemversion", nachdem ich eine neue DB erstellt und alles importiert hatte, auf  einem XP Client mit installierter Access2010 VOLLVersion zur ACCDE compiliert. DIESE quasi neue Version hat auf dem selben PC zum Absturz von ACCESS geführt und auf einem anderen PC den ersten Start "überlebt" und nach einem 2. Start an den verschiedensten Stellen unlogische Fehlermeldungen erzeugt. Die ursprüngliche Fehlermeldung taucht hier gar nicht auf. Die ACCDB ist auf allen System ohne eine Fehlermeldung ausführbar.

Das macht die Sache sehr undurchsichtig. Da ich auch für die System zuständig bin, kann ich - außer den automatischen Updates- hier Treiber Geschichten ausschließen.

Also zusammengefasst:

- Ich habe eine neue ACCDB erstellt und alles erneut importiert
- Ich habe mich bisher nie um die Verweise kümmern müssen, da ich hier keine Änderungen vorgenommen habe, aber die Verweise nochmals mit dem Client ergebnislos verglichen
- Die Probleme gibt es nur auf der Runtimeversion
- Die Probleme sind plötzlich nach Änderung kleiner Codezeilen aufgetreten.


Eine Besonderheit ist mir noch aufgefallen, der ich nun versuchen möchte nachzugehen.
Beim Importieren musste beim Import verschiedener Module bestimmt 40x immer eine Fehlermeldung weg klicken, die aber aus einer meiner Funktionen stammt.  D.h. zum Zeitpunkt des Imports, wird ja gar kein Code ausgeführt.
Kann das eventuell mit den verknüpften Tabellen zusammenhängen?

1. Meine nächsten Schritte sind wohl, genau dieses Modul zu entfernen und eine Umwandlung und einen Start zu versuchen.
2. Office Neuinstallation


Sonst sehe ich da leider nicht mehr viele Ansatzpunkte...




database

#5
Hallo,

nein, nein, ich habe dich schon richtig verstanden.

ZitatEntwicklungsumgebung ist WIN7 mit Office 2010 Prof
JETZT ... ich meinte aber den Ursprung - und der kann weder W7 noch Office 2010 gewesen sein. (Zitat: Ich entwickle seit nun mehr 8 Jahren an einer DB-Version ...)

Es sind einige der Bibliotheken, die bei einer Access-Entwicklung zum Tragen kommen Bestandteil des Betriebssystems, auf dem entwickelt wird.
Daher auch mein Hinweis auf ein Betriebssystemupdate / -upgrade. ....
ZitatDa ich auch für die System zuständig bin, kann ich - außer den automatischen Updates ...

ZitatIch habe mich bisher nie um die Verweise kümmern müssen, da ich hier keine Änderungen vorgenommen habe ...
Mag ich so nicht ganz glauben, denn wenn du ADO Ext 2.8 eisetzt, hast du diesen Verweis auf JEDEN Fall einmal gesetzt
und ich gehe davon aus dass dieses noch auf einem XP / Acc2003 System passiert ist.
Mein Hinweis daher auch darauf, dass ADO Ext 2.8 aus einer älteren Entwicklung her NICHT die gleiche Bibliothek verwendet wie ADO Ext. 2.8 auf Access 2010!
Problematisch bei den Verweisen ist die Tatsache, dass in der neueren Office-Version der Verweis den gleichen Namen trägt
wie in der alten, die dahinter stehende Bibliothek (*.dll, *.tlb, ...) aber erneuert wurde.

Warum nun beispielsweise eine ACCDB läuft und eine ACCDE nicht kann ich nicht mit Bestimmtheit sagen,
was aber Fakt ist, ist die Tatsache, dass bei der Umwandlung in eine ACCDE der GESAMTE Code kompiliert und umgewandelt wird.
Wenn ich nicht ganz falsch liege - in einer ACCDB jedoch nur der Code kompiliet wird, der benötigt wird.
Das war m.W. zumindest unter den *mdb / *.mde Versionen so.

ZitatDie Probleme sind plötzlich nach Änderung kleiner Codezeilen aufgetreten.
Naja wenn du noch herausfinden kannst welche das waren, ist es ev. möglich nachzuvollziehen was der Auslöser war.

ZitatBeim Importieren musste beim Import verschiedener Module bestimmt 40x immer eine Fehlermeldung weg klicken, die aber aus einer meiner Funktionen stammt.
Ja welche Fehlermeldung ... ALARM!
ZitatKann das eventuell mit den verknüpften Tabellen zusammenhängen
Ohne Kenntnis der Fehlermeldung ... schwer zu sagen  :-\

Ich fürchte, dass eine Office-Neuinstallaion da nicht recht viel ändern wird, da ich nach wie vor der Meinung bin, dass das Übel in deiner DB zu suchen und auch zu finden ist.

Versuchen kannst du MIT EINER KOPIE deiner Datenbank:
http://www.donkarl.com?FAQ1.23
... und siehe bitte zum Thema Kompilierung folgenden WICHTIGEN Link:
http://www.trigeminal.com/usenet/usenet004.asp?1031

Zitat1. Meine nächsten Schritte sind wohl, genau dieses Modul zu entfernen und eine Umwandlung und einen Start zu versuchen.
Naja dann ... leg mal los ... das ist ja mal ein SEHR guter Ansatz  ;)

Aficio

Thanks again....

Also es läuft jetzt alles wieder !!!

Ich kann noch nicht genau sagen was es war, aber die Verweise waren es nicht.
Mein letzter Versuch war das Autoexec Macro zu umgehen und sämtliche Aktionen in VBA abzubilden.
Dies führte - ich weiß noch nicht warum - zum gewünschten Ergebnis.

Sollte ich es herausfinden, werde ich es hier posten.

Erstmal vielen Dank - it just made my day!

database

Hi,

ich nehme an, dass du mit dem Autoexec-Macro eine Function aufgerufen hast?

Aber gut dass es jetzt trotzdem läuft.

Bin gespannt, ob du die Ursache findest.

Schönen Sonntagabend!

Aficio

Kurzer Moment der Freude...
liegt wohl daran, das dieser Fehler eben schwerwiegend und nicht so total eindeutig wie ein Syntaxfehler meistens ist.

Es ist alles wie es vorher war. Grund? Keine Ahnung. Ich habe erneut eine wirkliche kleine Änderung im Code durchgeführt. Neue ACCDE erstellt und getestet. Gleiche Meldung.
Meine Autoexec, die mittlerweile nur noch aus dem Aufruf einer VBA Function besteht, habe ich gelöscht und als Option das öffnen eines Formulars ausgewählt. Hier sollte dann automatisch die Funktion aufgerufen werden. Zusätzlich habe ich noch einen Button eingefügt, um auch den Code manuell ausführen zu können. Das Ergebnis war dann nicht besser.

Access öffnet das Formular und kommt gleich mit der Fehlermeldung. Das manuelle Auslösen klappt auch nicht. Eine neue Meldung kann reproduziert werden:

"The database cannot be opened because the VBA project contained in it cannot be read. The database can be opened only if the VBA project is first deleted. Deleting the VBA project removes all code from modules, forms and reports. You should back up your database before attempting to open the database and delete the VBA project"

Das Googeln nach diesen Fehler brachte nicht viel positives heraus, da gibt es wohl einige User mit diesem Problem und VBA-Code der nicht mehr geht. Einiges führt wohl auch zum SP1, was kürzlich herauskam. Aber nichts genaues weiß man. Ich habe nun wirklich keinen Ansatz mehr. Inzwischen habe ich es wohl 100 Stunden Analyse und wildes unlogisches probieren gebracht. Die Frustration steigt und leider auch die Unsicherheit. Ich habe die Frage "...wie kann ich verhindern, dass meine DB genau das in der Zukunft macht?" mehrfach im Netz gelesen, aber keine Antwort darauf.

Es wäre wahnsinnig viel Arbeit und sicherlich verlustreich, nun sämtliche Entwicklungsschritte des letzten Jahres erneut zu programmieren. Wo soll man ansetzen. Ab welcher Version ist was beschädigt worden und warum?

Meine letzte produzierte Fehlermeldung war nun auch noch: "The network connection was interrupted, to continue, close the database, and then open it again."
Das kann man natürlich endlos wiederholen. Ich habe nun auch noch alle SP Runtime und Access erneut installiert.

Es bleibt nicht nachvollziehbar und für mich ein SuperGau!

Also für jeden Tipp wäre ich dankbar. thx


DF6GL

Hallo,


wie sieht es denn mit dem Einsatz von 32/64 bit - Versionen (sowohl OS wie auch Office und  Runtime) aus? Gibt es da vielleicht eine Inkonsequenz?


database

Hallo,

irgendwie läuft das Ganze im Kreis herum.
ZitatIch habe erneut eine wirkliche kleine Änderung im Code durchgeführt
Lass mal den Code sehen...

ZitatThe network connection was interrupted, to continue,
Verwendest du ADO in der DB? Und wenn ja welche Version?

Zitat... because the VBA project contained in it cannot be read ...
Was ja auch logisch ist, da es das VBA-Projekt in der DB nach der Umwandlung auf ACCDE praktisch nicht mehr gibt.

Aficio

Hi again.

ich habe erneut einen Erfolg erzielen können. Da die Fehler immer merkwürdiger wurden, wollte ich den Versuch einer Reparatur mit einem externen Tool wagen. Ich habe mir einige Programme angesehen und mich am Ende für >Stellar Phoenix Access Recovery< entschieden. Das war scheinbar erfolgreich. Scheinbar deshalb, weil ich der Sache bisher noch nicht ganz trauen konnte. Es sieht aber alles sehr stabil aus und die DB ist um einiges kleiner geworden.

Keine Ahnung was die dort mit der ACCDB machen, aber es sieht mir aus als würde wirklich alles neu geschrieben werden. Die Verweise und Option etc. müssen noch angepasst werden, aber dann läuft es.
Ich werde berichten, sollte es doch wieder auftreten...

Danke nochmals für die Ideen und Ansätze!

ciao