Hallo,
ich habe ein Problem mit der Eigenschaft "oldValue" in einem Formular.
Die RecordSource für dieses Formular ist eine Abfrage mit 2 Tabellen.
Immer dann wenn die Felder der 2. Tabelle mit oldValue angesprochen werden, kommt folgende Fehler-Meldung:
3251 - Operation wird für diesen Objekttyp nicht unterstützt.
Hier die Abfrage für die RecordSource:
SELECT tblArtikel.ARTNR, tblArtikel.Bezeichnung, tblArtikelStk.BruttoGewStk, tblArtikelStk.NettoGewStk
FROM tblArtikel LEFT JOIN tblArtikelStk ON tblArtikel.AArtNrStk = tblArtikelStk.ArtNrStk
WHERE (((tblArtikel.BARTNR)=[Forms]![frmArtikel]![BArtNr]) AND ((tblArtikel.ARTNR)=[Forms]![frmArtikel]![ArtNr]));
Hier der Code aus dem Before_Update Ereignis des Formulars:
Dim ctl As Control
40 With Me
...
...
...
160 For Each ctl In .Controls
170 If (ctl.ControlType = acTextBox Or ctl.ControlType = acCheckBox Or ctl.ControlType = acComboBox Or ctl.ControlType = acListBox Or ctl.ControlType = acOptionGroup) Then
180 If ctl.Enabled = True And ctl.Visible = True Then
190 If Ungleich(ctl.oldValue, ctl) Then
...
... ' Log-Eintrag erzeugen
...
250 End If
260 End If
270 End If
280 Next ctl
290 End With
Kann mir jemand weiterhelfen?
Vielen Dank im Vorraus !
190 If Ungleich(ctl.oldValue, ctl) Then
Ich kenne zwar die Funktion "Ungleich" nicht, aber der Vergleich von einem Steuerelement.Value mit einem Steuerelement wird wohl nicht gehen.
Hi,
was passiert, wenn Du
If Ungleich(ctl.oldValue, ctl.value) Then
verwendest?
Harald
Hallo Harald,
du hast natürlich Recht,
in der Zeile 190 muss nartürlich ctl.Value angesprochen werden.
Das ist aber nicht das Problem, sondern bei ctl.oldValue kommt die Fehlermeldung !
Gruß
Ferdinand
Was ist die Funktion Ungleich?
Wenn diese zwei Objekte auf Gleichheit vergleicht, dann ist sie ungeeignet, und es kann einfach mit
If ctl.oldValue <> ctl.value then
gearbeitet werden.
Hallo Wurliwurm,
hier die Funktion Ungleich:
Public Function Ungleich(varString1 As Variant, varString2 As Variant) As Boolean
Dim bolVergleich As Boolean
If Len(varString1) = 0 Or IsNull(varString1) Then
bolVergleich = (Len(varString2) = 0 Or IsNull(varString2))
Else
If Len(varString2) = 0 Or IsNull(Len(varString2)) Then
bolVergleich = False
Else
bolVergleich = (varString1 = varString2)
End If
End If
Ungleich = Not bolVergleich
End Function
Das Problem ist aber nicht der Vergleich, sondern der Ausdruck ctl.oldValue. Dieser löst den Fehler aus und zwar nur bei den Feldern aus der 2. Tabelle (tblArtikelStk)
Gruß
Ferdinand
Okay, dann vergleicht die Funktion Ungleich im Prinzip nur Strings.
170 If (ctl.ControlType = acTextBox Or ctl.ControlType = acCheckBox Or ctl.ControlType = acComboBox Or ctl.ControlType = acListBox Or ctl.ControlType = acOptionGroup) Then
...
190 If Ungleich(ctl.oldValue, ctl) Then
Hier werden Steuerelemente (also Objekte) eines Formulars durchlaufen und dann das Attribut oldValue ausgewertet. Wenn ein Steuerelement sich bei der If-Bedingung qualifiziert und anschließend oldValue benutzt wird, ohne daß das Steuerelement dieses Attribut hat, dann kommt zur Laufzeit natürlich ein Fehler. Dieser kann zur Kompilierungszeit noch nicht erkannt werden.
Stelle mal sicher, daß alle Steuerelementtypen oldValue kennen oder/und bei welchen Control der Fehler auftritt. Dazu würde ich folgendes einfügen vor der Zeile 190:
Debug.Print "ControlType: " & ctl.ControlType & ", Name: " & ctl.Name
Hi,
ich hatte mal einen ähnlichen Vergleich gemacht mit:
StrComp(Nz(ctl.OldValue), Nz(ctl.Value), 0)
Also mit nz, um Null-Werte zu berücksichtigen, und
mit StrComp als access-eigene Vergleichsoperation.
Vielleicht hilft Dir das.
Harald