none
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
    Mittwoch, 11. Juli 2012 07:42

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

    Donnerstag, 12. Juli 2012 05:12
  • 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

    Donnerstag, 12. Juli 2012 05:16

Alle Antworten