Access-o-Mania

Access-Forum (Deutsch/German) => Access Programmierung => Thema gestartet von: Guenther am April 26, 2019, 11:18:07

Titel: Variable für Recordset
Beitrag von: Guenther am April 26, 2019, 11:18:07
Liebe Forum-Teilnehmer!

Ich habe in einer Datenbank ein Recordset eingerichtet. Auf der Grundlage einer Union-Abfrage sollen für alle Datensätze in der Union-Abfrage ein Word-Dokument geöffnet und Textmarken mit Werten gefüllt werden.

Nun bekomme ich die Fehlermeldung, dass Parameter erwartet werden, aber zu wenig Parameter übergeben werden.
Es wird mir dann diese Zeile markiert:

Public Function WordStarten0()
Dim Word As Object
Dim objWordBrief As Object
Dim db As DAO.Database
Dim rs As DAO.Recordset
Dim qrd As DAO.QueryDef
Dim P_Vorname1 As Variant
Dim P_Nachname1 As Variant
Dim P_Vorname2 As Variant
Dim P_Nachname2 As Variant
Dim P_Adresse As Variant
Dim P_PLZ As Variant
Dim P_Ort As Variant
Dim P_Anrede1_1 As Variant
Dim P_Anrede1_2 As Variant
Dim P_Anrede2_1 As Variant
Dim P_Anrede2_2 As Variant


On Error Resume Next
   Set outApp = GetObject(, "Word.Application")
On Error GoTo 0
 
  Set db = CurrentDb
  Set qrd = db.QueryDefs("qry_BekommtPost")
  Set rs = qrd.OpenRecordset

Kann mir jemand Rückmelden, welche(n) Parameter ich noch definieren muss!?
Die Referenz ist in den Verweisen gesetzt.

DANKE  :)

Gruß Guenther
Titel: Re: Variable für Recordset
Beitrag von: markusxy am April 26, 2019, 11:37:12
Die Fehlermeldung weist darauf hin, dass die Abfrage qry_BekommtPost fehlerhaft ist.
Titel: Re: Variable für Recordset
Beitrag von: Guenther am April 26, 2019, 12:00:09
DANKE für die Nachricht!
Beim Öffnen der Abfrage wird kein Fehler angezeigt. Ich kann auch z.B. mit einem DCount Befehl die Anzahl der Datensätze anzeigen lassen.

Was könnte den für ein Fehler vorliegen?

Gruß
Titel: Re: Variable für Recordset
Beitrag von: Guenther am April 26, 2019, 19:27:08
Hallo nochmals!

Ich habe in der Zwischenzeit noch per try and error folgenden Umstand herausgefunden.
Die Prozedur möchte immer noch EINEN Wert erhalten! Leider weiß ich nicht welchen! Wenn ich in der wie folgt gestalteten Set-Anweisung wie die Felder anders benennen, dann kommt die Fehlermeldung, dass er 12 Parameter möchte, aber 12 nicht übergeben werden.

Set rs = db.OpenRecordset("Select P_Vorname1, P_Nachname1, P_Vorname2, P_Nachname2, P_Adresse, P_PLZ, P_Ort, P_Anrede1_1, P_Anrede1_2, P_Anrede2_1, P_Anrede2_2 From qry_BekommtPost")

D.h. die Prozedur möchte noch EIN weiteres Feld. Hat jemand eine Idee, was das sein könnte?

Hier mal mein SQL-Code:
SELECT Erziehungsberechtigte.ERZ_Schüler, Erziehungsberechtigte.ERZ_Vorname AS P_Vorname1, Erziehungsberechtigte.ERZ_Nachname AS P_Nachname1, Erziehungsberechtigte.ERZ_Vorname2 AS P_Vorname2, Erziehungsberechtigte.ERZ_Nachname2 AS P_Nachname2, Erziehungsberechtigte.ERZ_Adresse AS P_Adresse, Erziehungsberechtigte.ERZ_PLZ AS P_PLZ, Erziehungsberechtigte.ERZ_Ort AS P_Ort, Erziehungsberechtigte.[ERZ_Beziehung Erziehungsberechtigter] AS P_Beziehung1, Erziehungsberechtigte.[ERZ_Beziehung Erziehungsberechtigter2] AS P_Beziehung2, [Erziehungsberechtigte]![ErhaeltPost1] AS P_Post, IIf([ERZ_Beziehung Erziehungsberechtigter]="Vater" Or [ERZ_Beziehung Erziehungsberechtigter]="Großvater" Or [ERZ_Beziehung Erziehungsberechtigter]="Pflegevater" Or [ERZ_Beziehung Erziehungsberechtigter]="Onkel" Or [ERZ_Beziehung Erziehungsberechtigter]="Bruder" Or [ERZ_Beziehung Erziehungsberechtigter]="Cousin" Or [ERZ_Beziehung Erziehungsberechtigter]="Stiefvater","Sehr geehrter Herr",IIf([ERZ_Beziehung Erziehungsberechtigter]="Mutter" Or [ERZ_Beziehung Erziehungsberechtigter]="Großmutter" Or [ERZ_Beziehung Erziehungsberechtigter]="Pflegemutter" Or [ERZ_Beziehung Erziehungsberechtigter]="Tante" Or [ERZ_Beziehung Erziehungsberechtigter]="Schwester" Or [ERZ_Beziehung Erziehungsberechtigter]="Cousine" Or [ERZ_Beziehung Erziehungsberechtigter]="Stiefmutter","Sehr geehrte Frau","")) AS P_Anrede1_1, IIf([ERZ_Beziehung Erziehungsberechtigter]="Vater" Or [ERZ_Beziehung Erziehungsberechtigter]="Großvater" Or [ERZ_Beziehung Erziehungsberechtigter]="Pflegevater" Or [ERZ_Beziehung Erziehungsberechtigter]="Onkel" Or [ERZ_Beziehung Erziehungsberechtigter]="Bruder" Or [ERZ_Beziehung Erziehungsberechtigter]="Cousin" Or [ERZ_Beziehung Erziehungsberechtigter]="Stiefvater","Herrn",IIf([ERZ_Beziehung Erziehungsberechtigter]="Mutter" Or [ERZ_Beziehung Erziehungsberechtigter]="Großmutter" Or [ERZ_Beziehung Erziehungsberechtigter]="Pflegemutter" Or [ERZ_Beziehung Erziehungsberechtigter]="Tante" Or [ERZ_Beziehung Erziehungsberechtigter]="Schwester" Or [ERZ_Beziehung Erziehungsberechtigter]="Cousine" Or [ERZ_Beziehung Erziehungsberechtigter]="Stiefmutter","Frau","")) AS P_Anrede1_2, IIf([ERZ_Beziehung Erziehungsberechtigter2]="Vater" Or [ERZ_Beziehung Erziehungsberechtigter2]="Großvater" Or [ERZ_Beziehung Erziehungsberechtigter2]="Pflegevater" Or [ERZ_Beziehung Erziehungsberechtigter2]="Onkel" Or [ERZ_Beziehung Erziehungsberechtigter2]="Bruder" Or [ERZ_Beziehung Erziehungsberechtigter2]="Cousin" Or [ERZ_Beziehung Erziehungsberechtigter2]="Stiefvater","Sehr geehrter Herr",IIf([ERZ_Beziehung Erziehungsberechtigter2]="Mutter" Or [ERZ_Beziehung Erziehungsberechtigter2]="Großmutter" Or [ERZ_Beziehung Erziehungsberechtigter2]="Pflegemutter" Or [ERZ_Beziehung Erziehungsberechtigter2]="Tante" Or [ERZ_Beziehung Erziehungsberechtigter2]="Schwester" Or [ERZ_Beziehung Erziehungsberechtigter2]="Cousine" Or [ERZ_Beziehung Erziehungsberechtigter2]="Stiefmutter","Sehr geehrte Frau","")) AS P_Anrede2_1, IIf([ERZ_Beziehung Erziehungsberechtigter2]="Vater" Or [ERZ_Beziehung Erziehungsberechtigter2]="Großvater" Or [ERZ_Beziehung Erziehungsberechtigter2]="Pflegevater" Or [ERZ_Beziehung Erziehungsberechtigter2]="Onkel" Or [ERZ_Beziehung Erziehungsberechtigter2]="Bruder" Or [ERZ_Beziehung Erziehungsberechtigter2]="Cousin" Or [ERZ_Beziehung Erziehungsberechtigter2]="Stiefvater","Herrn",IIf([ERZ_Beziehung Erziehungsberechtigter2]="Mutter" Or [ERZ_Beziehung Erziehungsberechtigter2]="Großmutter" Or [ERZ_Beziehung Erziehungsberechtigter2]="Pflegemutter" Or [ERZ_Beziehung Erziehungsberechtigter2]="Tante" Or [ERZ_Beziehung Erziehungsberechtigter2]="Schwester" Or [ERZ_Beziehung Erziehungsberechtigter2]="Cousine" Or [ERZ_Beziehung Erziehungsberechtigter2]="Stiefmutter","Frau","")) AS P_Anrede2_2
FROM Erziehungsberechtigte
WHERE (((Erziehungsberechtigte.ERZ_Schüler)=[Formulare]![Schülerdetails]![Text662]) AND (([Erziehungsberechtigte]![ErhaeltPost1])=True))
UNION ALL SELECT Schüler.ID AS ERZ_Schüler, Schüler.Vorname, Schüler.Nachname, Null AS Vorname2, Null AS Nachname2, Schüler.Adresse, Schüler.PLZ, Schüler.Ort, Null AS [Beziehung Erziehungsberechtigter], Null AS [Beziehung Erziehungsberechtigter2], [Schüler]![ErhaeltPost] AS Post, Null AS Anrede1_1, Null AS Anrede1_2, Null AS Anrede2_1, Null AS Anrede2_2
FROM Schüler
WHERE (((Schüler.ID)=[Formulare]![Schülerdetails]![Text662]) AND (([Schüler]![ErhaeltPost])=True));


Wäre super, wenn jemand das Problem erkennen kann und mir einen Tipp gibt :-)

Gruß Günther
Titel: Re: Variable für Recordset
Beitrag von: markusxy am April 26, 2019, 20:00:47
Schau mal hier:

http://www.donkarl.com?FAQ6.4 (http://www.donkarl.com?FAQ6.4)
Titel: Re: Variable für Recordset
Beitrag von: DF6GL am April 26, 2019, 20:25:01
Hallo,

welch ein aufgeblähtes Monstrum  :o   nfc

vermutlich:

WHERE (((Schüler.ID)=[Formulare]![Schülerdetails]![Text662]) AND (([Schüler].[ErhaeltPost])=True));
Titel: Re: Variable für Recordset
Beitrag von: MzKlMu am April 26, 2019, 20:53:56
Hallo,
mit einem korrekten Datenmodell würde aus dem Monstrum 2-3 Zeilen werden.
Alleine die vielen Or's lassen erhebliches Verbesserungspotential erkennen. Die Briefanrede gehört in eine Tabelle mit den Erziehungberechtigtenarten und diese wiederum den Schülern in einer n:m Beziehung zugeordenet. Die vielen Or's entfallen dann ersatzlos.

Über das Kontrukt solltest Du noch mal gründlich nachdenken.
Auch eine Unionabfrage sollte in einer normalisierten Datenbank nicht notwendig sein.
Titel: Re: Variable für Recordset
Beitrag von: Guenther am April 26, 2019, 23:45:58
DANKE an die konstruktiv Antwortenden. Ob man das "Monster" auch anders gestalten kann, ist nicht meine Frage!
Titel: Re: Variable für Recordset
Beitrag von: MzKlMu am April 26, 2019, 23:59:08
Hallo,
wahrscheinlich war meine Antwort auf lange Sicht doch die Konstruktivere, wer weis.  ;D
Titel: Re: Variable für Recordset
Beitrag von: Beaker s.a. am April 27, 2019, 11:08:38
@Klaus
Langfristig wird er das wohl auch merken, und wird vielleicht nach wochen-
langer Verschwendung von Arbeitszeit seine Beratungsresistenz aufgeben.

@Guenther
Du würdest dir echt selber einen grossen Gefallen tun, wenn du Vorschläge,
die hier gemacht werden, zumindest hinterfragen würdest.

gruss ekkehard
Titel: Re: Variable für Recordset
Beitrag von: Guenther am April 27, 2019, 12:12:07
Ich kann eure Kritik gut nachvollziehen! SORRY! Es stimmt natürlich, dass die Or's auch anders gelöst werden können/ vielleicht müssen.
Die Frage für mich ist davon unabhängig, hängt meiner Fehlermeldung bzw. mein Fehler damit direkt zusammen?
Ich habe den Vorschlag von markus888 angeschaut, leider ohne Erfolg.
Habe den ganzen Vorgang auch auf eine andere Abfrage angewandt. Leider auch ohne Erfolg. Kann es auch mit der Bedingung "ErhältPost = True" zusammenhängen?
Gruß Guenther
Titel: Re: Variable für Recordset
Beitrag von: markusxy am April 27, 2019, 13:41:52
Zitat von: Guenther am April 27, 2019, 12:12:07
Die Frage für mich ist davon unabhängig, hängt meiner Fehlermeldung bzw. mein Fehler damit direkt zusammen?
Nein, da ist kein Zusammenhang.

Zitat
Ich habe den Vorschlag von markus888 angeschaut, leider ohne Erfolg.
Dann hast du es nicht richtig gemacht.

Zitat
Kann es auch mit der Bedingung "ErhältPost = True" zusammenhängen?
Vermutlich nicht. Wir können doch die Richtigkeit mangels Infos nicht bestätigen.
Es gibt da eine einfache Vorgehensweise.
Schmeiß einfach nach der Reihe alle fraglichen Stellen raus, bis die Fehlermeldung weg ist.
Zuerst würde ich einfach mal [Formulare]![Schülerdetails]![Text662] durch einen fixen Wert ersetzen, dann weißt du gleich Bescheid.
Titel: Re: Variable für Recordset
Beitrag von: Guenther am April 27, 2019, 15:46:07
Hallo markus888,
es liegt eindeutig an der Bedingung "[Formulare]![Schülerdetails]![Text662]". Wenn ich die rausnehme, dann läuft die Prozedur durch.
Ich habe aber leider noch keine Lösung, wie ich die Auswahl für den aktuellen Datensatz bzw. Schüler anders bewerkstelligen kann.
Gruß und DANK
Titel: Re: Variable für Recordset
Beitrag von: markusxy am April 27, 2019, 15:48:09
Dann zeig mal wie du es umgesetzt hast.
Mit Sicherheit nicht so wie in der Anleitung!  ;D
Titel: Re: Variable für Recordset
Beitrag von: Guenther am April 28, 2019, 09:36:39
Hallo markus888,
in der Tat, hatte Eval falsch angewandt! Ist allerdings auch tückisch, dass man in dem Fall nicht "Formulare" sonders "Forms" schreiben muss.
DANKE für die Hilfe!
Titel: Re: Variable für Recordset
Beitrag von: markusxy am April 28, 2019, 10:36:56
Zitat von: Guenther am April 28, 2019, 09:36:39
Ist allerdings auch tückisch, dass man in dem Fall nicht "Formulare" sonders "Forms" schreiben muss.

Ich weiß, aber ich dachte es dir mehr geholfen, wenn du von selbst drauf kommst.
So was merkt man sich dann besser, und schaut künftig genauer.  ;D