Abfrageergebnisse in Formular übernehmen

Hallo,

ich habe ein Formular mit integriertem Kalendersteuerlement. Nach Auswahl des Zeitraums sollen per Klick auf einen zentralen Befehlsbutton (erst dann und nicht schon beim Öffnen des Formulars) jeweils verschiedene Felder mit den Ergebnissen verschiedener Abfragen gefüllt werden. Alle Abfragen sind schon mit den Formularparametern gefüllt.

Wie bekomme ich die Abfrageergebnisse in die vordefinierten Felder?

Bin für jeden Hinweis dankbar.

P.S. Ich verwende Access97.

Ciao
Kasak

Hallo,

Hallo, Abfragen kannst Du mittels VBA aus einem Formular ansprechen:

Dim db As Database, rst As Recordset
Set db = CurrentDb
Set rst = db.OpenRecordset("[Name der Abfrage]", dbOpenDynaset)
rst.MoveFirst

Öffnet die Abfrage und setzt sich auf den ersten Datensatz. Mit den Move-Methoden kann man durch die Datensätze (wenn mehrere) blättern.

Das Füllen von Steuerelementen (z. B. ungebundenen Textfeldern) im Formular geht dann ungefähr so

Me![Text37] = rst![Name des Feldes aus der Abfrage]

In Access97 ist übrigens eine ausgezeichnete Hilfe drinnen.

HTH,

Ulrich

Hallo Ulrich,

danke für den Code. Scheint auch zu klappen. Leider bekomme ich Laufzeitfehler 3061. Die Abfrage enthält zwei Parameter ‚Von‘ und ‚Bis‘ die vom Formular (Kalendersteuerelement) übergeben werden.

Wie kann ich diese Parameter in den Code einbinden?

Vielen Dank und viele Grüße

Kasak

Hallo,

Laufzeitfehler 3061: Zuwenig Parameter übergeben.

Ich hatte Dich falsch verstanden (Werte aus Abfrage ins Formular, Du willst es umgekehrt).

Versuch doch mal, bei der Angabe der Parameter in der Abfrage auf das Formular zu verweisen:

Kriterien: =[Forms!Name_des_Formulars!Name_des_Steuerelements]

Beim Aufruf der Abfrage muß das Formular natürlich geöffnet sein und die Steuerelemente geeignete Werte enthalten.

Ulrich

Hallo Ulrich,

die Parameter habe ich bereits in der Abfrage hinterlegt:

SELECT Count(*) AS Anzahl
FROM tblVerkauf
WHERE Buchungsdatum between [Formulare]![Formular1]![VonDatum] and [Formulare]![Formular1]![BisDatum];

Die enthaltenen Parameter werden über zwei Kalendersteuerelemente auf dem Formular ausgewählt. Das Ergebnis der Abfrage soll in das auf dem Formular integriertem Textfeld angezeigt werden.

Der Code hinter meinem Befehlsbutton auf dem Formular sieht jetzt wie folgt aus:

Dim db As Database
Dim rst As Recordset

Set db = CurrentDb
Set rst = db.OpenRecordset(„Abfrage1“, dbOpenDynaset)
OpenRecordsetOutput rst

Me![Text84] = rst![Anzahl]

Leider gibt’s immer noch die Laufzeitfehlermeldung 3061 (2 Parameter wurden erwartet, aber es wurden zuwenig Parameter übergeben).

Ciao
Kasak

Hallo,

funktioniert die Abfrage, wenn Du statt Parameter direkt Daten eingibst (im SQL-Code)? Meines Wissens müssen in Access-SQL die Datumswerte im amerikanischem Datumsformat angegeben werden und in Rauten (#) gesetzt werden. Ich habe hier mal auf die Schnelle eine Abfrage in einer meiner Datenbanken angelegt:

SELECT Count(Tabelle_Dienstwagen.BeauftragungsNr) AS [Anzahl von BeauftragungsNr]
FROM Tabelle_Dienstwagen
WHERE (((Tabelle_Dienstwagen.Beginn)=#1/1/2002#) AND ((Tabelle_Dienstwagen.Ende)=#12/31/2002#));

(Vielleicht solltest Du die Count-Funktion über ein beliebiges Feld aber nicht über das Sternchen (*) laufen lassen?)

Wegen Datumsformat: Du kannst zur Umwandlung die Funktion DateValue (DatWert) verwenden. Schau mal in der Hilfe nach.

Du kannst im Code hinter Deinem Befehlsbutton auch vor Öffnen der Abfrage mittels der MsgBox-Funktion die Werte aus den Kalendersteuerelementen ausgeben, natürlich nur mal zum debuggen.

Ulrich

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo Ulrich,

die Abfrage funktioniert auch mit direkter Dateneingabe. Testhalber habe ich auch schon ein Formular-Textfeld direkt beim Öffnen mit dem Ergebnis der Abfrage befüülen lassen (als Parameter wurden dann die default-Werte des Kalendersteuerelements verwendet).

Der Laufzeitfehler mokiert offensichtlich das Codefragment:
Set rst = db.OpenRecordset(„Abfrage“, dbOpenDynaset).

Ciao
Kasak

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo,

Du kannst die Parameter umgehen, inden Du die Abfrage neu erstellst.

Kann man mit VBA so machen:

Set qdfNew = db.CreateQueryDef(stAbfrage, stSQL)

stAbfrage enthält den Namen, stSQL die komplette SQL-Anweisung.

Mittels Stringoperatoren kannst Du die Inhalte der Steuerelemente in stSQL einbauen:

stSQL = "… Between " & „#“ & DatWert(NameSteuerelement) & & „#“ &…

Die (alte) Abfrage kannst Du vorher löschen mit (Beispiel):

'Prüfen, ob Abfrage_Statistik_Monat_vor existiert (Wenn ja, löschen)

stAbfrage2 = „Abfrage_Statistik_Monat_vor“

Set db = CurrentDb

For Each qdfLoop In db.QueryDefs

If qdfLoop.Name = stAbfrage2 Then
db.QueryDefs.Delete stAbfrage2
Else
'Nichts tun
End If

Next qdfLoop

Leider etwas knapp geworden, aber ich habe jetzt Wochenende :smile:

Dir auch ein schönes,

Ulrich

Hallo Ulrich,

mitz dem Code klappt es. Das Problem bei der anderen Lösung scheinen wirklich die Parameter zu sein.

Vielen Dank für die Hilfe.

Ciao
Kasak