Access-o-Mania

Access-Forum (Deutsch/German) => Tabelle/Abfrage => Thema gestartet von: datekk am Juli 18, 2014, 10:26:20

Titel: Problem mit Abfrage ODBC verknüpfte Tabelle mit TempVar
Beitrag von: datekk am Juli 18, 2014, 10:26:20
Hallo,

ich habe ein Formular, welches Datensätze aus OutlookBCM darstellt über eine verlinkte ODBC / SQL Tabelle. Die Datensätze in dieser Tabelle haben ein Schlüsselfeld Names "EntryGUID" und der Schlüssel sieht wie folgt aus Beispiel: {45167165-D76F-435D-A237-0008CF9151CC}.

Mit Klick z.B. auf den Namen eines Kontakts soll die GUID in eine TempVar gespeichert werden. Diese TempVar soll dann in einer Abfrage als Kriterium genutzt werden. Leider funktioniert dies nicht. Die Abfrage liefert immer gar keine Ergebnisse. Wenn ich allerdings die TempVar in einem Textfeld abrufe, wird die GUID richtig angezeigt - die TempVar ist also richtig belegt.

Warum lässt sich dann die Abfrage nicht danach auflösen?

Wenn ich die GUID als Text in der Abfrage erfasse, wird diese auch richtig ausgeführt und der Datensatz mit der passenden GUID angezeigt... ALLERDINGS ändert sich der Eintrag im Kriterienfeld dann auf {guid {45167165-D76F-435D-A237-0008CF9151CC}}.

Es ist seltsam... Müssen ODBC Abfragen anders aufgebaut werden in Verbindung mit TempVar?

In das Feld Kriterium habe ich ganz normal [TempVar]![GUID] eingefügt.

Kann jemand helfen?
Titel: Re: Problem mit Abfrage ODBC verknüpfte Tabelle mit TempVar
Beitrag von: DF6GL am Juli 18, 2014, 11:18:34
Hallo,

Tempvar ist eine Variable(n-Deklaration) auf VBA-Seite, eine Where-Condition ein Filterkriterium auf SQL-Ebene. Beide kennen voneinander nicht. Um den Inhalt aus einer Tempvar-Auflistung in eine SQL-Kriterium zu bringen, muss der Variablen-Inhalt mit einer VBA-Public-Funktion "geholt" und die Funktion in der SQL-Where-Condition aufgerufen werden.

Titel: Re: Problem mit Abfrage ODBC verknüpfte Tabelle mit TempVar
Beitrag von: datekk am Juli 18, 2014, 13:21:37
Puhhh... Ja genau :) Ich verstehe nur Bahnhof. Bist Du so nett und zeigst mal an einem Beispiel wie man sowas umsetzt?
Titel: Re: Problem mit Abfrage ODBC verknüpfte Tabelle mit TempVar
Beitrag von: DF6GL am Juli 18, 2014, 14:56:31
Hallo,


in einem Standardmodul:

Public Function getMyTempVar(strVarName)
getMyTempVar = TempVars(strVarName)
End Function



In der Abfrage im Kriterienfeld:

Kriterium:    =getMyTempVar("MeineVartempVariable")
Titel: Re: Problem mit Abfrage ODBC verknüpfte Tabelle mit TempVar
Beitrag von: datekk am Juli 21, 2014, 16:19:35
Hallo Franz,

leider funktioniert dies nicht. Meine Abfrage liefert immer noch Null Ergebnisse. Ich habe getMyTempVar("GUID") im Kriterienfeld eingegeben. Der TempVar wird in einem Makro der Name GUID mit dem Wert der Spalte EntryGUID zugewiesen. Die Funktion GetMyTempVar wird auch erkannt.

Was könnte der Fehler sein?
Titel: Re: Problem mit Abfrage ODBC verknüpfte Tabelle mit TempVar
Beitrag von: DF6GL am Juli 21, 2014, 16:28:06


Hallo,

das geht schon, vermutlich machst Du noch was falsch..

WAS funktioniert denn nicht?



Weise besser der Tempvars-Variablen (oder einer anderen Public-Variablen) doch per VBA den bestimmten Wert zu...

Und warum über den Umweg mit Tempvar?

