80014e40 fout

Status
Niet open voor verdere reacties.

Tonyony

Gebruiker
Lid geworden
9 feb 2017
Berichten
47
Hallo,

Ik werk al 10 jaar met een bepaalde database (gebouwd in 2002 versie, nu draaiend op 2010) zonder problemen. Plotseling verschijnt er een 80014e40 foutmelding bij het selecteren van een jaartal uit de uitklaplijst.

"Microsoft Visual Basic
Fout -2147217900 (80040e14) tijdens uitvoering:
De instructie UPDATE bevat een syntaxisfout."

Bij de foutopsporing zie ik de volgende tekst:

DoCmd.DoMenuItem acFormBar, acRecordsMenu, acSaveRecord, , acMenuVer70
Me.Refresh
adocmd.Execute[/COLOR]
End If
adorst.Close

waarin adocmd.Execute. als fout wordt aangemerkt.
Wat gaat er mis?
Alvast dank om mee te denken
Tony

Voor de volledigheid de volledige tekst:

Code:
[I]Option Compare Database
Dim blnInsert As Boolean
'Dim blnChangedByUser As Boolean
'Private Sub cmbGemeente_Change()

Private Sub cmbJaar_AfterUpdate()


    Dim adorst As ADODB.Recordset
    Dim adocmd As New ADODB.Command
    Set adorst = New ADODB.Recordset
    adorst.Open "SELECT tblJaarMaand.intJaarId FROM tblJaarMaand WHERE (((tblJaarMaand.idsJaarMaandId)=" + CStr(txtMaand.Value) + "));", CurrentProject.Connection, adOpenStatic
    If CInt(cmbJaar.Value) <> adorst("intJaarId").Value Then
        Set adocmd.ActiveConnection = CurrentProject.Connection
        adorst.Close
        adorst.Open "SELECT tblJaarMaand.idsJaarMaandId FROM tblJaarMaand WHERE (((tblJaarMaand.intJaarId)=" + CStr(cmbJaar.Value) + ") AND ((tblJaarMaand.intMaandId)=" + CStr(cmbMaand.Value) + "));", CurrentProject.Connection, adOpenStatic
        adocmd.CommandText = "UPDATE tblFirma SET tblFirma.intMaandId=" + CStr(adorst("idsJaarMaandId").Value) + " WHERE (((tblFirma.idsFirmaId)=" + CStr(Form_frmFirmalijst.cmbFirma.Value) + "));"
        DoCmd.DoMenuItem acFormBar, acRecordsMenu, acSaveRecord, , acMenuVer70
        Me.Refresh
        adocmd.Execute
    End If
    adorst.Close
    
End Sub
Private Sub cmbMaand_AfterUpdate()


    Dim adorst As ADODB.Recordset
    Dim adocmd As New ADODB.Command
    Set adorst = New ADODB.Recordset
    adorst.Open "SELECT tblJaarMaand.intMaandId FROM tblJaarMaand WHERE (((tblJaarMaand.idsJaarMaandId)=" + CStr(txtMaand.Value) + "));", CurrentProject.Connection, adOpenStatic
    If CInt(cmbMaand.Value) <> adorst("intMaandId").Value Then
        Set adocmd.ActiveConnection = CurrentProject.Connection
        adorst.Close
        adorst.Open "SELECT tblJaarMaand.idsJaarMaandId FROM tblJaarMaand WHERE (((tblJaarMaand.intJaarId)=" + CStr(cmbJaar.Value) + ") AND ((tblJaarMaand.intMaandId)=" + CStr(cmbMaand.Value) + "));", CurrentProject.Connection, adOpenStatic
        adocmd.CommandText = "UPDATE tblFirma SET tblFirma.intMaandId=" + CStr(adorst("idsJaarMaandId").Value) + " WHERE (((tblFirma.idsFirmaId)=" + CStr(Form_frmFirmalijst.cmbFirma.Value) + "));"
        DoCmd.DoMenuItem acFormBar, acRecordsMenu, acSaveRecord, , acMenuVer70
        Me.Refresh
        adocmd.Execute
    End If
    adorst.Close
    
End Sub
  
 '   If blnChangedByUser = False Then
 '       blnChangedByUser = True
 '       cmbPostcode.SetFocus
 '       cmbPostcode.ListIndex = cmbGemeente.ListIndex
 '       blnChangedByUser = False
 '   End If
    
'End Sub
'Private Sub cmbPostcode_Change()
    
    
 '   If blnChangedByUser = False Then
 '      blnChangedByUser = True
 '      cmbGemeente.SetFocus
 '      cmbGemeente.ListIndex = cmbPostcode.ListIndex
 '      blnChangedByUser = False
 '   End If

'End Sub
Private Sub cmdVerwijderen_Click()
On Error GoTo Err_cmdVerwijderen_Click

    
    Dim intFirmaId As Integer
    Dim strFirmanaam As String
    Dim adorst As ADODB.Recordset
    Set adorst = New ADODB.Recordset
    Dim varMsgBoxResult As vbMsgBoxResult
    strSQL = "SELECT idsFirmaId, FIRMANAAM FROM tblFirma WHERE idsFirmaId=" & CInt(Form_fsubProduct.intFirmaId)
    adorst.Open strSQL, CurrentProject.Connection, adOpenStatic
    'adorst.Open "SELECT FIRMANAAM FROM tblFirma WHERE tblFirma.idsFirmaId=" + Form_frmFirmalijst.cmbFirma + ";", CurrentProject.Connection, adOpenStatic
    If adorst.BOF = False Then
        intFirmaId = adorst("idsFirmaId").Value
        If adorst("FIRMANAAM").Value <> "" Then
            strFirmanaam = UCase(adorst("FIRMANAAM").Value)
        Else
            strFirmanaam = "NAAMLOOS"
        End If
    End If
    adorst.Close
    varMsgBoxResult = MsgBox("Weet u zeker dat u firma " + strFirmanaam + " wilt verwijderen?", vbYesNo + vbExclamation, "Firmalijst")
    If varMsgBoxResult = vbYes Then
        Dim adocmd As New ADODB.Command
        Set adocmd.ActiveConnection = CurrentProject.Connection
        strSQL = "DELETE * FROM tblFirmaProduct WHERE tblFirmaProduct.intFirmaId=" & intFirmaId
        adocmd.CommandText = strSQL
        'adocmd.CommandText = "DELETE * FROM tblFirmaProduct WHERE (((tblFirmaProduct.intFirmaId)=" + Form_frmFirmalijst.cmbFirma + "));"
        adocmd.Execute
        strSQL = "DELETE * FROM tblFirma WHERE tblFirma.idsFirmaId=" & intFirmaId
        adocmd.CommandText = strSQL
        'adocmd.CommandText = "DELETE * FROM tblFirma WHERE (((tblFirma.idsFirmaId)=" + Form_frmFirmalijst.cmbFirma + "));"
        adocmd.Execute
        Form_frmFirmalijst.cmbFirma.Requery
        Form_frmFirmalijst.cmbFirma.SetFocus
        Form_frmFirmalijst.cmbFirma.ListIndex = 0
    End If
    
Exit_cmdVerwijderen_Click:
    Exit Sub

Err_cmdVerwijderen_Click:
    MsgBox Err.Description
    Resume Exit_cmdVerwijderen_Click
    
End Sub
Private Sub FIRMANAAM_AfterUpdate()
    
    
    If blnInsert = True Then
        DoCmd.DoMenuItem acFormBar, acRecordsMenu, acSaveRecord, , acMenuVer70
        Form_frmFirmalijst.cmbFirma.Requery
        Form_frmFirmalijst.cmbFirma.SetFocus
        Form_frmFirmalijst.cmbFirma.Text = FIRMANAAM.Value
        Form_frmFirmalijst.fsubFirma.SetFocus
        SendKeys "{Tab}"
        Form_fsubFirma.Requery
        'Form_fsubProduct.Requery
        Form_frmProduct.Productdetail.Requery
        blnInsert = False
    Else
        Form_frmFirmalijst.Refresh
   End If

End Sub
Private Sub Form_BeforeInsert(Cancel As Integer)


    blnInsert = True
 
End Sub
Private Sub Form_Current()
    
    
    If txtMaand.Value <> "" Then
        Dim adorst As ADODB.Recordset
        Set adorst = New ADODB.Recordset
        adorst.Open "SELECT tblJaar.idsJaarId, tblMaand.idsMaandId FROM tblMaand INNER JOIN (tblJaar INNER JOIN tblJaarMaand ON tblJaar.idsJaarId = tblJaarMaand.intJaarId) ON tblMaand.idsMaandId = tblJaarMaand.intMaandId WHERE (((tblJaarMaand.idsJaarMaandId)=" + CStr(txtMaand.Value) + "));", CurrentProject.Connection, adOpenStatic
        cmbJaar = adorst("idsJaarId").Value
        cmbMaand = adorst("idsMaandId").Value
        adorst.Close
        Form_frmFirmalijst.cmbFirma.SetFocus
    End If

End Sub
Private Sub Form_Load()
    
    
    blnInsert = False
    'blnChangedByUser = False
    
End Sub
Private Sub cmdToevoegen_Click()
On Error GoTo Err_cmdToevoegen_Click


    Dim adorst As ADODB.Recordset
    Dim adocmd As New ADODB.Command
    Set adorst = New ADODB.Recordset
    Set adocmd.ActiveConnection = CurrentProject.Connection
    adorst.Open "SELECT tblJaarMaand.idsJaarMaandId FROM tblMaand INNER JOIN (tblJaar INNER JOIN tblJaarMaand ON tblJaar.idsJaarId = tblJaarMaand.intJaarId) ON tblMaand.idsMaandId = tblJaarMaand.intMaandId WHERE (((tblJaar.chrJaartal)=Year(Date())) AND ((tblMaand.chrMaandNaam)=MonthName(Month(Date()))));", CurrentProject.Connection, adOpenStatic
    adocmd.CommandText = "INSERT INTO tblFirma (intMaandId) VALUES(" & adorst("idsJaarMaandId").Value & ");"
    adocmd.Execute
    adorst.Close
    Form_frmFirmalijst.cmbFirma.Requery
    adorst.Open "SELECT LAST(idsFirmaId) As NewFirmaId FROM tblFirma;", CurrentProject.Connection, adOpenStatic
    Form_frmFirmalijst.cmbFirma.Value = adorst("NewFirmaId").Value
    adorst.Close
    Form_fsubFirma.Requery
    Form_fsubProduct.Requery
    'Form_frmProduct.Productdetail.Requery
    Form_frmFirmalijst.fsubFirma.SetFocus
    FIRMANAAM.SetFocus
    
Exit_cmdToevoegen_Click:
    Exit Sub

Err_cmdToevoegen_Click:
    MsgBox Err.Description
    Resume Exit_cmdToevoegen_Click
    
End Sub
[/I]
 
Laatst bewerkt:
Welkom bij HelpMij! eerste opmerking is een klein 'standje': doe ons een lol en pas je bericht aan; voor code hebben we een aparte CODE knop (knop met #) en die is juist bedoeld om te voorkomen dat een berichtje 6 meter lang wordt :). Dus als je het bericht wilt aanpassen en de code alsnog op wilt maken op de juiste manier, dan help je ons daar ook weer mee. De foutmelding lijkt logisch overigens; ik ken geen commando adocmd. Wél een commando DoCmd. Wellicht is er een a-tje bijgeslopen.
 
vervolgfout

Bedankt OctaFish voor de reactie.
Ik heb de code in CODE gezet. Scheelt inderdaad veel ruimte. :)

Ook heb ik de a voor doCmd weggehaald en nu verschijnt er een andere foutmelding.
(Deze verschijnt bij het selecteren van een jaartal uit een uitklaplijst).

De expressie Na bijwerken die u hebt opgegeven als de instelling voor de gebeurteniseigenschap, heeft de volgende fout veroorzaakt: Kan de methode of het gegevenslid niet vinden.
* De expressie geeft niet de naam van een macro, de naam van een door de gebruiker gedefinieerde functie of een [Gebeurtenisprocedure] als resultaat.
* Er is een fout opgetreden bij het evalueren van een functie, gebeurtenis of macro.
Deze fout treedt op als een gebeurtenis niet is uitgevoerd omdat de locatie van de logica voor de gebeurtenis niet juist kan worden geïnterpreteerd. Een voorbeeld: als de eigenschap Bij openen van een formulier is ingesteld op =[Veld], doet deze fout zich voor omdat hier de naam van een macro of gebeurtenis wordt verwacht die wordt uitgevoerd wanneer de gebeurtenis zich voordoet.


Het is een heel oude database maar hij heeft altijd gewerkt. Het maken is inmiddels zo lang geleden (10 jaar?) dat ik niet meer weet hoe het precies zat.

Hopelijk heeft u goede raad?
 
Hebben we het hier over een niet=gebonden formulier omdat je continue recordsets opent en sluit? Of kan het formulier gewoon aan een tabel worden gekoppeld?
 
Bij mijn weten zit het gekoppeld aan meerdere tabellen.
Accessdatabase.jpg
Ik krijg nu bij elke klik die ik doe de eerder genoemde melding.

De expressie Na bijwerken die u hebt opgegeven als de instelling voor de gebeurteniseigenschap, heeft de volgende fout veroorzaakt: Kan de methode of het gegevenslid niet vinden.
* De expressie geeft niet de naam van een macro, de naam van een door de gebruiker gedefinieerde functie of een [Gebeurtenisprocedure] als resultaat.
* Er is een fout opgetreden bij het evalueren van een functie, gebeurtenis of macro.
Deze fout treedt op als een gebeurtenis niet is uitgevoerd omdat de locatie van de logica voor de gebeurtenis niet juist kan worden geïnterpreteerd. Een voorbeeld: als de eigenschap Bij openen van een formulier is ingesteld op =[Veld], doet deze fout zich voor omdat hier de naam van een macro of gebeurtenis wordt verwacht die wordt uitgevoerd wanneer de gebeurtenis zich voordoet.

Alle datavelden lijken nu ook leeg te zijn.
Heel vreemd allemaal
 
Dat plaatje geeft alleen de objecten weer; het gaat mij om het specifieke formulier met het probleem. Daarvoor moet je in de Ontwerpmodus zijn en naar de Eigenschappen van het formulier kijken, tabblad <Gegegevens>.
 
Beste OctaFish,

Bedankt om zo mee te denken. Door weekenddrukte kon ik niet eerder antwoorden.

Ik heb afbeelding bijgevoegd van het hoofdformulier. Momenteel geeft hij bij elke klik of letterinvoer dezelfde foutmelding.
Valt mij in tabblad gegevens op dat de recordbron leeg is. Is dat misschien het probleem?

Ik hoor graag van je.
Formulier-access.jpg
 
D'r zit inderdaad geen tabel of query onder het formulier. Jammer genoeg is het plaatje niet erg goed leesbaar (persoonlijk haat ik de rasterlijnen in de ontwerpweergave; zet ik altijd als eerste uit in een nieuwe versie). De objecten op het hoofdformulier zijn dan uiteraard niet-gebonden en doen verder niks.
 
OK. Ik heb de Query Firmalijst weer gekoppeld. Die was er blijkbaar van los geraakt.
Nu blijf ik alleen nog het probleem houden dat ik geen jaartal kan selecteren.
Dan krijg ik de melding: Compileerfout. Kan de methode of het gegevenslid niet vinden.
Bij foutopsporing staat Private Sub cmbJaar_AfterUpdate() aangegeven als probleem.
 
Ik zie die keuzelijst niet; waar staat die? En welke code hangt daar achter?
 
Bedankt weer voor je reactie. Ben er echt blij mee, omdat ik denk dat we dichterbij de oplossing komen.
Het probleem is gekomen toen ik door de jaartallen heen was.
Ik heb in tabel jaar (tbljaar) nieuwe records met jaartallen toegevoegd.
tabel jaar.jpg
tabel maand.jpg
En in tblJaarMaand de volgende gegevens:
Code:
idsJaarMaandId	intJaarId	intMaandId
37	4	1
38	4	2
39	4	3
40	4	4
41	4	5
42	4	6
43	4	7
44	4	8
45	4	9
46	4	10
47	4	11
48	4	12
49	5	1
50	5	2
51	5	3
52	5	4
53	5	5
54	5	6
55	5	7
56	5	8
57	5	9
58	5	10
59	5	11
60	5	12
61	6	1
62	6	2
63	6	3
64	6	4
65	6	5
66	6	6
67	6	7
68	6	8
69	6	9
70	6	10
71	6	11
72	6	12
73	7	1
74	7	2
75	7	3
76	7	4
77	7	5
78	7	6
79	7	7
80	7	8
81	7	9
82	7	10
83	7	11
84	7	12
85	8	1
86	8	2
87	8	3
88	8	4
89	8	5
90	8	6
91	8	7
92	8	8
93	8	9
94	8	10
95	8	11
96	8	12
97	9	1
98	9	2
99	9	3
100	9	4
101	9	5
102	9	6
103	9	7
104	9	8
105	9	9
106	9	10
107	9	11
108	9	12
109	10	1
110	10	2
111	10	3
112	10	4
113	10	5
114	10	6
115	10	7
116	10	8
117	10	9
118	10	10
119	10	11
120	10	12
121	11	1
122	11	2
123	11	3
124	11	4
125	11	5
126	11	6
127	11	7
128	11	8
129	11	9
130	11	10
131	11	11
132	11	12
133	12	1
134	12	2
135	12	3
136	12	4
137	12	5
138	12	6
139	12	7
140	12	8
141	12	9
142	12	10
143	12	11
144	12	12
145	15	1
146	15	2
147	15	3
148	15	4
149	15	5
150	15	6
151	15	7
152	15	8
153	15	9
154	15	10
155	15	11
156	15	12
157	16	1
158	16	2
159	16	3
160	16	4
161	16	5
162	16	6
163	16	7
164	16	8
165	16	9
166	16	10
167	16	11
168	16	12
169	17	1
170	17	2
171	17	3
172	17	4
173	17	5
174	17	6
175	17	7
176	17	8
177	17	9
178	17	10
179	17	11
180	17	12
181	18	1
182	18	2
183	18	3
184	18	4
185	18	5
186	18	6
187	18	7
188	18	8
189	18	9
190	18	10
191	18	11
192	18	12
193	19	1
194	19	2
195	19	3
196	19	4
197	19	5
198	19	6
199	19	7
200	19	8
201	19	9
202	19	10
203	19	11
204	19	12
205	20	1
206	20	2
207	20	3
208	20	4
209	20	5
210	20	6
211	20	7
212	20	8
213	20	9
214	20	10
215	20	11
216	20	12

Daar gaat ergens iets fout.
Enig idee?
 
Waarom gebruik je deze methode? Ik heb nog nooit een tabel met jaren en maanden nodig gehad, en ik snap niet dat ik ze om de haverklap tegenkom op HelpMij.
 
Ik gebruik die voor het inschrijven van nieuwe documentatie.
Zo weten we in welke maand van welk jaar de documentatie is binnen gebracht.
Is voor ons nuttig en heeft altijd goed gewerkt tot we door onze jaartallen heen waren.
 
Met een datumveld heb je veel meer gegevens (Jaar, maand, kwartaal, dag) én het is veel makkelijker invoeren. Dus óók in welk jaar en welke maand iets is ingevoerd. En je raakt nooit door de datums heen, tenzij de wereld vergaat natuurlijk. Ik snap het echt niet....
 
Ok. Klinkt logisch. Maar wat doe ik nu? Database ombouwen met datumveld of is er een manier om database te herstellen naar de maand en jaarvelden?
 
Ik zou 'm ombouwen. Dus een datumveld erbij, en alle oude records vullen met een datum op basis van het jaartal, de maand en dagnr 1. Of, als je dat niet realistisch vind, met de eerste maandag van de maand. Als de db nog een goede levenscyclus heeft, dus voorlopig nog wel even mee moet, is dat de handigste optie. Kun je hem wellicht ook upgraden naar een nieuwere Office versie.
 
Ok. Bedankt weer voor het advies. Ombouwen zou ik kunnen proberen. (Zoals eerder gezegd ben ik er een beetje uit).
Maar is er ook een mogelijkheid om het oude systeem weer aan de praat te krijgen? Dus met jaartalveld?

Er zitten namelijk nog rare dingen in.
Zo is er een knop om een nieuw record aan te maken. Wanneer ik deze selecteer krijg ik de melding: De instructie INSERT INTO bevat een syntaxisfout.
Wanneer ik bij eigenschappen kijk staat er
* opdrachtknop: cmdToevoegen
* bij klikken [gebeurtenisprocedure].
Wanneer ik venstertje uitklap zijn er vier mogelijkheden mcrFirma, mcrFirmalijst, mcrMaximaliseer, mcrZeken
Hoe kan ik achterhalen wat de syntaxisfout is. Bij foutopsporing zie ik geen melding?
Sorry voor al de vragen, maar ik zit wat vast.
 
Laatst bewerkt:
Een gebeurtenis is geen macro, en je hebt blijkbaar de Macro lijst opengeklikt. Je moet op de knop met 3 puntjes klikken om bij de gebeurtenis te komen.
 
OK. Wanneer ik op de puntjes klik verschijnt er de volgende code
Code:
Option Compare Database
Private Sub cmdAfdrukvoorbeeld_rapport_Click()
On Error GoTo Err_cmdAfdrukvoorbeeld_rapport_Click


    Dim stDocName As String

    Select Case grpAfdrukFirmalijst.Value
    Case 1:
        txtQryParameter = Form_fsubFirma.FIRMANAAM.Value
        txtRptParameter = txtQryParameter
    Case 2:
        txtRptParameter = UCase(InputBox("Eerste letter:", "Afdruk Firmalijst: ABC"))
        txtQryParameter = txtRptParameter & "*"
    Case 3:
        txtQryParameter = "*"
        txtRptParameter = "A-Z"
    End Select
    
    DoCmd.Minimize
    stDocName = "rptProductenPerFirma"
    DoCmd.OpenReport stDocName, acPreview
    DoCmd.RunCommand acCmdZoom100

Exit_cmdAfdrukvoorbeeld_rapport_Click:
    Exit Sub

Err_cmdAfdrukvoorbeeld_rapport_Click:
    MsgBox Err.Description
    Resume Exit_cmdAfdrukvoorbeeld_rapport_Click
    
End Sub
Private Sub Form_Load()


    cmbFirma.SetFocus
    cmbFirma.ListIndex = 0
    
End Sub
Private Sub cmdAfsluiten_Click()
On Error GoTo Err_cmdAfsluiten_Click


    DoCmd.Quit

Exit_cmdAfsluiten_Click:
    Exit Sub

Err_cmdAfsluiten_Click:
    MsgBox Err.Description
    Resume Exit_cmdAfsluiten_Click
    
End Sub
Private Sub cmdZoeken_Click()
On Error GoTo Err_cmdZoeken_Click


    Dim stDocName As String
    Dim stLinkCriteria As String

    stDocName = "frmZoeken"
    DoCmd.OpenForm stDocName, , , stLinkCriteria

Exit_cmdZoeken_Click:
    Exit Sub

Err_cmdZoeken_Click:
    MsgBox Err.Description
    Resume Exit_cmdZoeken_Click
    
End Sub

Private Sub fsubFirma_Enter()

End Sub
Zoals eerder gezegd doet deze knop normaal een leeg nieuwe record openen.
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan