BASIC-Laufzeitfehler. Objektvariable nicht belegt

Programmierung unter AOO/LO (StarBasic, Python, Java, ...)

Moderator: Moderatoren

oliver1804
**
Beiträge: 39
Registriert: Fr, 27.11.2009 15:07

BASIC-Laufzeitfehler. Objektvariable nicht belegt

Beitrag von oliver1804 »

Hallo liebe Gemeinde,

ich benutze folgende Prozedur:

Code: Alles auswählen

Option Explicit

' bei INSERT, UPDATE und DELETE Ident ins Formular-ResultSet eintragen
Sub insert_into_ResultSet(Optional oForm as Object, sFormname as String, sResultfield as String, iKz as Integer)

	' iKz = 0: INSERT/UPDATE
	' iKz = 1: DELETE
	
	Dim nSp as Long

	If isMissing(oForm) Then	
		oForm = ThisComponent.drawpage.forms.getByName(sFormname)
	End If
	
	nSp = oForm.findColumn(sResultfield)
	oForm.updateString(nSp,iUserID)
	
	' vor dem DELETE erfolgt ein UPDATE
	If iKz = 1 Then
		oForm.upDateRow()
	End If

End Sub

, die ich (in diesem Fall) mittels

Code: Alles auswählen

Sub insupd_editorid

	insert_into_ResultSet(,"MainForm","id_staff_editor",0)

End Sub
aufrufe.

Weshalb bekomme ich nun die Fehlermeldung, obwohl ich doch das Argument als optional übergebe?

Danke für die Hilfe
Oliver
peterschleif
**
Beiträge: 34
Registriert: Fr, 06.11.2009 05:49

Re: BASIC-Laufzeitfehler. Objektvariable nicht belegt

Beitrag von peterschleif »

Hallo Oliver.

Du darfst optionalen Parametern keinen Datentyp zuweisen (außer Variant) sonst liefert IsMissing() immer False. Du müsstest den Datentyp also ganz weglassen oder Variant wählen.

Code: Alles auswählen

Sub insert_into_ResultSet(Optional oForm,            sFormname as String, sResultfield as String, iKz as Integer)
Sub insert_into_ResultSet(Optional oForm As Variant, sFormname as String, sResultfield as String, iKz as Integer)

Peter
Stephan
********
Beiträge: 12368
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: BASIC-Laufzeitfehler. Objektvariable nicht belegt

Beitrag von Stephan »

Weshalb bekomme ich nun die Fehlermeldung, obwohl ich doch das Argument als optional übergebe?
Bin ich mir auch nicht im Klaren.

Du könntest diesen Parameter aber wohl ans Ende der Paramerterliste stellen, dann sollte e funktionieren auch wenn Du ddeen nicht übergibst.

Du darfst optionalen Parametern keinen Datentyp zuweisen (außer Variant) sonst liefert IsMissing() immer False.
Für mich nicht nachvollziehbar. In folgendem Beispiel wird trotz DEklaration als String bei IsMissing() True geliefert:

Code: Alles auswählen

Sub Main
   Main2("a",)
End Sub

Sub Main2(x As String, Optional y As String)
Msgbox isMissing(y)
End Sub


Gruß
Stephan
peterschleif
**
Beiträge: 34
Registriert: Fr, 06.11.2009 05:49

Re: BASIC-Laufzeitfehler. Objektvariable nicht belegt

Beitrag von peterschleif »

Hallo Stefan.
Hallo Oliver.

Das stimmt. Bei Parametern am Ende der Liste geht es. Also entweder am Anfang lassen (ohne Typ bzw mit Variant) oder ans Ende setzen.
Gut zu wissen. :-)

Code: Alles auswählen

Sub Main
   Main2(,"a",)
End sub

Sub Main2(Optional w As String, x As String, Optional y As String)
	print isMissing(w), isMissing(y)
End Sub
Peter
Antworten