Ik heb een wat vreemd probleem dat ik nooit eerder ben tegengekomen; ik ben een functie aan het maken die alle controls op een (gekozen) form en die een bepaalde eigenschap in een recordset zet, in VBA, maar als ik de db converteer naar een MDE krijg ik bij het aanroepen van één van de functies deze melding:
Eror 7802: deze opdracht is niet beschikbaar in een mde/ade-database
Mijn errorafhandeling geeft ook aan in welke functie het misgaat. Maar aangezien het een MDE is is het niet mogelijk om de error op te sporen met de debug. Ik zou de error kunnen ondervangen in de code, maar dan werkt de functie niet. Ik kan er niet achter komen welke onderdeel van de VBA deze error oplevert.
Wat deze code doet nogmaals: hij vult een recordset (in het geheugen) met records uit een tabel indien die aan bepaalde voorwaarden voldoen. Deze recordset wordt gekoppeld aan een listbox-control op een form. Deze specifieke code zit in het form zelf (dus geen module)
Dit is de code:
De code die de recordset in het geheugen klaarzet:
Het enige "exotische" aan deze code lijkt me het gebruik van een "virtuele" tabel en deze te koppelen aan een control, maar voor ik alles ga ombouwen is er misschien iemand die er iets zinnings over kan zeggen?
edit: als ik regel 19 en 91 uitschakel (roept de virtuele tabel aan en koppelt deze aan de control) krijg ik nog steeds exact dezelfde foutmelding. Natuurlijk werkt heel de functie dan niet meer, maar als ie misging op het gemis van die 2 regels zou ik toch een andere error mogen verwachten...
Lijkt dus niet hier in te zitten?
Eror 7802: deze opdracht is niet beschikbaar in een mde/ade-database
Mijn errorafhandeling geeft ook aan in welke functie het misgaat. Maar aangezien het een MDE is is het niet mogelijk om de error op te sporen met de debug. Ik zou de error kunnen ondervangen in de code, maar dan werkt de functie niet. Ik kan er niet achter komen welke onderdeel van de VBA deze error oplevert.
Wat deze code doet nogmaals: hij vult een recordset (in het geheugen) met records uit een tabel indien die aan bepaalde voorwaarden voldoen. Deze recordset wordt gekoppeld aan een listbox-control op een form. Deze specifieke code zit in het form zelf (dus geen module)
Dit is de code:
Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
| If Not DisableErrorhandling Then On Error GoTo Err_Handler Dim Ctl As Control Dim frm As String Dim obj As AccessObject Set dbs = Application.CurrentProject Dim RST_Autorisation As Recordset Dim STR_Filter As String Create_RST_Ctls Dim Row As Variant Set Ctl = Me!combo_forms For Each Row In Ctl.ItemsSelected frm = Ctl.Column(1, Row) Next Row Set Ctl = Nothing Set RST_Autorisation = CurrentDb.OpenRecordset("SELECT * FROM tbl_autorisation WHERE frmName='" & frm & "'") For Each obj In dbs.AllForms If obj.Name = frm Then If Not obj.Name = Me.Name Then DoCmd.OpenForm obj.Name, acDesign, , , acFormReadOnly, acHidden End If For Each Ctl In Forms(obj.Name) Select Case Ctl.ControlType Case acListBox, acComboBox, acTextBox, acOptionGroup, acCheckBox, acCommandButton, acToggleButton, acSubform 'Debug.Print obj.Name & " | " & Ctl.Name & " | " & Ctl.ControlType 'Debug.Print Ctl.Name If Ctl.tag Like "*Autorisation*" Then 'controls met een tag "Autorisation" worden opgenomen in de controlslijst RST_Ctls.AddNew STR_Filter = "CtlName = '" & Ctl.Name & "'" 'afhankelijk van keuze group of user het filter samenstellen _ dat gebruikt wordt om de lijst voor users of groups samen te stellen If Me!OptionGroup = 1 Then STR_Filter = STR_Filter & " and GroupID = '" & Me!Combo_Groups_Users & "'" ElseIf Me!OptionGroup = 2 Then STR_Filter = STR_Filter & " and UserID = '" & Me!Combo_Groups_Users & "'" End If If Not RST_Autorisation.RecordCount = 0 Then RST_Autorisation.FindFirst STR_Filter If Not RST_Autorisation.NoMatch Then 'weergeven of de betreffende control gelocked is (X) vrijgegeven met Override (O) of niet gelocked (-) 'Debug.Print RST_Autorisation!AutorisationType If RST_Autorisation!AutorisationType = "O" Then RST_Ctls!ctl_Autorisation = "O" Else RST_Ctls!ctl_Autorisation = "X" End If RST_Ctls!AutorisationID = RST_Autorisation!AutorisationID Else RST_Ctls!ctl_Autorisation = "-" RST_Ctls!AutorisationID = 0 End If End If RST_Ctls!Ctl_Name = Ctl.Name 'ONDERSTAAND WERKT ALLEEN VOOR BUTTONS en andere controls met een CAPTION!!! If Not Ctl.ControlTipText = "" And Len(Ctl.ControlTipText) < 25 Then 'de controltiptext van een control wordt overgenomen als _ 'duidelijk leesbare naam (dus niet het controlnaam) van een control indien ingevuld 'Debug.Print Ctl.Name & " " & Ctl.ControlTipText RST_Ctls!ctl_Controltiptext = Ctl.ControlTipText ElseIf Ctl.ControlType = acCommandButton Or Ctl.ControlType = acToggleButton Then If Not Ctl.Caption = "" And Len(Ctl.Caption) < 25 Then 'de caption van een control wordt overgenomen als _ 'duidelijk leesbare naam (dus niet het controlnaam) van een control indien ingevuld 'Debug.Print Ctl.Name & " " & Ctl.Caption RST_Ctls!ctl_Controltiptext = Ctl.Caption End If Else RST_Ctls!ctl_Controltiptext = CStr(Ctl.Name) End If 'RST_Ctls.Sort = "Ctl_name ASC" RST_Ctls.Update 'Debug.Print ctl.Name End If Case Else End Select Next Ctl End If Next obj RST_Ctls.Sort = "Ctl_name ASC" Set Me!combo_controls.Recordset = RST_Ctls Exit_Handler: RST_Ctls.Close RST_Autorisation.Close Exit Sub Err_Handler: Call LogError(Err.Number, Err.Description, conMod & ".Show_FrmControls") Resume Exit_Handler End Sub |
De code die de recordset in het geheugen klaarzet:
Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
| Public Sub Create_RST_Ctls() If Not DisableErrorhandling Then On Error GoTo Err_Handler Dim Fld As ADODB.Field Set RST_Ctls = New ADODB.Recordset With RST_Ctls .Fields.Append "AutorisationID", adBigInt, 1, adFldIsNullable .Fields.Append "Ctl_Name", adVarChar, 25 .Fields.Append "Ctl_ControlTipText", adVarChar, 50 .Fields.Append "Ctl_Autorisation", adVarChar, 1 .CursorLocation = adUseClient .LockType = adLockPessimistic .Open End With Exit_Handler: Exit Sub Err_Handler: Call LogError(Err.Number, Err.Description, conMod & ".Create_RST_Ctls") Resume Exit_Handler End Sub |
Het enige "exotische" aan deze code lijkt me het gebruik van een "virtuele" tabel en deze te koppelen aan een control, maar voor ik alles ga ombouwen is er misschien iemand die er iets zinnings over kan zeggen?
edit: als ik regel 19 en 91 uitschakel (roept de virtuele tabel aan en koppelt deze aan de control) krijg ik nog steeds exact dezelfde foutmelding. Natuurlijk werkt heel de functie dan niet meer, maar als ie misging op het gemis van die 2 regels zou ik toch een andere error mogen verwachten...
Lijkt dus niet hier in te zitten?