MS Access libraries

Pagina: 1
Acties:
  • 414 views sinds 30-01-2008
  • Reageer

  • warrie
  • Registratie: Juni 2001
  • Laatst online: 25-01-2020
Hallo, ik heb best een lastig Access probleem denk ik.

Ik heb namelijk net een nieuwe Office geinstalleerd (2003) maar opeens pakt deze mijn zelf geschreven MDB database niet meer. Hij geeft de volgende foutmelding:

code:
1
"Object variable or with block not set"
Het komt er op neer dat hij

code:
1
 set rs = new CreateObject ("ADODB.RecordSet")
niet wilt aanroepen TENZIJ er eerst een DIM is geschreven van de rs ( dus
code:
1
Dim rs As New ADODB.Recordset
)

Dit is dus makkelijk op te lossen maar wel onderdeel van het probleem. Serieuzer is echter dat hij de library Scripting.FileSystemObject helemaal niet meer kent.

Ik heb de MDB even op de compu van een huisgenoot gezet en daar runt hij wel (heeft ook Access 2003). Ik heb zelfs alle libraries exact hetzelfde gezet in beide versies.

Googlen heeft geen succes gehad. Iemand enig idee wat het kan zijn?

Ik zag laatst een zwerver uit een vuilnisbak eten. Ik loop naar hem toe en zeg: "Doe je dat thuis ook??" - Theo Maassen


  • Gonadan
  • Registratie: Februari 2004
  • Laatst online: 23:57

Gonadan

Admin Beeld & Geluid, Harde Waren
warrie schreef op woensdag 15 maart 2006 @ 03:12:
...

code:
1
 set rs = new CreateObject ("ADODB.RecordSet")
niet wilt aanroepen TENZIJ er eerst een DIM is geschreven van de rs ( dus
code:
1
Dim rs As New ADODB.Recordset
)

...
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 ;)

[ 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


  • whoami
  • Registratie: December 2000
  • Laatst online: 23:31
Dit zal eerder thuishoren in OFF, aangezien het Access specifiek is.
p&w -> off

https://fgheysels.github.io/


  • Boss
  • Registratie: September 1999
  • Laatst online: 24-02 10:52

Boss

+1 Overgewaardeerd

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 ;)
Ik denk dat er eerst wel ergens een Dim rs as Object staat toch?

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.


  • ATS
  • Registratie: September 2001
  • Laatst online: 12-02 13:46

ATS

FF controleren of al je libs wel netjes geregistreerd zijn in Access wil wel eens helpen. Als dat niet het geval is, dan geeft hij de meest rare errors.

My opinions may have changed, but not the fact that I am right. -- Ashleigh Brilliant


Verwijderd

Check je references/verwijzingen ! Waarschijnlijk staat er een andere versie ( of geen versie ) van de libraries op je PC. Ga hiervoor naar een module, en klik "Extra" -> "Verwijzingen". Je ziet het vanzelf als je objecten mist

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 :
Visual Basic:
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
Visual Basic:
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

  • warrie
  • Registratie: Juni 2001
  • Laatst online: 25-01-2020
Boss schreef op woensdag 15 maart 2006 @ 10:23:
[...]


Ik denk dat er eerst wel ergens een Dim rs as Object staat toch?
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....

Ik zag laatst een zwerver uit een vuilnisbak eten. Ik loop naar hem toe en zeg: "Doe je dat thuis ook??" - Theo Maassen


  • warrie
  • Registratie: Juni 2001
  • Laatst online: 25-01-2020
Bedankt voor de hulp alvast. Ik heb dus alle references al gecheckt, maar er staat nergens "missing" voor ofzo. De libraries staan hetzelfde als bij een huisgenoot (waar de MDB dus wel werkt)

Het lijkt me goed om het stukje code waar het om gaat hier eens neer te zetten. Het ziet eruit als volgt :

code:
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?

offtopic:
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


  • warrie
  • Registratie: Juni 2001
  • Laatst online: 25-01-2020
<!--Iemand? Of is dit probleem echt zo lastig?-->doe maar niet

[ 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


  • Lustucru
  • Registratie: Januari 2004
  • Niet online

Lustucru

26 03 2016

Eerst crossposten en dan ook nog kicken binnen 24 uur. Dat gaat niet goed zo :/

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


  • warrie
  • Registratie: Juni 2001
  • Laatst online: 25-01-2020
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.
Niesje, dank voor je antwoord. Ik begrijp je antwoord alleen niet helemaal. Ik heb nu als volgt de dim statement erbij gezet:

code:
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


  • BertS
  • Registratie: September 2004
  • Laatst online: 13-02 08:33
Om intellisense te hebben moet onder Extra->Verwijzingen 'Microsoft Scripting Runtime' zijn aangevinkt.
Met CreateObject moet het evengoed werken (zonder de verwijzing), mits aan deze voorwaarden is voldaan:
  1. C:\windows\system32\scrrun.dll is aanwezig
  2. scrrun.dll is correct geregistreerd (Start-Run: regsvr32 scrrun.dll)

  • Pyrowired
  • Registratie: Februari 2004
  • Laatst online: 05-01-2025
Druk eens op F1 in Access en zoek op: De sandbox-modus van Microsoft Jet Expression Service

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.


  • warrie
  • Registratie: Juni 2001
  • Laatst online: 25-01-2020
Bee-es...dank, maar ik heb je opdrachten uitgevoerd en alles leek OK.

Pyro-Wired: De security level stond al op laag. Misschien nog ter verduidelijking: Op dit kleine stukje code loopt hij al vast:

code:
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


  • BertS
  • Registratie: September 2004
  • Laatst online: 13-02 08:33
Kun je de code wel compileren (menu Foutopsporing) ?

  • Lustucru
  • Registratie: Januari 2004
  • Niet online

Lustucru

26 03 2016

Wazig. Nu post je opeens een heel ander stuk code. Komt het erop neer dat je geen enkel object aan kunt maken met createobject? Probeer dat eens uit, maw maak bv eens een wordobject aan en test vervolgens of het object goed is aangemaakt. Werkt createobject in een andere VBA-host wel?

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


  • warrie
  • Registratie: Juni 2001
  • Laatst online: 25-01-2020
Niesje, je hebt iemand heel blij gemaakt! Het was inderdaad mijn virusscanner, en wel Kaspersky!

100 punten, geniaal, ik ben net jarig geweest, maar dit is het mooiste cadeau! :P

Ik zag laatst een zwerver uit een vuilnisbak eten. Ik loop naar hem toe en zeg: "Doe je dat thuis ook??" - Theo Maassen

Pagina: 1