PDA

Vollständige Version anzeigen : Parameterübergabe bei Public Sub


Sandrine
27.06.2001, 13:23
Hallo Zusammen,

wenn ich nochmal auf Eure qualifizierte Hilfe zurückgreifen dürfte?

Ich möchte eine Public Sub schreiben, die den Inhalt eines ungebundenen Textfeldes checkt und entsprechend die recordsource des Formulars ändert, inclusive entsprechender Fehlermeldungen. Klappt auch als private Sub im Formular.

Als Public gibt es aber irgendwie Probleme bei der Übergabe der Parameter, die Parameter scheinen nicht als Steuerelement bzw. Formularname, sondern als String gelesen zu werden.

Habe ich da wieder irgendeine Kleinigkeit übersehen, oder ist der Fehler diesmal größer?


Public Sub AZ_Prüfung(textfeld As String, formname As String)
Dim db As Database
Dim rs As Recordset
Dim OK As Boolean

If IsNull(textfeld) Then
MsgBox ("Sie haben kein Aktenzeichen eingegeben!")
Else
Set db = CurrentDb
Set rs = db.OpenRecordset("test", dbOpenDynaset)
rs.FindFirst "geschäftszeichen='" & textfeld & "'"
OK = rs.NoMatch
If OK = False Then
Forms!formname.RecordSource = "SELECT [Daten ASt +Bearbeiter].* FROM [Daten ASt +Bearbeiter]WHERE ((([Daten ASt +Bearbeiter].Geschäftszeichen)= " & Chr(34) & Forms!formname.textfeld.Value & Chr(34) & "));"
Forms!formname.Requery
Else
MsgBox "Das eingegebene Aktenzeichen " & vbCrLf & vbCrLf & textfeld & vbCrLf & vbCrLf & "existiert nicht!" & vbCrLf & vbCrLf & "Prüfen Sie, ob Sie sich vertippt haben" & vbCrLf & "oder geben Sie ein anderes Aktenzeichen ein!", 48, "Fehlermeldung"
End If
rs.Close
Set db = Nothing
End If
End Sub

Aufruf der Public Sub:
Private Sub daten_übernehmen_Click()
Call AZ_Prüfung(AZ_Eingabe, "oeg_1-1Krankenkasse")
End Sub

Die Fehlermeldung sagt, das Formular Formname wird nicht gefunden, die Zeile forms!formname.recordsource... wird markiert

Vielen Dank schon mal im Voraus!

Kurt aus Kienitz
27.06.2001, 13:32
Hallo,

Das liegt tatsächlich daran, das der Parameter formname ein String ist.

Probier es doch mal so:

Forms(formname).RecorsSource = ...
Forms(formname).Requery

Sandrine
27.06.2001, 13:35
Klappt leider nicht, die Fehlermeldung bleibt die gleiche...

Morli
27.06.2001, 13:54
Hallo Sandrine,

Kurt hat trotzdem zum Teil recht. Du mußt allerdings vor der Zuweisung der RecourdSource das Formular öffnen, sonst kannst Du nicht darauf zugreifen.

DoCmd.OpenForm formname
Forms(formname).RecordSource = u.s.w.

Dann geht's sicher.... ;)

Gruß

Rainer :rolleyes:

Sandrine
27.06.2001, 14:00
Das Formular ist offen, das Textfeld steht im Formularkopf, die Schaltfläche auch, von da aus wird die Prozedur aufgerufen. Ich probiere es trotzdem heute abend nochmal so aus, muß jetzt zum Zweitjob "Mama".

Danke fürs erste!

Gruß, Sandrine

Sandrine
27.06.2001, 20:57
hallo Rainer,

habs nochmal mit OpenForm versucht, Fehlermeldung bleibt die selbe, hab ich ja schon vermutet, denn das Formular ist ja offen...
Hat denn noch irgendjemand eine Idee? Scheint diesmal ja doch etwas komplizierter zu sein.

Gruß, Sandrine

Scorefun
27.06.2001, 21:28
hast Du neben dem Tip vom Kurt:

forms(formularname).recordsource
forms(formularname).requery

auch den SQL-String dazwischen geaendert ?

forms(formularname)(textfeld).value

Sandrine
28.06.2001, 06:25
Danke Ralf,

das hatte ich wirklich nicht geändert. Scheint auch richtig gewesen zu sein, denn die bisherige Fehlermeldung ist weg, dafür aber eine neue: wieder in der selben Zeile, Laufzeitfehler 2465, anwendungs- oder objektdefinierter Fehler.

WAG
28.06.2001, 09:06
Hi,
versuchs mal so

Call AZ_Prüfung(AZ_Eingabe,Me)

Public Sub AZ_Prüfung(textfeld As Control, formname As Form)

formname.RecordSource = "SELECT....Chr(34) & textfeld & Chr(34) ..."
formname.Requery

Dieter

Kurt aus Kienitz
28.06.2001, 12:12
Hallo auch,

Ist Dein Problem noch immer nicht gelöst :(

Also nochmal :)

Wenn Du die RecordSource ändern möchtest, dann so:

Forms(formname).Form.RecordSource

Wenn Du auf das Textfeld zugreifen möchtest, dann so:

Forms(formname).Controls(textfeld)

Wenn daß so wider nicht klappt :confused: , dann schick mir mal Deine DB (im A97-Format).

HTH

Scorefun
28.06.2001, 19:31
neuer Versuch:

Public Sub AZ_Prüfung(textfeld As String, formname As String)

....
Forms(formname).RecordSource = "SELECT [Daten ASt +Bearbeiter].* FROM [Daten ASt +Bearbeiter]WHERE ((([Daten ASt +Bearbeiter].Geschäftszeichen)= '" & textfeld & "'));"
Forms(formname).Requery
....

if isnull(textfeld)
wird wohl nicht funktionieren, da String-Variable keinen Nullwert enthalten koennen.
Wenn hoechstens:

if len(textfeld) = 0 then
...
end if


Happy Testing und let me know.

Sandrine
29.06.2001, 07:13
Hallo zusammen, hab jetzt nochmal getestet, mit dem Vorschlag von WAG hats geklappt, es lag also an der Definiion der Parameter als String, mit Control bzw. Form funktionierts!

Ich dachte schon, ich muß das wirklich in alle Formulare einzeln reinkopieren, so ists natürlich viel eleganter!

@ Ralf
if isnull(textfeld)
wird wohl nicht funktionieren, da String-Variable keinen Nullwert enthalten koennen.
Wenn hoechstens:

if len(textfeld) = 0 then
...
end if

Doch das hat so funktioniert, inwzischen sowohl als private als auch als public sub, fallls es da nochmal probleme geben sollte, werde ich die Version aber im Auge behalten.

Also vielen Dank für Eure Rettungsversuche und bis zum nächsten Mal!