Neuigkeiten:

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

Mobiles Hauptmenü

Problem mit Abfragem die auf Formular basiert.

Begonnen von Carlos_C, September 28, 2015, 09:33:44

⏪ vorheriges - nächstes ⏩

Carlos_C

Guten Morgen liebe Access-Gurus,

ich habe folgendes Problem mit einem VBA Code in einem Formular:

Also, hinter dem ,,Beim Klicken Ereignis" einer Befehlschaltfläche habe ich folgendes VBA Code geschrieben (hier nur ein Abstrakt, des Codes, da sonst der Code zu lange ist):

Dim db As DAO.Database
Dim rs As DAO.Recordset
Dim Zähler As Long

...

Zähler = 0       

        If DCount("IDDokumente", "qryVerfügbarerZähler") > 0 Then
       
            Set db = CurrentDb
            Set rs = db.OpenRecordset("qryVerfügbarerZähler", dbOpenSnapshot)
            rs.MoveFirst
            Zähler = rs!lngZähler + 1
            rs.Close
            Set rs = Nothing
            Set db = Nothing

...


Also, wenn die Abfrage ,,qryVerfügbarerZähler" nicht leer ist, soll er diese Abfrage öffnen und in der erste Zeile den Wert im Feld ,,lngZähler" nehmen und die Variable ,,Zähler" damit berechnen.

Beim Klicken kommt aber folgende Fehlermeldung:

Zitat,,Laufzeitfehler ,3061': 2 Parameter wurden erwartet, aber es wurden zu wenig Parameter übergeben."

Und im VBA Code wird folgende Zeile gelb markiert:

Set rs = db.OpenRecordset("qryVerfügbarerZähler", dbOpenSnapshot)

Die Abfrage ,,qryVerfügbarerZähler" hat 4 Felder: IDDokumente, lngProjektnummer, lngDokTyp und lngZähler. Diese Abfrage basiert auf mein Formular, und zwar unter Kriterien, bei dem Feld ,,lngProjektnummer" habe ich

[Formulare]![frmNeuesDokument]![cbo_Projekt]

geschrieben und bei dem feld ,,lngDokTyp" habe ich

[Formulare]![frmNeuesDokument]![cbo_Dokumententyp]

geschrieben.

Ich gehe davon aus, dass das Problem daran liegt, dass meine Abfrage auf mein Fomular basiert, weil, wenn ich die Abfragekriterien leer lasse, funktioniert der VBA Code. Die Abfrage muss aber auf das Formular basieren.

Hat jemand einen Tipp hier?

Danke im Voraus für Eure Vorschläge!


Gruß,

Carlos

MzKlMu

Hallo,
was ist denn überhaupt das Ziel der Aktion ?
Willst Du eine Zahl um 1 erhöhen ?
Das geht auch einfacher.
Gruß Klaus

DF6GL

Hallo,

mögliche Fehlerursachen:

--Die Formularfelder sind leer.
--Im SQL-Statement (SQL-Ansicht) steht nicht FORMS!...... in der Where-Condition.
--Openrecordset kann nicht auf die Formularfeldverweise zugreifen, bzw. der Expression-Service (für die Auflösung der Feldverweise) greift hier nicht.
Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

Carlos_C

Hallo Klaus,

den Hintergrund wollte ich nicht erklären, damit Ihr nicht so viel zu lesen habt und weil ich dachte, dass es nicht nötig wäre. Aber dann erkläre ich es:

Also, es geht hier um eine Datenbank, um Dokumente zu verwalten. Jedes Dokument hat eine Dokumentennummer, die sprechend ist und folgendermaßen gebildet wird:

AAAAAA-AA-BBB-CCC-DD-EEE(E)

A: Projektnummer (6-stellig, z.B.: 150928-01),
B: Dokumententyp (3-stellig, z.B.: BST für Bestellung, PRO für Protokoll, AUB für Auftragbestätigung usw),
C: Zähler (3-stellig, geht von 001 bis 999),
D: Version (2- stellig, geht von 01 bis 99)
E: Dateiendung (z.B. doc, docx, xls, xlsx, xlsm, pdf, usw... also 2- bis 4-stellig)

Mein Formular ,,frm_NeuesDokument" dient der Anlegung neuer Dokumente. In diesem Formular müssen u.a. die Felder cbo_Projekt und cbo_Dokumentennummer ausgefüllt werden. Nehmen wir an, dass das Projekt ,,150928-01" schon 2 Bestellungen hat, und zwar die Dokumente

150928-01-BST-001-01.pdf, und
150928-01-BST-002-01.pdf.

Jetzt möchte ich z.B. aber eine neue Bestellung (als pdf Datei) im Rahmen meines Projekts 150928-01 einchecken. Dieses neue Dokument kriegt dann die Nummer 150928-01-BST-???-01.pdf. Um die Dokumentennummer zu bilden, muss erstmal Access rausfinden, ob das Projekt 150928-01 schon eine BST (Bestellung) hat, und wenn ja, wieviele. Dafür gibt es die Abfrage ,,qryVerfügbarerZähler", die auf die Tabelle ,,tblDokumente" basiert und u.a. die Felder ,,lngProjektnummer", ,,lngDokTyp" und ,,lngZähler" hat. Wenn ich in ,,qryVerfügbarerZähler" die Kriterien leer lasse, dann zeigt mir diese Abfrage für alle bestehende Dokumente ALLE Projektnummer, alle DokTypen und alle Zähler. Ich möchte aber wissen, ob für das Projekt, das ich im Feld ,,cbo_Projekt" im Formular ,,frmNeuesDokument" eingegeben habe, es schon einen DokTyp gibt (dass ich im Feld ,,cbo_Dokumententyp" im gleichen Formular eingegeben habe), und wenn ja, welcher der der höchste Zähler ist.

Im Falle, dass ich im Projekt 150928-01 schon 2 Bestellungen habe und eine dritte einchecken möchte, dann ist der höchste Zähler der 002 und mein nächster verfügbarer Zähler wäre dann der 003.

Verstehst Du mein Problem?
Gruß,

Carlos

Carlos_C

Danke, Franz! Dein Beitrag kam kurz bevor ich meinen letzten geschrieben habe. Ich gucke es mir an und melde mich wieder.
Gruß,

Carlos

Carlos_C

Hallo Franz, es liegt anscheinend an deiner dritten Fehlerursache, da die erste (Formularfelder sind nicht leer) und die zweite (ich habe "Formulare" für "Forms" ersetzt) nicht sein können. Wie kann ich dann dieses Problem lösen?
Gruß,

Carlos

Carlos_C

Lösung gefunden!

Die Abfragekriterien muss man mit Auswerten("Kriterium") ergänzen, also, z.B.:

Auswerten("[Formulare]![frmNeuesDokument]![cbo_Projekt]")
Gruß,

Carlos