Laufzeitfehler 91
#1
Moin zusammen,

Ich habe unter Formulare, ein frmBestellungen, in den eine Schaltfläche "Korrektur BestNrPopUp" ist. Wenn ich dieses Betätige macht es mir ein Fenster auf zur Eingabe der Bestellnummer. Bis hierhin funktioniert alles.
Wenn ich aber eine Bestellnummer eingebe die es schon bereits gibt (2000), soll eine MsgBox sich öffnen mit der Aussage: das es die BesNr bereits vorhanden ist, zur Information das es die Bestellnummer bereits gibt und wenn es die Bestellnummer noch nicht vorhanden ist soll eine MsgBox sich öffnen wo drin steht Okay! die ich mit den Button OK wieder schließe.

Im Anhang habe ich die Datei. Ich komme auf den fehler nicht.
Ich bin gerade dabei das alles zu lernen, und dieses ist eine Aufgabe aus mein Heft.

Danke und Gruß Jürgen


Angehängte Dateien
.accdb   Aufgabe zur Übung.accdb (Größe: 932 KB / Downloads: 0)
Antworten Top
#2
Moin,

ich habe gerade kein Access zur Hand, aber der Laufzeitfehler 91 bedeutet, dass dein Code auf eine Objektvariable zugreifen will, die zum Zeitpunkt der Laufzeit kein Objekt zugewiesen hat (den Text der Fehlermeldung solltest du künftig mit angeben). Vielleicht stellst du den fehlerhaften Code jetzt und künftig nochmal als Text in CodeTags zur Verfügung, dann könnte dir vermutlich auch ohne Access geholfen werden.

Viele Grüße 
derHöpp
[-] Folgende(r) 1 Nutzer sagt Danke an derHoepp für diesen Beitrag:
  • JuergenRa
Antworten Top
#3
Moin,

hier der Code. 
Private Sub Form_Load()
    DoCmd.MoveSize 6500, 9000
    Me!KorrBestNr = Forms!frmBestellungen!Artikelbestellungen!BestNr
End Sub
'Mit der Prozedur Form_Load() wird mit DoCmd und der Methode MoveSize das Pop-upFormular auf dem Bildschirm positioniert.

Private Sub cmdOkay_Click()
Dim db As DAO.Database
Dim rs As DAO.Recordset
Dim strSQL As String
Dim IntBestOK As Integer

On Error GoTo Mldg

Set db = CurrentDb()
strSQL = "SELECT * FROM tblBestellungen WHERE tblBestellungen.BestNr = " & Me.KorrBestNr & "'"
Set rs = db.OpenRecordset(strSQL, dbOpenDynaset)

If rs.RecordCount = 0 Then
    Exit Sub
End If



IntBestOK = MsgBox("Leider existiert die Nummer " & rs("BestNr") & "bereits: " & vbCr & vbCr & "Für die KdNr: " & rs.Fields("KdNr") & "", vbOKOnly)

Forms!frmBestellungen!BestNr = Me!KorrBestNr
    DoCmd.Close
Forms!frmBestellungen!Artikelbestellungen.SetFocus
Forms!frmBestellungen!KdNr.SetFocus
Exit Sub

Mldg:
MsgBox "Fehlerbeschreibung: " & Err.Description & vbCr & "Fehlernummer " & Err.Number

rs.Close
End Sub
'In der Prozedur cmdOkay_Click() wird in der ersten Zeile der Inhalt des Textfeldes des Pop-up-Formulars an das Steuerelement BestNr des Hauptformulars übergeben.
'Danach wird das Pop-up geschlossen, der Fokus wird auf das Unterformular Artikelbestellungen gesetzt, um eine Aktualisierung zu erzwingen.
'Zum Abschluss wird der Fokus wieder auf die KdNr des Hauptformulars gesetzt.

Der Fehler Code:

Syntaxfehler in Zeichenfolge in Abfrageausdruckt tblBestellungen.BestNr = 1000
Fehlernummer 3075

danach Debugger: Laufzeitfehler 91, Qbjektvariable oder-Blockvariable nicht festgelegt.
Antworten Top
#4
Moin,

du solltest immer auf On Error verzichten, bis du alle möglichen Fehler kennst und sie umgehen kannst.

Der Fehler 91 kommt, weil die OpenRecordset-Methode kein RecordSet-Objekt zurückgegeben hat. Das liegt daran, dass du keinen gültigen SQL-String übergeben hast.

Versuch es zunächst einmal mit einem händischen SQl-String, ohne Where-Clause. Dann schaust du, ob du eventuell die Quotes doppeln musst, damit der Feldinhalt des Where-Teils eingeschlossen ist.

Viele Grüße 
derHöpp

Alternativ kannst du mal den Tabellennamen und den Punkt vor dem Feldnamen weglassen. Bei einer Einzeltabelle ist der nicht nötig.
[-] Folgende(r) 1 Nutzer sagt Danke an derHoepp für diesen Beitrag:
  • JuergenRa
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste