Benutzer mit den meisten Antworten
MS Access Query Error 3085

Frage
-
Ich versuche folgende Query auszuführen
SELECT * FROM GESAMT WHERE (IIF(TITEL_S LIKE '*Test*', RegExp(TITEL_S,"\bTest\b"),null) is not null);
RegExp ist eine globale Funktion im Modul "Main".
Die Funktion funktioniert wunderbar in MS Access selbst. Wenn ich jetzt aber extern darauf zugreifen will, zum Beispiel mit MFC C++, dann bekomme ich folgenden Fehler:
Undefinierte Funktion 'RegExp' in Ausdruck. (3085)
Hat jemand eine Idee wie ich extern auf diese Funktion drauf zugreifen kann?
- Bearbeitet Basix_Dev Mittwoch, 11. Juli 2012 07:44
Antworten
-
Hallo Basix_Dev
Das geht so nicht. Du kannst über Jet (DAO/ADO/ACE) nicht Funktionen verwenden, die auf VBA basieren und in Access gespeichert sind. Von extern kannst Du nur auf die in Jet implementiert sind. Wenn Du also eine Abfrage in Access schreibst, die auf einer Benutzer definierten Funktion basiert, wird diese von "extern" nicht ausführbar sein.
Du wirst wohl die Query dahingehend umbauen müssen, dass die WHERE Bedingung auf den Jet Operatoren und in Jet implementierten Funktionen basiert.
Gruss
Henry
- Als Antwort markiert Robert BreitenhoferModerator Dienstag, 17. Juli 2012 07:06
-
Hallo Masterhelp
Egal wie die Funktion deklariert ist: Um die Funktion auszuführen müsste VBA laufen, da die Funktion in VBA implementiert ist.
VBA läuft aber in Access und nicht in Jet und von extern wird auf die Datenbank über JET zugegriffen, also nix mit VBA und UDFs.
Wenn diese Query in Access ausgeführt wird, wird DAO einen Callback zu Access/VBA machen, wenn es eine Funktion nicht findet und diese Funktion dort ausführen lassen und das Ergebnis benutzen. Wenn aber eben die Query in C++ läuft und über die DAO (ADO oder ACE) Library ausgeführt wird, geht das nicht und es gibt eben die Fehlermeldung.
Gruss
Henry
- Als Antwort markiert Robert BreitenhoferModerator Dienstag, 17. Juli 2012 07:06
Alle Antworten
-
Hallo Basix_Dev
Das geht so nicht. Du kannst über Jet (DAO/ADO/ACE) nicht Funktionen verwenden, die auf VBA basieren und in Access gespeichert sind. Von extern kannst Du nur auf die in Jet implementiert sind. Wenn Du also eine Abfrage in Access schreibst, die auf einer Benutzer definierten Funktion basiert, wird diese von "extern" nicht ausführbar sein.
Du wirst wohl die Query dahingehend umbauen müssen, dass die WHERE Bedingung auf den Jet Operatoren und in Jet implementierten Funktionen basiert.
Gruss
Henry
- Als Antwort markiert Robert BreitenhoferModerator Dienstag, 17. Juli 2012 07:06
-
Hallo Masterhelp
Egal wie die Funktion deklariert ist: Um die Funktion auszuführen müsste VBA laufen, da die Funktion in VBA implementiert ist.
VBA läuft aber in Access und nicht in Jet und von extern wird auf die Datenbank über JET zugegriffen, also nix mit VBA und UDFs.
Wenn diese Query in Access ausgeführt wird, wird DAO einen Callback zu Access/VBA machen, wenn es eine Funktion nicht findet und diese Funktion dort ausführen lassen und das Ergebnis benutzen. Wenn aber eben die Query in C++ läuft und über die DAO (ADO oder ACE) Library ausgeführt wird, geht das nicht und es gibt eben die Fehlermeldung.
Gruss
Henry
- Als Antwort markiert Robert BreitenhoferModerator Dienstag, 17. Juli 2012 07:06
-
Hallo Basix_Dev,
Ich gehe davon aus, dass die Antworten Dir weitergeholfen haben.
Solltest Du noch "Rückfragen" dazu haben, so gib uns bitte Bescheid.Grüße,
RobertRobert Breitenhofer, MICROSOFT
Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „Entwickler helfen Entwickler“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.