Datenübergabe VB - Abfrage

Liebe Wissende,

ich versuche einmal, ein komplexes Thema ganz einfach zu beschreiben und hoffe, trotzdem alle für die Lösung relevanten Details aufzuführen.

Ich habe einen schönen Code, der u.a. folgende Befehlszeile enthält:

Set PERS = db1.OpenRecordset(„SELECT stammgruppefoyer_mail.Nachname, stammgruppefoyer_mail.Vorname, stammgruppefoyer_mail.Personalnummer, stammgruppefoyer_mail.EmailAdresse, stammgruppefoyer_mail.Status, stammgruppefoyer_mail.Anrede, stammgruppefoyer_mail.Straße, stammgruppefoyer_mail.Ort, stammgruppefoyer_mail.LKZ, stammgruppefoyer_mail.[StdLohn/AN], stammgruppefoyer_mail.Postleitzahl FROM stammgruppefoyer_mail WHERE stammgruppefoyer_mail.Personalnummer=’“ + Personalnummer + „’“, DB_OPEN_DYNASET) ’ Dynaset erstellen."

„Stammgruppefoyer_mail“ ist eine Abfrage. Gebe ich in die Abfrage bei einem Feld ein Kriterium ein, z.B. „Otto“, klappt die Datenübergabe, VB kann damit arbeiten. Gebe ich eine Formel in die Abfrage ein (wenn(a=5;„Otto“;""), dann klappt die Datenübergabe nicht, auch wenn die Abfrage als solche funktioniert und das selbe Ergebnis liefert. Es kommt eine Fehlermeldung „1 Parameter wurde erwartet, aber es wurden zuwenig Parameter übergeben“. Das mit einem Kriterium hinterlegte Feld wird dabei nicht in obigem Code angesprochen! Woran kann das liegen?

Danke für Eure Hilfe!

fshbb

Hallo,

das liegt daran, dass bei Openrecordset die Abfrage nicht den „Expression Service“ durchläuft und somit solche Ausdrücke in Kriterien nicht aufgelöst werden.

Weiterhin empfehle ich (falls nicht geschehen) , sofern es sich um DAO-Zugriff (wie ich mal vermute) handelt, die Recordset-Deklaration explizit auf das DAO-Objekt zu beziehen:

Dim db1 as DAO. Datebase
Dim PERS as DAO. Recordset

und auch die richtige(n) Konstante(n) zu benutzen:

dbOpenDynaset (nicht DB_OPEN_DYNASET )

String-Concatination sollte (muß) zudem mit dem „&“-Operator und nicht mit „+“ -Operator erledigt werden.

Noch ein Hinweis:

Auf Leer- und Sonderzeichen in Objektnamen verzichten…

z. B. hier: StdLohn/AN

Viele Grüße vom Bodensee
Franz, DF6GL

Danke, danke, danke - aber…
Herzlichen Dank; ich klicke schon den ganzen Tag im Halbstundentakt hier herein… Schön, dass Du mich verstanden hast; leider hat es auf Anhieb nicht geklappt. Ich habe hier die ganze Funktion; darf ich freundlich bitten, einmal darüberzu schauen?

Ganz lieben Dank!

fshbb

Function dienstplan_einzeln(Personalnummer As String, Fmonat As Long, FJahr As Long, mailen As Boolean)

Dim db1 As dao.Database
Dim xlApp As Object
’ personal = stammgruppefoyer - vas = alle VAs in Monat
Dim DSG1 As Recordset, DSG2 As Recordset, PERS As dao.Recordset, uhu As String, output As String, outstart As String
Dim wer As String, Ort As String, strasse As String, Lohn As String
Set db1 = CurrentDb()
Set PERS = db1.OpenRecordset(„SELECT stammgruppefoyer_mail.Nachname, stammgruppefoyer_mail.Vorname, stammgruppefoyer_mail.Personalnummer, stammgruppefoyer_mail.EmailAdresse, stammgruppefoyer_mail.Status, stammgruppefoyer_mail.Anrede, stammgruppefoyer_mail.Straße, stammgruppefoyer_mail.Ort, stammgruppefoyer_mail.LKZ, stammgruppefoyer_mail.[StdLohn/AN], stammgruppefoyer_mail.Postleitzahl FROM stammgruppefoyer_mail WHERE stammgruppefoyer_mail.Personalnummer=’“ + Personalnummer + „’“, DB_OPEN_DYNASET) ’ Dynaset erstellen."
Set DSG1 = db1.OpenRecordset(„VA_dienstplan“, DB_OPEN_DYNASET) ’ Dynaset erstellen."
Set xlApp = CreateObject(„Excel.Application“)
If (mailen) Then
outstart = InputBox(„Startname der Files ohne .xls!!!“, „Einsatzplan“, „u:\dienstplan“ + CStr(FJahr) + „_“ + Format(CStr(Fmonat), „00“) + „_“)
Else
outstart = InputBox(„Startname der Files ohne .xls!!!“, „Einsatzplan“, „u:\dienstplan_brief“ + CStr(FJahr) + „_“ + Format(CStr(Fmonat), „00“) + „_“)
End If

PERS.MoveFirst
Do ‚Schleife durchlaufen, solange passende Datensätze vorhanden sind
DSG1.Filter = „Ausdr1 =“ + CStr(FJahr) + " and Ausdr2=" + CStr(Fmonat) + " and personalnr =‘" + PERS!Personalnummer + „’“

Set DSG2 = DSG1.OpenRecordset

If (DSG2.BOF) Then GoTo norec

output = outstart + CStr(PERS!Personalnummer) + „.xls“
wer = Nz(PERS!Anrede, „Frau“) + " " + Nz(PERS!Vorname, " ") + " " + Nz(PERS!Nachname, " ")

strasse = Nz(PERS!strasse, " ")
Ort = Nz(PERS!LKZ, „D“) + „-“ + Nz(PERS!Postleitzahl, „76530“) + " " + Nz(PERS!Ort, „Baden-Baden“)
Lohn = Nz(PERS![StdLohn/AN], " ")
If (IsNull(PERS!EmailAdresse) Or Not mailen) Then
uhu = fuellexcel(wer, strasse, Ort, Lohn, " ", DSG2, True, output, False, xlApp, Fmonat, FJahr)
Else
uhu = fuellexcel(wer, strasse, Ort, Lohn, PERS!EmailAdresse, DSG2, True, output, True, xlApp, Fmonat, FJahr)
End If

norec:
PERS.MoveNext

Loop Until (PERS.EOF)
xlApp.Quit

End Function

Hallo,

mhmm, an diesem Code hast Du so gut wie gar keinen meiner Hinweise umgesetzt… Mach das erst mal, dann sehen wir weiter.

Außerdem hast Du das Wichtigste nicht gepostet: Den SQL-String (Kopieren aus Abfrageentwurf/Menüleiste/Ansicht/SQL-Ansicht) der Abfrage…

Viele Grüße vom Bodensee
Franz, DF6GL