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!
Hallo,
was ist denn überhaupt das Ziel der Aktion ?
Willst Du eine Zahl um 1 erhöhen ?
Das geht auch einfacher.
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.
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?
Danke, Franz! Dein Beitrag kam kurz bevor ich meinen letzten geschrieben habe. Ich gucke es mir an und melde mich wieder.
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?
Lösung gefunden!
Die Abfragekriterien muss man mit Auswerten("Kriterium") ergänzen, also, z.B.:
Auswerten("[Formulare]![frmNeuesDokument]![cbo_Projekt]")