Laufzeitfehler wenn Word Daten aus Access holt

Hallo Leute.

Word soll sich Daten aus Access holen und diese dann in die entsprechenden Textmarken im Formular wiedergeben.

Beim Ausführen kommt jedoch folgende Meldung:
Laufzeitfehler‘-2147217900 (80040e14)‘:
Unzulässige SQL-Anweisung; DELETE, INSERT,PROZEDURE, oder
UPDATE erwartet.

Hat jemand von euch Erfahrung mit dieser Fehlermeldung bzw. kann mir sagen, wie man die Ursache dafür beheben kann.

Beim Rumprobieren ist mir aufgefallen, dass diese Fehlermeldung immer dann nicht auftaucht, wenn die Abfrage aus welcher die Daten entnommen werden sollen, nicht aus mehreren Tabellen die untereinander in Beziehung stehen, besteht.

Ich habe schon bei Microsoft etwas dazu gefunden, aber diese maschinelle Übersetzung aus dem Englischen ist ein reiner Witz…

Für euere Hilfe im Voraus ein großer Dank!!
Kris

Hallo,

Word soll sich Daten aus Access holen und diese dann in die
entsprechenden Textmarken im Formular wiedergeben.

und WIE macht Word das, bzw. wie heißt der Code, den Du benutzt?

Beim Ausführen kommt jedoch folgende Meldung:
Laufzeitfehler‘-2147217900 (80040e14)‘:
Unzulässige SQL-Anweisung; DELETE, INSERT,PROZEDURE,
oder
UPDATE erwartet.

Das bedeutet, dass eine Auswahlabfrage fälschlicherweise als Aktionsabfrage ausgeführt werden soll, bzw. es gar kein gültiges SQl-Statement ist.

Hat jemand von euch Erfahrung mit dieser Fehlermeldung bzw.
kann mir sagen, wie man die Ursache dafür beheben kann.

Ja, Nein,wenn Du nicht genauer den Code, bzw. die Abfrage (deren SQL-String) mitteilst.

Beim Rumprobieren ist mir aufgefallen, dass diese
Fehlermeldung immer dann nicht auftaucht, wenn die Abfrage aus
welcher die Daten entnommen werden sollen, nicht aus mehreren
Tabellen die untereinander in Beziehung stehen, besteht.

Wie oben gesagt: WIE heißt die Abfrage?

Viele Grüße vom Bodensee
Franz , DF6GL

PS: Feedback erwünscht!

Hallo Franz,

Word soll sich Daten aus Access holen und diese dann in die
entsprechenden Textmarken im Formular wiedergeben.

und WIE macht Word das, bzw. wie heißt der Code, den Du
benutzt?

Der Code liegt in einem Modul bei Word. Es wird zunächst nach der AuftragsnummerID gefragt, zu dem dann die Daten übernommen werden sollen.
Ich habe den Code an manchen Stellen mit “…“ gekürzt, weil es hier sonst zu lang wird:

Sub DatenVonACCESSNachWORD()
Dim objWord As Object
Dim con As ADODB.Connection
Dim rst As ADODB.Recordset
Dim str As String
Dim strAuftrag2009ID As String
Dim strAGFirma As String

str = InputBox(„Bitte geben Sie laufende Nummer des Auftrags ein:“)
If str = „“ Then Exit Sub
str = „Auftrag2009ID=’“ & str & „’“

Set con = New ADODB.Connection
With con
.Provider = „Microsoft.ACE.OLEDB.12.0“
.Open „D:\Sonstiges \Programme\Auftraege_2009.accdb“
End With

Set rst = New ADODB.Recordset
With rst
.Open Source:=„qryAuftragsbestaetigung“, _
ActiveConnection:=con, _
CursorType:=adOpenKeyset, _
LockType:=adLockOptimistic
.Find Criteria:=str, SearchDirection:=adSearchForward
If Not .EOF Then
strAuftrag2009ID = .Fields(„Auftrag2009ID“).Value
strAGFirma = .Fields(„AuftraggeberFirma“).Value
strAGMA = .Fields(„zHd“).Value

Else
MsgBox „Laufende Nummer für Auftrag nicht gefunden“
End If
.Close
End With
con.Close

Set rst = Nothing

On Error Resume Next
Set objWord = GetObject(, „Word.Application.12“)

With objWord
.Selection.GoTo What:=wdGoToBookmark, Name:=„AG_Firma“
.Selection.TypeText Text:=strAGFirma

.ActiveDocument.Save
End With

Set objWord = Nothing

End Sub

Hat jemand von euch Erfahrung mit dieser Fehlermeldung bzw.
kann mir sagen, wie man die Ursache dafür beheben kann.

Ja, Nein,wenn Du nicht genauer den Code, bzw. die Abfrage
(deren SQL-String) mitteilst.

Beim Rumprobieren ist mir aufgefallen, dass diese
Fehlermeldung immer dann nicht auftaucht, wenn die Abfrage aus
welcher die Daten entnommen werden sollen, nicht aus mehreren
Tabellen die untereinander in Beziehung stehen, besteht.

Wie oben gesagt: WIE heißt die Abfrage?

Die Abfrage “qryAuftragsbestaetigung“ in Access auf die der Code oben zugreift lautet:

SELECT qryAuftrag2009.Auftrag2009ID, qryAuftrag2009.AuftraggeberFirma, [Anrede] & " " & [Titel] & " " & [AuftraggeberMA] AS zHd, qryAuftrag2009.AuftraggeberAdresse, [AuftraggeberPLZ] & " " & [AuftraggeberStadt] AS AdressZusatz, [TrustMATitel] & " " & [TrustMAVorname] & " " & [TrustMANachname] AS SV, qryAuftrag2009.TrustMATelefon, qryAuftrag2009.TrustMAFax, qryAuftrag2009.TrustMAemail, qryAuftrag2009.Schadennummer, qryAuftrag2009.VNName, qryAuftrag2009.Schadentag, [SchadenortPLZ] & " " & [SchadenortStadt] AS SchadenOrt, [AuftragNrJahr] & „-“ & [AuftragNrMonat] & „-“ & [Auftrag2009ID] & „-“ & [TrustMAKurz] AS UnserZeichen, [AnredeBrief] & " " & [zHd] & „,“ AS Brief, qryAuftrag2009.TrustStandortAdresse, [TrustStandortPLZ] & " " & [TrustStandortStadt] AS TrustAdressZusatz
FROM qryAuftrag2009;

Beim Ausführen kommt jedoch folgende Meldung:
Laufzeitfehler‘-2147217900 (80040e14)‘:
Unzulässige SQL-Anweisung; DELETE, INSERT,PROZEDURE,
oder
UPDATE erwartet.

Das bedeutet, dass eine Auswahlabfrage fälschlicherweise als
Aktionsabfrage ausgeführt werden soll, bzw. es gar kein
gültiges SQl-Statement ist.

Gibt es die Möglichkeit den Aufruf von Word und die Übergabe von Daten von Access aus zu starten?

Viele Grüße
Kris

Hallo,

Der Code liegt in einem Modul bei Word.

nun ja, ein Access Programmierer würde es genau umgekehrt machen :smile:

Set rst = New ADODB.Recordset
With rst
.Open Source:=„qryAuftragsbestaetigung“, _
ActiveConnection:=con, _
CursorType:=adOpenKeyset, _
LockType:=adLockOptimistic

**.movelast = erstmal zum Ende, um alle Datensätze einzulesen
.movefirst = dann wieder zu Anfang

if .reccount > 0 then (es gibt zu druckende Datensätze)
…**

.Find Criteria:=str, SearchDirection:=adSearchForward

**if .nomatch then (prüfen, ob was gefunden wurde)

MsgBox „Laufende Nummer für Auftrag nicht gefunden“

else**

If Not .EOF Then
strAuftrag2009ID = .Fields(„Auftrag2009ID“).Value
strAGFirma = .Fields(„AuftraggeberFirma“).Value
strAGMA = .Fields(„zHd“).Value

End If
.Close
End With
con.Close

Set rst = Nothing

On Error Resume Next (sollte eigentlich nach oben in die zweite Zeile)

Dein Beispielcode druckt aber immer nur einen Datensatz :frowning:
Mit einer Schleife könntest du aber auch mehrere auf einmal speichern/drucken.

Wie/Wo merkt sich Access/Word, dass der Datensatz schon mal gedruckt wurde?

Grüße aus Rostock
Wolfgang
(Netwolf)

Hallo,

das eigentliche Problem bezgl. der Fehlermeldung und Fragestellung dürfte sich aber noch in der Abfrage „qryAuftrag2009“ verbergen. Wie heißt denn deren SQL-String?

Viele Grüße vom Bodensee
Franz , DF6GL

PS: Feedback erwünscht!

Hallo Wolfgang,

Der Code liegt in einem Modul bei Word.

nun ja, ein Access Programmierer würde es genau umgekehrt
machen :smile:

Ich würde es ja auch lieber aus Access aus machen, aber in den Microsoft-Büchern, die ich hab, konnte ich bisher nur diese Methode finden…

Dein Beispielcode druckt aber immer nur einen Datensatz :frowning:
Mit einer Schleife könntest du aber auch mehrere auf einmal
speichern/drucken.

Wie/Wo merkt sich Access/Word, dass der Datensatz schon mal
gedruckt wurde?

Ein Datensatz reicht in diesem Fall. Es soll ja nur eine Auftragsbestätigung zu einem neu erfassten Auftrag in Word erzeugt werden. Access/Word merkt sicht nicht, ob der Datensatz schon mal gedruckt wurde. - Wäre aber schön, wenn die Sache zwischen Access und Word funktioniert, dass dann in dem entsprechenden Datensatz des Auftrags das Druckdatum der Auftragsbestätigung eingetragen werden würde… (Aber Eins nach dem Anderem. Ich bin noch ein Anfänger was VBA betrifft und wachse mit dem Herausforderungen step by step)

Viele Grüße
Kris

Hallo Franz,

das eigentliche Problem bezgl. der Fehlermeldung und
Fragestellung dürfte sich aber noch in der Abfrage
„qryAuftrag2009“ verbergen. Wie heißt denn deren SQL-String?

wird sich für dich vermutlich blöd anhören, aber ich weiß nicht was SQL-String ist. Wie kann ich es herausfinden?

Viele Grüße
Kris

Hallo,

na, den SQL-String der ersten Abfrage hast Du doch auch gepostet…

„Select ……“

(Abfrageentwurf,Ansicht,SQL-Ansicht)

Das ist das, was Du unter „Abfrage“ selber verstehst.

Viele Grüße vom Bodensee
Franz , DF6GL

PS: Feedback erwünscht!

Hallo Wolfgang,

Der Code liegt in einem Modul bei Word.

nun ja, ein Access Programmierer würde es genau umgekehrt
machen :smile:

Ich würde es ja auch lieber aus Access aus machen, aber in den
Microsoft-Büchern, die ich hab, konnte ich bisher nur diese
Methode finden…

Dein Beispielcode druckt aber immer nur einen Datensatz :frowning:
Mit einer Schleife könntest du aber auch mehrere auf einmal
speichern/drucken.

Wie/Wo merkt sich Access/Word, dass der Datensatz schon mal
gedruckt wurde?

Ein Datensatz reicht in diesem Fall. Es soll ja nur eine
Auftragsbestätigung zu einem neu erfassten Auftrag in Word
erzeugt werden. Access/Word merkt sicht nicht, ob der
Datensatz schon mal gedruckt wurde. - Wäre aber schön, wenn
die Sache zwischen Access und Word funktioniert, dass dann in
dem entsprechenden Datensatz des Auftrags das Druckdatum der
Auftragsbestätigung eingetragen werden würde… (Aber Eins
nach dem Anderem. Ich bin noch ein Anfänger was VBA betrifft
und wachse mit dem Herausforderungen step by step)

Hallo,

Du solltest Dich erst mal auf eine Methode festlegen, soll heißen, ein Gesamtkonzept der ganzen(!) Geschichte aufstellen. Beide Möglichkeiten (Von Word auf Access oder von Access auf Word zuzugreifen) sind gegeben.

Dein Code in Word funktioniert prinzipiell(!, trotzdem Einwendungen von Netwolf berücksichtigen) bei mir, wenn ich eine einfache Abfrage auf eine Tabelle als Datenherkunft (und Version A2003) benutze. A2007 sollte aber keinen Unterschied zeigen.

Viele Grüße vom Bodensee
Franz , DF6GL

PS: Feedback erwünscht!

Hallo Kris,

Ich würde es ja auch lieber aus Access aus machen, aber in den
Microsoft-Büchern, die ich hab, konnte ich bisher nur diese
Methode finden…

alsooooo, im Zeitalter der EDV empfehle ich: nutze sie, die EDV.
Bücher sind schön und gut für das Bücherregal(wenn man sie gelesen hat) :smile:

Aktiver/aktueller - im Bereich Programmierung - ist immer noch das Internet (in meinen Augen das größte Buch der Welt).

Hier in den FAQ findest du Links und Tipps. Folgst du den Links, findest du Quellen für die du einige hundert Bücher kaufen müsstest.
Alleine die Knowhow 3.0 von Klaus Oberdalhoff deckt 90% der üblichen Probleme ab. Man muss das Rad nicht immer wieder neu erfinden. Einen guten Programmierer mache eine große/gute Bibliothek aus, die er hat und zu nutzen weis.

Also schau dir diese Sammlung an, dort ist z.B. auch der Aufruf von Worddokumenten aus Access beschrieben. Falls es dir nicht reicht, es gibt tausende von fertigen Code-Schnipsel im Internet für Access und VBA die dir weiter helfen können.

Grüße aus Rostock
Wolfgang
(Netwolf)

Hallo Wolfgang,

danke dir für den Tipp.

Grüße
Kris