Vermutlich kannst Du gleich der Funktion das Ausgangs-Feld oder -Variable als Parameter übergeben ...
Titel: Re: Problem mit Abfrage ODBC verknüpfte Tabelle mit TempVar
Beitrag von: datekk am Juli 21, 2014, 16:44:31
Da meine VBA Kenntnisse ganz am Anfang stehen nutze ich den Makro Generator.

Was möchte ich:

Aus einer Abfrage stelle ich eine Datentabelle über ein Endlosformular zusammen, vereinfacht mit den Feldern Name, Vorname, EntryGUID. Bei klick auf einen Namen erfolgt per Ereignis "bei Klick" der Aufruf eines Makros in dem der TempVar "GUID" der Wert des Eintrags aus dem Feld "EntryGUID" des angeklickten Datensatzes übergeben wird. Im nächsten Schritt soll eine Anfügeabfrage den geklickten Datensatz an eine andere Tabelle anfügen. Hierzu soll die Abfrage den Datensatz suchen, dessen EntryGUID dem Wert der TempVar entspricht. Die Felder Name und Vorname sollen dann an eine andere Tabelle angefügt werden.

Leider gibt die Anfügeabfrage aber immer Null Datensätze aus.

Meine Kenntnisse sind in VBA noch nicht so top, dass ich das alles mit VBA gestalten kann - daher nutze ich den Makro-Generator.



Titel: Re: Problem mit Abfrage ODBC verknüpfte Tabelle mit TempVar
Beitrag von: DF6GL am Juli 21, 2014, 19:07:11
Hallo,

was ist der eigentliche Hintergrund dieses Unterfangens? (Das hört sich so an, als wolltest Du den angeklickten Datensatz lediglich in eine andere Tabelle kopieren).

Vermutlich liegt Dein DB-Konzept im Argen..
(btw: "Name" als Name für ein Tabellenfeld zu missbrauchen, bringt Kummer und Schmerzen)

als Ereignisprozedur "Beim Klicken" des Formular-Textfeldes ("Name") , das den "Namen" anzeigt:


Sub Name_Click()

Currentdb.Execute "Insert into tblAndereTabelle ([Name],Vorname,EntryGUID) Select [Name],Vorname,EntryGUID from Tabelle1 Where EntryGUID = '" & Me![color=blue]EntryGUID[/color] & "'"
End Sub



EntryGUID  --> Name des Formular-Textfeldes, das diesen Wert anzeigt
Titel: Re: Problem mit Abfrage ODBC verknüpfte Tabelle mit TempVar
Beitrag von: datekk am Juli 22, 2014, 11:46:13
Hallo Franz,

das genaue Unterfangen ist, dass ich aus meiner Outlook BCM Datenbank (SQL) Datensätze in meine Access Auftragsverwaltung übernehmen möchte, um die Kunden nicht händisch neu eingeben zu müssen.

Nutze ich Deinen o.g. Code angepasst auf meine Situation erhalte ich die Fehlermeldung: "Laufzeitfehler 3146: ODBC-Aufruf fehlgeschlagen". Hier mein Code:

Private Sub FLCompanyName_Click()

CurrentDb.Execute "Insert into Kundenliste (Anrede,Vorname,Nachname) Select Prefix,FirstName,Lastname from dbo_PublicContactsView Where EntryGUID = '" & Me!GUID & "'"

End Sub

Titel: Re: Problem mit Abfrage ODBC verknüpfte Tabelle mit TempVar
Beitrag von: DF6GL am Juli 22, 2014, 13:17:04
Hallo,

ist "Me!GUID"   (---> "GUID")  der Name des Formular-Textfeldes, das den "entryGUID"-Wert anzeigt?
Titel: Re: Problem mit Abfrage ODBC verknüpfte Tabelle mit TempVar
Beitrag von: datekk am Juli 22, 2014, 13:35:21
Ja genau. Es handelt sich aber um ein Endlosformular.
Titel: Re: Problem mit Abfrage ODBC verknüpfte Tabelle mit TempVar
Beitrag von: DF6GL am Juli 22, 2014, 13:40:05
Hallo,

tja, dann kann ich nur vermuten, dass der ODBC-Treiber mit dem GUID_Wert nichts richtig anfangen kann.

Was passiert, wenn der GUID-Wert als String in die SQL eingebaut wird?
Titel: Re: Problem mit Abfrage ODBC verknüpfte Tabelle mit TempVar
Beitrag von: datekk am Juli 22, 2014, 13:55:04
Bitte zeige mir kurz wie es geht. Mein Versuch endete diesmal mit einem Syntaxfehler.

CurrentDb.Execute "Insert into Kundenliste (Anrede,Vorname,Nachname) Select Prefix,FirstName,LastName from dbo_PublicContactsView Where EntryGUID = {45167165-D76F-435D-A237-0008CF9151CC}'"
Titel: Re: Problem mit Abfrage ODBC verknüpfte Tabelle mit TempVar
Beitrag von: DF6GL am Juli 22, 2014, 16:53:38
hallo,

CurrentDb.Execute "Insert into Kundenliste (Anrede,Vorname,Nachname) Select Prefix,FirstName,LastName from dbo_PublicContactsView Where EntryGUID = '{45167165-D76F-435D-A237-0008CF9151CC}'"
Titel: Re: Problem mit Abfrage ODBC verknüpfte Tabelle mit TempVar
Beitrag von: datekk am Juli 23, 2014, 16:23:54
Das Funktioniert. Der entsprechende Datensatz wird nun an die Kundenliste angefügt....
Titel: Re: Problem mit Abfrage ODBC verknüpfte Tabelle mit TempVar
Beitrag von: DF6GL am Juli 23, 2014, 16:30:51
Dann zeige die Guid mal an mit:

Msgbox Me!GUID
Titel: Re: Problem mit Abfrage ODBC verknüpfte Tabelle mit TempVar
Beitrag von: datekk am Juli 23, 2014, 16:38:38
Die MsgBox gibt 8 Fragezeichen aus.. Also ????????

Titel: Re: Problem mit Abfrage ODBC verknüpfte Tabelle mit TempVar
Beitrag von: datekk am Juli 23, 2014, 16:58:22
Das Problem sind die geschweiften Klammern im Index. Siehe: http://support.microsoft.com/kb/826763/de

Habe nämlich mal ein anderes Feld via MsgBox ausgelesen und hier gibt es keine Probleme...

Kann man das Problem mit den Klammern irgenwie umgehen? Ich könnte doch sicher in der Abfrage die Klammern rausfiltern und dann später in der Befehlszeile so oder ähnlich einsetzen: ...."{" & me.guid2 & "}".. Was meinst Du? Wenn ja, wie filter ich die Dinger raus?
Titel: Re: Problem mit Abfrage ODBC verknüpfte Tabelle mit TempVar
Beitrag von: DF6GL am Juli 23, 2014, 17:45:48
Hallo,
je nachdem, wie die GUID nun in der Tabelle behandelt (formatiert) ist, muss eine "richtige" Guid in einen String umgewandelt werden.

Versuch mal:

CurrentDb.Execute "Insert into Kundenliste (Anrede,Vorname,Nachname) Select Prefix,FirstName,LastName from dbo_PublicContactsView Where EntryGUID = '" & StringFromGUID (Me!Guid) & "'"


Titel: Re: Problem mit Abfrage ODBC verknüpfte Tabelle mit TempVar
Beitrag von: datekk am Juli 23, 2014, 17:57:56
Wir scheinen uns anzunähern.. Aber leider erhalte ich die Fehlermeldung "Laufzeitfehler 3146: ODBC Aufruf fehlgeschlagen".

Den Teil "StringFromGUID(Me!GUID)" habe ich diesmal auch für die MsgBox genutzt und hier spuckt das Teil jetzt aus: "{guid {1234-1234-1234-1234}}" wobei die 1234 nur beispielhaft von mir aufgeführt worden ist.
Titel: Re: Problem mit Abfrage ODBC verknüpfte Tabelle mit TempVar
Beitrag von: DF6GL am Juli 23, 2014, 19:21:27
Hallo,

versuch, auch EntryGuid mit StringFroGUID zu konvertieren. Wenn dabei StringfromGuid nicht als Funktion erkannt wird, dann wäre noch eine Möglichkeit, die Konvertierung in einer Public-Funktion durchzuführen und diese Funktion im SQL-String einzusetzen.

Ob man dadurch den ODBC-Treiber überlisten kann, kann ich jetzt und hier nicht nachprüfen.
Titel: Re: Problem mit Abfrage ODBC verknüpfte Tabelle mit TempVar
Beitrag von: datekk am Juli 24, 2014, 16:50:45
Also wenn ich den Steuerelementinhalt setzte auf =StringFromGuid([EntryGUID]) dann bekomme ich irgenwelche chinesischen Zeichen in dem Feld angezeigt: ꇝ鵛䃌ﺈ敻渨, mit denen das Anhängen des Datensatzes auch nicht funktioniert...

Sonst noch Ideen? Es kann doch nicht sein, das einem das so schwer gemacht wird....

Titel: Re: Problem mit Abfrage ODBC verknüpfte Tabelle mit TempVar
Beitrag von: DF6GL am Juli 24, 2014, 17:03:39
Hallo,

lad mal eine kleine Beispiel-db hoch (mit nicht  ODBC-verknüpften Tabellen)
Titel: Re: Problem mit Abfrage ODBC verknüpfte Tabelle mit TempVar
Beitrag von: datekk am Juli 25, 2014, 09:03:12
Mir ist jetzt nicht ganz klar, was für eine Beispieldatei ich hochladen soll... Ohne die ODBC Tabellen ist doch das Problem gar nicht vorhanden. Bitte werde etwas konkreter was Du von mir haben möchtest.

LG
Titel: Re: Problem mit Abfrage ODBC verknüpfte Tabelle mit TempVar
Beitrag von: datekk am Juli 28, 2014, 12:07:44
Hallo Franz,

kannst Du mir nochmal genauer Antworten was Du haben möchtest...?
Titel: Re: Problem mit Abfrage ODBC verknüpfte Tabelle mit TempVar
Beitrag von: DF6GL am Juli 28, 2014, 14:43:33
Hallo,

ich hätte gern eine DB , in der die Tabellen (mit den GUID-Feldern)  direkt vorhanden sind, also keine ODBC-verlinken Tabellen enthält. 

Du solltest doch die ODBC-verlinkten Tabellen in die DB importieren können... ?
Titel: Re: Problem mit Abfrage ODBC verknüpfte Tabelle mit TempVar
Beitrag von: datekk am Juli 28, 2014, 15:08:31
Also nochmal zum Verständnis:

ich soll Dir eine Datenbank erstellen, welche die ODBC Tabellen enthält, allerdings als Import-Variante ohne Datensätze (bzw. mit Datenmustern)?

Was ist mit Abfragen / Formularen etc?
Titel: Re: Problem mit Abfrage ODBC verknüpfte Tabelle mit TempVar
Beitrag von: DF6GL am Juli 28, 2014, 15:58:04
Hallo,

naja, "authentische" Spieldaten sollten die Tabellen (es brauchen nur solche zu sein, die sich um das Problem ziehen) schon enthalten, will das Ganze ja "offline" (ohne die externen ODBC- Tabellen) testen... Ein Formular, das das besagte "GUID"-Feld enthält, wäre auch nicht schlecht...
Titel: Re: Problem mit Abfrage ODBC verknüpfte Tabelle mit TempVar
Beitrag von: datekk am Januar 29, 2015, 22:27:06
 ;D ;D ;D

Die Lösung ist gefunden. Ich musste die EntryGuid via StringFromGUID an eine Variable übergeben. Da die Funktion "StringFromGUID" aber selbstständig vor den String noch "Guid {" und hinten dran dann nochmal eine "}" setzte sah der Wert dann so aus: "Guid { {xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx}}"

Damit konnten dann auch keine weiteren Dinge damit angestellt werden. Zum Glück (gut, vieleicht ist es auch immer so) haben die BCM EntryGUID´s alle die gleiche Länge. Somit konnte ich die Variable bearbeiten und diese dann in das richtige brauchbare Format bringen welches dann wäre: "{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}"


Private Sub EntryGUID_Click()

Dim v_GUID As String

v_GUID = StringFromGUID(Me.EntryGUID)

v_GUID = Right(v_GUID, 38)
v_GUID = Replace(v_GUID, "}", "")
v_GUID = "{" & v_GUID & "}"

End Sub



Jetzt kann ich mit v_GUID super arbeiten. Z.B. klappt jetzt diese Anfügeabfrage:


CurrentDb.Execute "Insert into tbl_Test (tblTest_GUIDID,tblTest_Name) Select EntryGUID,LastName from dbo_PublicContactsView Where EntryGUID=" & v_GUID


Also.... gelöst.... :)