VBA is goed, toch foutmelding

Status
Niet open voor verdere reacties.

gebruiker14

Gebruiker
Lid geworden
25 nov 2005
Berichten
7
Goedendag,

Als ik een VBA code heb gemaakt voor bv een kezeveld met invoervak, welke goed functioneerd, en ik ga verder rommelen met een code voor bv een ander keuzeveld heb ik al diverse keren meegemaakt dat ik een foutmelding krijg voor de reeds goed functionerende code. De foutmelding is "Fout 3070 tijdens uitvoering"

Als ik nu de functie en keuzeveld waar ik mee aan het rotzooien ben weer weg haal verwacht je dat de vorige code weer zou moeten werken. Dit is dus niet het geval en de foutmelding blijft komen.

Als ik de eerste functie weer in een nieuwe database toepas dan werkt deze weer gewoon.
De fout blijft dus in de database zitten en met de functie opschonen database blijft deze ook komen.

Is er nu een mogelijkheid om de database op te schonen zodat deze fout verdwijnt?
Of ben je dan echt genoodzaakt om je database opnieuw op te bouwen?

Ik hoop dat iemand hier een oplossing voor heeft.

Vriendelijke groet,
 
Laatst bewerkt:
Zonder verder je code gezien te hebben zou je eens kunnen proberen de default properties zoals text en caption expliciet te benoemen. Bijvoorbeeld cmb.text = "combobox tekst" of lbl.caption = "Naam en adres". Dit geld met name voor third party controls zoals het TrueDBGrid van Componentone maar ook de native controls. Wellicht helpt het.

Weest gegroet,
Guus
 
Euh, okay :o

Ik ben pas net begonnen in Access en van dit soort zaken heb ik nog niet echt veel kaas gegeten.

Ik heb even de VB code's even hierin geplakt en met rood de aangegeven waarin volgens Vb de fout in moet zitten.

Private Sub Debiteurnr_AfterUpdate()
' De record zoeken die overeenkomt met het besturingselement
Me.RecordsetClone.FindFirst "[Debiteur-nr] = " & Nz(Me.Debiteurnr, 0)
Me.Bookmark = Me.RecordsetClone.Bookmark
Me.Zoeknaam = DLookup("[Zoeknaam]", "Query_DE_Debiteur", "[Debiteur-nr] = " & Me.Debiteurnr)
Me.Naam.Requery
End Sub

Private Sub Zoeknaam_AfterUpdate()
' De record zoeken die overeenkomt met het besturingselement
Me.RecordsetClone.FindFirst "[Zoeknaam] = '" & Nz(Me.Zoeknaam, "") & "'"
Me.Bookmark = Me.RecordsetClone.Bookmark
Me.Debiteurnr = DLookup("[Debiteur-nr]", "Query_DE_Debiteur", "[Zoeknaam] = '" & Me.Zoeknaam & "'")
Me.Naam.Requery
End Sub

Private Sub Ordernummer_AfterUpdate()
' De record zoeken die overeenkomt met het besturingselement
Me.RecordsetClone.FindFirst "[Ordernummer] = " & Nz(Me.Ordernummer, 0)
Me.Bookmark = Me.RecordsetClone.Bookmark
Me.Referentie = DLookup("[Referentie]", "Query_ORK_Verkooporders", "[Ordernummer] = " & Me.Ordernummer)
End Sub

Private Sub Referentie_AfterUpdate()
' De record zoeken die overeenkomt met het besturingselement
Me.RecordsetClone.FindFirst "[Referentie] = '" & Nz(Me.Referentie, "") & "'"
Me.Bookmark = Me.RecordsetClone.Bookmark
Me.Ordernummer = DLookup("[Ordernummer]", "Query_ORK_Verkooporders", "[Referentie] = '" & Me.Referentie & "'")
End Sub


Ik begrijp dat ik waarschijnlijk nog een en ander extra moet invoegen maar weet niet goed op welke manier.
Ik hoop dat je mij dit kunt aangeven in mijn VB code's

Alvast bedankt.

Vriendelijke groet,
 
Zo te zien maak je gebruik van een bound form. Het is niet de manier die ik aanraadt om in te programmeren maar ik zal het proberen. Ik weet niet precies wat je wilt met onderstaande code maar het komt mij over dat je ergens naartoe wilt waar je al bent.
Code:
Me.RecordsetClone.FindFirst "[Debiteur-nr] = " & Nz(Me.Debiteurnr, 0)
Als het debiteur nummer uniek is dan ben je er al. Maar wellicht voer je hier nieuwe debiteurennummers in en wil je controleren of deze al bestaan:(
Waarom gebruik je RecordsetClone en niet Recordset?
Een eigenschap van bound forms is dat alles wat je intikt direct wordt aangepast in je database. Dus op het moment dat je afterupdate wordt uitgevoerd dan schiet je naar de eerste occurence van je zoek argument in je recordset. Volgens mij wilt je dat niet. Ik kan me in ieder geval niet voorstellen waarom.

Iets beter zou zijn als je een datacontrol zou gebruiken en daar je recordset aan koppelt. Dan vul je aan de hand van je datacontrol de overige velden.

Iets beter zou zijn als je in VB een recordset opent je velden vult en vervolgens je recordset weer afsluit. Je werkt dan stateless. Dit is de beste manier, zeker wanneer je meerdere gebruikers hebt.

Doe er je voordeel mee!
HTH
Weest gegroet,
Guus
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan