Access odbc aufruf fehlgeschlagen

Hallo,
seit kurzem mache ich Access -Abfragen über ODBC zu einer Unify Datenbank. Alles funktioniert super. Nun habe ich ein Formular, in dem ich eine Abfrage nach einem bestimmten Datum abfragen möchte. Nach dem ich mein Feld im Formular angelegt habe, danach das Feld im Kriterienfeld der Abfrage eingefügt habe erscheint die Meldung „Odbc Aufruf fehlgeschlagen“. Das verblüffende ist,wenn ich das Datum manuell ins Kriterienfeld tippe „14.09.2009“ funktioniert es. Habe schon versucht das Format in der Abfrage sowie im Formular zu ändern, es funktioniert nicht. Die Original Unify - Tabelle selber kann ich nicht ändern.
Wenn ich die Tabellen importiere (nicht direkt mit Datenbank verbunden) funktioniert die Abfrage/Formular perfekt. Ich denke es liegt an dem Datumsformat ??
Was ihr wissen solltet ist, das ich alles nur benutzergesteuert in Access mache also kein SQL beherrsche.Hat jemand der Experten eine Idee, die ein Anfänger wie ich es bin versteht ??

Hallo,

leider schreibst du nicht, mit welcher Version von Access du arbeitest :frowning:

Das verblüffende ist,wenn ich das Datum manuell ins Kriterienfeld
tippe „14.09.2009“ funktioniert es.

nö, das ist nicht verblüffend :smile:

Tipp: klicke dann einfach mal auf SQL-Ansicht und schau dir an, was Access aus deinem Datum gemacht hat.

Das ist dann das Format, dass deine ODBC-DB versteht.

Grüße aus Rostock
Wolfgang
(Netwolf)

Hallo Wolfgang
werde morgen mal schauen was SQL mit dem Datum macht und dir berichten ob ich weiter komme.
Ich arbeite mit Access 2000
Gruß und bis morgen

Hi,
SQL macht das Format „mm.tt.jjjj“ - so weit ok.
Das Format habe ich in dem Formularfeld im Feld Format als "mm.tt.jjjj hinterlegt, es erscheint aber immer noch die Meldung ODBC Aufruf fehlgeschlagen :frowning:
Wo muß ich das Format „mm.tt.jjjj“ denn überall hinterlegen ?? Evtl. eine doofe Frage - bin aber noch Änfänger.
lg

Hallo,

SQL macht das Format „mm.tt.jjjj“ - so weit ok.

nein , nicht ok…

WIE heißt der SQL-String der (funktionierenden) Abfrage? Den findest Du im Abfrageentwurf unter Ansicht/SQL-Ansicht.

Das Format habe ich in dem Formularfeld im Feld Format als
"mm.tt.jjjj hinterlegt, es erscheint aber immer noch die
Meldung ODBC Aufruf fehlgeschlagen :frowning:

Da bist Du an der falschen Stelle…

Wo muß ich das Format „mm.tt.jjjj“ denn überall hinterlegen ??

In den SQL-String…

Evtl. eine doofe Frage - bin aber noch Änfänger.

Doofe Fragen gibt es nicht… :wink:

Wie das Vergleichsdatum (Datum als Kriterium) aussehen muß, hängt von den Eigenheiten des zugrundeliegenden DB-Systems ab. Unify kenne ich nicht. Gut bedient wirst Du wohl sein, wenn das Datum im SQL-String in amerikanischer Notierung vorliegt, evtl. als String (Text) gekennzeichnet mit Gänsefüßen, bzw. Hochkommata:

‚12/31/2009‘
„12/31/2009“

bzw. das Ganze per Cast-Funktion (DB-System-abhängig) auf SQL-Ebene in einen für SQL verständlichen Datumswert umwandeln:

z. B.:
… ConvertStrToDate(„12/31/2009“)

Letztendlich sollte das Manual des DB-Systems den richtigen Aufschluß darüber geben.

Viele Grüße vom Bodensee
Franz , DF6GL

PS: Feedback erwünscht!

Viele Grüße vom Bodensee
Franz , DF6GL

PS: Feedback erwünscht!

Hallo
war gestern nicht am Rechner, kann somit erst heute antworten.
Schon mal vorab - Danke :smile:)

Also, der SQL in der funktionierenden Abfrage lautet:

… AND ((PUBLIC_aufkopf.fakturdatum)=#12/16/2009#));
Also amerikanisches Format!?

Nun gibt es bestimmt eine Möglichkeit das Access automatisch immer das Datum ins amerikanische Format konvertiert.
Allerdings weiß ich immer noch nicht WO UND WIE ich es Access mitteile.

Ich habe auch schon gegoogelt, mal heißt es im Code mittel VBA eingeben (kann ich nicht) als Modul hinterlegen (noch nie gemacht)und für mich viel Fachchinesisch also im Moment ratlos :frowning:(.
Solltest du mir helfen können so brauche ich tatsächlich eine „benutzerorientierte Lösung“ wo ich Schritt für Schritt erkennen kann was ich wo machen muß. Sollte das für dich zu aufwendig sein -auch ok - wie gesagt schon mal vielen Dank.

Gruß aus Krefeld
Wolfgang

Hallo,

Also, der SQL in der funktionierenden Abfrage lautet:

… AND ((PUBLIC_aufkopf.fakturdatum)=#12/16/2009#));
Also amerikanisches Format!?

Ja, das ist dann ok so.

Nun gibt es bestimmt eine Möglichkeit das Access automatisch
immer das Datum ins amerikanische Format konvertiert.

Du meinst das Datum aus dem Formular-Textfeld?

Schreib einfach (in der SQL-Ansicht):

… AND ((PUBLIC_aufkopf.fakturdatum)= Forms!DeinFormular!Datumfeldname));

oder evtl.:

… AND ((PUBLIC_aufkopf.fakturdatum)= Cdate(Forms!DeinFormular!Datumfeldname)));

oder auch:

… AND ((PUBLIC_aufkopf.fakturdatum)= Format(Forms!DeinFormular!Datumfeldname;"#mm/dd/yyyy#")));

Allerdings weiß ich immer noch nicht WO UND WIE ich es Access
mitteile.

im Abfrageentwurf, siehe oben…

Das muß dem ODBC-Treiber mitgeteilt werden, also innerhalb des SQL-Strings (wie er in der SQL-Ansicht im Abfrageentwurfs aussieht). Access zeigt dann , falls syntaktisch korrekt, auch die Abfrage grafisch in der Normalansicht an.

Ich habe auch schon gegoogelt, mal heißt es im Code mittel VBA
eingeben (kann ich nicht) als Modul hinterlegen (noch nie
gemacht)und für mich viel Fachchinesisch also im Moment ratlos

Eigentlich ist o. g. Verweis auf ein Formulartextfeld in der Abfrage nicht sehr empfehlenswert, da wäre eine VBA-Lösung deutlich besser (, die einfach den SQL-String wie gewöhnlichen Text zusammenbaut und den SQl-String „ausführt“).

Solltest du mir helfen können so brauche ich tatsächlich eine
„benutzerorientierte Lösung“ wo ich Schritt für Schritt
erkennen kann was ich wo machen muß. Sollte das für dich zu
aufwendig sein -auch ok -

über ein Forum ist halt eine Grundlagenvermittlung recht schwierig.

Hi
vielen dank für deine Mühe.
Ich habe deine 3 Vorschläge ausprobiert.
Vorschlag 1 + 2 funktionieren nicht - warum nicht ??
Bei Vorschlag 3 … AND ((PUBLIC_aufkopf.fakturdatum)= Format(Forms!DeinFormular!Datumfeldname;"#mm/dd/yyyy#")));
kommt die Meldung "Syntaks Fehler in Formel klammer fehlt.
Ich bin dann auf folgende Idee gekommen. Ich habe das Datum in der Abfrage als Text umgewandelt:
fakturdatum_NUM: (Jahr([PUBLIC_aufkopf]![fakturdatum])*10000)+(Monat([PUBLIC_aufkopf]
![fakturdatum])*100)+Tag([PUBLIC_aufkopf]![fakturdatum])
und entsprechend die Kriterien auch:
Zwischen (Jahr([Formulare]![Menü]![Tagfak_von])*10000)+(Monat([Formulare]!
[Menü]![Tagfak_von])*100)+Tag([Formulare]![Menü]![Tagfak_von]) Und (Jahr([Formulare]![Menü]![Tagfak_bis])*10000)+(Monat([Formulare]!
[Menü]![Tagfak_bis])*100)+Tag([Formulare]![Menü]![Tagfak_bis])
Danach in der Abfrage das eigentliche fakturadatum eingefügt und dieses wiederum im Bericht eingefügt. Dann funktioniert es. Ist zwar relativ umständlich und eine Fleißarbeit zum tippen - aber es klappt.
Solltest du für deinem Vorschlag 3 eine Idee haben, würde ich das gerne noch mal probieren, da die Lösung wesentlich eleganter wäre.
Liebe Grüße und wenn wir uns nicht mehr schreiben ein schönes Weihnachtsfest und einen guten Rutsch ins neue Jahr

Hallo,

Bei Vorschlag 3 … AND ((PUBLIC_aufkopf.fakturdatum)= Format(Forms!DeinFormular!Datumfeldname;"#mm/dd/yyyy#")));
kommt die Meldung "Syntaks Fehler in Formel klammer fehlt.

wenn Du nur die Hälfte des SQL-Strings postest, kann ich nicht sagen, welche Klammer nun wo fehlt…

dieser Ausdruck

Format(Forms!DeinFormular!Datumfeldname;"#mm/dd/yyyy#")

muß halt richtig in den SQl-String eingebaut sein.

Das Umwandeln des Datums in einen Text ist natürlich nix Gescheites…

Viele Grüße vom Bodensee
Franz , DF6GL

PS: Feedback erwünscht!

Hallo
klar is dat nix gescheites, half mir aber erst mal weiter.
Hier der komplette SQL so wie ich ihn geschrieben habe.

SELECT PUBLIC_aufkopf.auftragsnr, PUBLIC_aufkopf.auftragsart, PUBLIC_aufkopf.rechnungsnr, PUBLIC_aufkopf.fakturdatum, PUBLIC_aufkopf.name, PUBLIC_aufkopf.plz, PUBLIC_aufkopf.ort, PUBLIC_aufkopf.auftragswert, PUBLIC_aufkopf.tour, PUBLIC_aufkopf.lieferdatum, PUBLIC_aufkopf.auftragswertgesamt, PUBLIC_aufkopf.dtvkdges, PUBLIC_aufkopf.dtvmwstges, [dtvkdges]+[dtvmwstges] AS ReBetrag, PUBLIC_aufkopf.anzahlkolli, PUBLIC_aufkopf.packzeit, PUBLIC_aufkopf.mwst1ww, PUBLIC_aufkopf.mwst1faktor, PUBLIC_aufkopf.mwst1dm, PUBLIC_aufkopf.mwst2ww, PUBLIC_aufkopf.mwst2dm, PUBLIC_aufkopf.mwst3ww, PUBLIC_aufkopf.mwst3dm, PUBLIC_aufkopf.mwst4ww, PUBLIC_aufkopf.mwst4dm, [mwst1ww]+[mwst1dm]+[mwst2ww]+[mwst2dm]+[mwst3ww]+[mwst3dm]+[mwst4ww]+[mwst4dm] AS Rebetragecht, PUBLIC_aufkopf.tour, PUBLIC_aufkopf.debitor, PUBLIC_touren.bezeichnung
FROM PUBLIC_aufkopf INNER JOIN PUBLIC_touren ON (PUBLIC_aufkopf.firma = PUBLIC_touren.firma) AND (PUBLIC_aufkopf.tour = PUBLIC_touren.tour)
WHERE (((PUBLIC_aufkopf.auftragsart)3) AND ((PUBLIC_aufkopf.fakturdatum)=Format(Forms!Menü!Fakdatum;"#mm/dd/yyyy#")));
Danach kommt Fehlermeldung
Syntaxfehler in Abfrageausdruck ‚((((PUBLIC_aufkopf.auftragsart)3) AND ((PUBLIC_aufkopf.fakturdatum)=Format(Forms!Menü!Fakdatum;"#mm/dd/yyyy#")))‘.

Ich fände es auch viel intelligenter wenn es so klappen würde wie du es beschreibst.
Gruß
Wolfgang

Hallo,

…Format(Forms!Menü!Fakdatum , „#mm/dd/yyyy#“)));
-------------------------------------------^

Hi
Super vielen Dank
Klappt nun :smile:
Danke und frohes Weihnachtsfest und guten Rutsch