Ik zag laatst een zwerver uit een vuilnisbak eten. Ik loop naar hem toe en zeg: "Doe je dat thuis ook??" - Theo Maassen
Het lijkt mij vrij normaal dat je een variabele eerst moet declareren voordat je hem gebruikt.warrie schreef op woensdag 15 maart 2006 @ 03:12:
...
code:niet wilt aanroepen TENZIJ er eerst een DIM is geschreven van de rs ( dus
1set rs = new CreateObject ("ADODB.RecordSet")code:)
1 Dim rs As New ADODB.Recordset
...
Voor het library probleem moet je niet bij mij zijn, ik krijg jeuk van access
[ Voor 11% gewijzigd door Gonadan op 15-03-2006 09:04 ]
Look for the signal in your life, not the noise.
Canon R6 | RF 24-70 f/2.8 L | 50 f/1.8 STM | 430EX II
Sigma 85 f/1.4 Art | 100-400 Contemporary
Zeiss Distagon 21 f/2.8
p&w -> off
https://fgheysels.github.io/
Ik denk dat er eerst wel ergens een Dim rs as Object staat toch?Gonadan schreef op woensdag 15 maart 2006 @ 09:04:
[...]
Het lijkt mij vrij normaal dat je een variabele eerst moet declareren voordat je hem gebruikt.
Voor het library probleem moet je niet bij mij zijn, ik krijg jeuk van access
The process of preparing programs for a digital computer is especially attractive, not only because it can be economically and scientifically rewarding, but also because it is an aesthetic experience much like composing poetry or music.
My opinions may have changed, but not the fact that I am right. -- Ashleigh Brilliant
Verwijderd
verder wat tips :
Het is niet aan te raden om new te gebruiken in je DIM statement. het object wordt dan ten alle tijde aangemaakt, en je moet er dan ook voor zorgen dat je het weggooit ( vertrouw niet op de garbage collection van VB(A). Door new te gebruiken in de code zelf, heb je meer controle over wanneer je resources worden aangemaakt.
De syntax voor het aanmaken van een recordset is :
Als je de library hebt gekoppeld in de verwijzingen :
1
2
3
4
5
6
7
8
| dim rs as adodb.recordset set rs = new adodb.recordset rs.open ("Select * from foo") .. .. rs.close. set rs = nothing |
Als je de library niet gekoppelde hebt
1
2
3
4
5
6
7
8
| dim rs as object set rs = createobject("adodb.recordset") rs.open ("Select * from foo") .. .. rs.close set rs = nothing |
Nee, het vreemd is dat dit niet hoefde in de andere versies van Access (ook recent hoor). Als er dan een set-statement werd gebruikt, is het object ook meteen geDIMd....Boss schreef op woensdag 15 maart 2006 @ 10:23:
[...]
Ik denk dat er eerst wel ergens een Dim rs as Object staat toch?
Ik zag laatst een zwerver uit een vuilnisbak eten. Ik loop naar hem toe en zeg: "Doe je dat thuis ook??" - Theo Maassen
Het lijkt me goed om het stukje code waar het om gaat hier eens neer te zetten. Het ziet eruit als volgt :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
| Private Sub cmd_browse_Click()
Dim fileDialog As New clsCommonDialog
fileDialog.Flags = cdlOFNHideReadOnly Or cdlOFNFileMustExist
fileDialog.Filter = "Database Files (MDB)|*.mdb"
fileDialog.FilterIndex = 1
If IsNull(text_database_path.Value) = True Then text_database_path.Value = ""
Set fs = CreateObject("Scripting.FileSystemObject")
If fs.FileExists(text_database_path.Value) = True Then ----------------------------------------------------
fileDialog.FileName = text_database_path.Value
End If
fileDialog.ShowOpen
If IsEmpty(fileDialog.FileName) = False Then
text_database_path.Value = fileDialog.FileName
End If
End Sub |
Bij het runnen loopt hij hier vast op de regel met de streepjes erachter. De exacte foutmelding luidt: "Object variable or With block variable not set".
Als ik in de code Scripting.FileSystemObject intyp, lijkt hij dit ook NIET te herkennen. Ik weet dus niet of de foutmelding zoveel betekent als: "fs zegt me niets"......wie redt mij uit de brand?
waarom kan ik via de search onmogelijk dit onderwerp vinden? Is dit omdat dit forum net nieuw is? Ik heb het idee dat daarom weinig mensen dit lezen.
[ Voor 19% gewijzigd door warrie op 15-03-2006 23:33 ]
Ik zag laatst een zwerver uit een vuilnisbak eten. Ik loop naar hem toe en zeg: "Doe je dat thuis ook??" - Theo Maassen
[ Voor 25% gewijzigd door Lustucru op 16-03-2006 00:54 ]
Ik zag laatst een zwerver uit een vuilnisbak eten. Ik loop naar hem toe en zeg: "Doe je dat thuis ook??" - Theo Maassen
En ontopic: het probleem is niet lastig, je code wel. Nergens is te zien hoe en waar je je variabelen declareert. Het scriptingobject is iig een externe com-component, dus dat de IDE het filesystemobject niet kent zegt niks. Omdat je zo te zien met late binding werkt en het object aanmaakt met createobject hoeft het ook niet opgenomen te worden in de verwijzingen, maar check iig eerst of je uberhaupt kunt verwijzen naar het scripting object.
En voeg eens een ordentelijk dim (as variant) statement toe.
De oever waar we niet zijn noemen wij de overkant / Die wordt dan deze kant zodra we daar zijn aangeland
Niesje, dank voor je antwoord. Ik begrijp je antwoord alleen niet helemaal. Ik heb nu als volgt de dim statement erbij gezet:Niesje schreef op donderdag 16 maart 2006 @ 00:53:
het probleem is niet lastig, je code wel. Nergens is te zien hoe en waar je je variabelen declareert. Het scriptingobject is iig een externe com-component, dus dat de IDE het filesystemobject niet kent zegt niks. Omdat je zo te zien met late binding werkt en het object aanmaakt met createobject hoeft het ook niet opgenomen te worden in de verwijzingen, maar check iig eerst of je uberhaupt kunt verwijzen naar het scripting object.
En voeg eens een ordentelijk dim (as variant) statement toe.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
| Private Sub cmd_browse_Click()
Dim fileDialog As New clsCommonDialog
fileDialog.Flags = cdlOFNHideReadOnly Or cdlOFNFileMustExist
fileDialog.Filter = "Database Files (MDB)|*.mdb"
fileDialog.FilterIndex = 1
If IsNull(text_database_path.Value) = True Then text_database_path.Value = ""
Dim fs As Variant 'DEZE REGEL HEB IK ER DUS BIJ GEZET
Set fs = CreateObject("Scripting.FileSystemObject")
If fs.FileExists(text_database_path.Value) = True Then -----------------------------
fileDialog.FileName = text_database_path.Value
End If
fileDialog.ShowOpen
If IsEmpty(fileDialog.FileName) = False Then
text_database_path.Value = fileDialog.FileName
End If
End Sub |
Wederom loopt hij vast op de regel met de streepjes erachter.
Hoe kan ik verwijzen naar het Scripting object? Als ik aan het typen ben in VB, en ik type Scripting dan zie ik met de functie (Ctrl-spatie) niet dat hij Scripting herkent. Is dit wat je bedoelt?
Ik zag laatst een zwerver uit een vuilnisbak eten. Ik loop naar hem toe en zeg: "Doe je dat thuis ook??" - Theo Maassen
Met CreateObject moet het evengoed werken (zonder de verwijzing), mits aan deze voorwaarden is voldaan:
- C:\windows\system32\scrrun.dll is aanwezig
- scrrun.dll is correct geregistreerd (Start-Run: regsvr32 scrrun.dll)
Een van de zaken die in deze modus uitgeschakeld is is CreateObject.
Probeer dus eens om het beveiligingsniveau naar laag te zetten.
Zolang de zon schijnt, blijf ik binnen.
Pyro-Wired: De security level stond al op laag. Misschien nog ter verduidelijking: Op dit kleine stukje code loopt hij al vast:
1
2
3
4
5
6
7
8
| Private Sub Form_Load()
Set con = Application.CurrentProject.Connection
Set rs = CreateObject("ADODB.Recordset")
sql = "select [Field1] from settings"
rs.Open sql, con, 1
database_path = rs![Field1]
text_database_path.Value = database_path
End Sub |
De volgende libraries zijn gereferenced.
-Visual Basic for Applications
-Microsoft Access 11.0 Object Library
-Ole Automation
-Microsoft ActiveX Data Objects 2.1 Library
-Microsoft Office XP Web Components
En wellicht ter overvloede: Het betreft dus een nieuwe, geupdate installatie van Office 2003. De pc heb ik net geformatteerd, virusscanner draait als een dolle. Eeuwige roem voor degene die de oplossing weet!
BTW: doet dat stukje code het bij jullie wel? Waarschijnlijk wel!
[ Voor 10% gewijzigd door warrie op 16-03-2006 21:45 ]
Ik zag laatst een zwerver uit een vuilnisbak eten. Ik loop naar hem toe en zeg: "Doe je dat thuis ook??" - Theo Maassen
Wat gebeurt er als je scriptcontrole uitschakelt in je virusscanner? Draai je toevallig de norton office plugin?
De oever waar we niet zijn noemen wij de overkant / Die wordt dan deze kant zodra we daar zijn aangeland
100 punten, geniaal, ik ben net jarig geweest, maar dit is het mooiste cadeau!
Ik zag laatst een zwerver uit een vuilnisbak eten. Ik loop naar hem toe en zeg: "Doe je dat thuis ook??" - Theo Maassen