Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

Variable für Recordset

Begonnen von Guenther, April 26, 2019, 11:18:07

⏪ vorheriges - nächstes ⏩

Guenther

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

markusxy

Die Fehlermeldung weist darauf hin, dass die Abfrage qry_BekommtPost fehlerhaft ist.

Guenther

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ß

Guenther

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

markusxy

#4

DF6GL

Hallo,

welch ein aufgeblähtes Monstrum  :o   nfc

vermutlich:

WHERE (((Schüler.ID)=[Formulare]![Schülerdetails]![Text662]) AND (([Schüler].[ErhaeltPost])=True));

MzKlMu

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.
Gruß Klaus

Guenther

DANKE an die konstruktiv Antwortenden. Ob man das "Monster" auch anders gestalten kann, ist nicht meine Frage!

MzKlMu

Hallo,
wahrscheinlich war meine Antwort auf lange Sicht doch die Konstruktivere, wer weis.  ;D
Gruß Klaus

Beaker s.a.

@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
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

Guenther

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

markusxy

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.

Guenther

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

markusxy

Dann zeig mal wie du es umgesetzt hast.
Mit Sicherheit nicht so wie in der Anleitung!  ;D

Guenther

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!