[access & vba] Typen komen niet overeen

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

  • Blizard
  • Registratie: September 2001
  • Niet online
Public Sub test()
Dim dbs As Database
Dim rstTabel As Recordset

Set dbs = DBEngine.Workspaces(0).OpenDatabase("Program")
Set rstTabel = dbs.OpenRecordset("tblTest")
Debug.Print rstTabel.RecordCount
Debug.Print dbs.Name
rstTabel.Close
dbs.Close

End Sub

[/code]

Dit is een zeeeer eenvoudige code, maar toch werkt het niet. Ik krijg namelijk de melding dat de typen niet overeenkomen. Nochtans is tblTest een tabel ?! Wie kan mij helpen ?

Verwijderd

Welke Access versie? Ik had laatst ook problemen met Access2000. Code die in Access97 werkt, werkt niet in Access2000.
Meen me te herinneren dat de fout zit in 'dim dbs as database'; 'Database' is niet bekend. Heb er verder nog niet naar gekeken omdat ik in het algemeen met Access97 werk.

  • lexited
  • Registratie: Maart 2001
  • Laatst online: 30-03 17:02
heb je de references goed ingesteld?

1 - 2 - 3


  • Blizard
  • Registratie: September 2001
  • Niet online
Afbeeldingslocatie: http://www.endoria.net/upload/?bekijk=2413059602

Versie : access 2002 ...

Verwijderd

Op welke regel krijg je de foutmelding?

  • Blizard
  • Registratie: September 2001
  • Niet online
Debug.Print rstTabel.RecordCount

Blijkbaar iets mis met de declaratie van rstTabel ?! (is toch een recordset ?)

  • Blizard
  • Registratie: September 2001
  • Niet online
niemand ?!

  • Bu588
  • Registratie: Maart 2000
  • Laatst online: 22-12-2025
Bevat tblTest wel records? Als de tabel leeg is, heeft RecordCount geen waarde volgens mij. Dat zou je anders moeten oplossen:
code:
1
2
3
4
5
If Not rstTabel.EOF Then
    Debug.Print rstTabel.RecordCount
Else
    Debug.Print 0
EndIf

Misschien zo?

Nothing is fool-proof to a sufficiently talented fool...


  • Blizard
  • Registratie: September 2001
  • Niet online
Er zitten wel degelijk waarden in de tabel.
Kan ik nog iets speciaal doen met een tabel ?! Want hij denkt blijkbaar dat de tabel géén tabel is :(

  • Digihelp ®
  • Registratie: Maart 2001
  • Laatst online: 16-02 13:02
Heb het ff voor je getest...
Als je
code:
1
 Dim rstTabel As Recordset

weglaat dan doet hij het wel, alhoewel dat natuurlijk uiterst raar is. Weet verder ook niet waar het aan ligt. Errugg vreemd.

Overigens komt de foutmelding bij dbs.openrecordset en niet bij de eerste debug regel.

  • Blizard
  • Registratie: September 2001
  • Niet online
hé, dat werkt inderdaad, wel raar dat je het blijkbaar niet hoeft te declareren ?
bedankt, hoewel het nog steeds redelijk vaag is, het probleem ;) .. Thanks !

  • Blizard
  • Registratie: September 2001
  • Niet online
Nou heb ik het volgende probleem : ik zou graag een requery uitvoeren, maar dit lukt niet (ik denk omdat ik niet gedeclareerd heb als Recordset). Kan niemand me helpen ? ;(

  • Digihelp ®
  • Registratie: Maart 2001
  • Laatst online: 16-02 13:02
code??

  • Blizard
  • Registratie: September 2001
  • Niet online
code : zie eerste post.
Is er écht niemand die dit probleem ooit al es heeft gezien ?! :( :( :'(

  • Digihelp ®
  • Registratie: Maart 2001
  • Laatst online: 16-02 13:02
Op donderdag 04 april 2002 12:53 schreef Blizard het volgende:
code : zie eerste post.
Is er écht niemand die dit probleem ooit al es heeft gezien ?! :( :( :'(
Je zegt toch dat je nu iets anders aan het proberen bent: een requery

Ik neem aan dat je daar ook bepaalde code voor gebruikt :?

  • Phenomenon
  • Registratie: December 2000
  • Laatst online: 01-04 13:18
De Oplossing

Dim Dbs as dao.database
Dim Rst as Dao.Recordset

of

AxtiveX Data Object afvinken

Volgens mij is het zoiets als.

Dbs wordt als een dao object aangemaakt en Recordset als AxtiveX object. Hierdoor verschillen de typen dus vanelkaar.

  • shades
  • Registratie: September 2001
  • Laatst online: 06-03 10:48

shades

huh ?

Op maandag 01 april 2002 11:57 schreef Blizard het volgende:

Dit is een zeeeer eenvoudige code, maar toch werkt het niet. Ik krijg namelijk de melding dat de typen niet overeenkomen. Nochtans is tblTest een tabel ?! Wie kan mij helpen ?
Het zou handig zijn voor de recordset als hij wist waar die naar moest kijken.. Maw.. een tabel aanduiden is niet voldoende..
code:
1
2
3
Dim strSql as string
strSql = "SELECT * FROM tblTest"
rstTabel.open strSql

Zoiest.
In asp kan ik je zo een voorbeeld geven.. in vb6 is het al weer een tijdje geleden.. Als je er na het weekend nog niet uit bent mail dan even naar mij... dan zoek ik het wel ff uit..

Oja.. je moet inderdaad adox gebruiken (zie mail van peter 1987) en dan zoeken in de online documentation van vb. Gegarandeerd dat je een example tegen komt.. Oja..
Het zijn trouwens de libraries uit de Ado extensie security dll bla bla... (in het plaatje boven, het 1 na onderste vinkje.. toe te voegen via project references dacht ik)

https://k1600gt.nl


  • Phenomenon
  • Registratie: December 2000
  • Laatst online: 01-04 13:18
Op donderdag 04 april 2002 20:21 schreef shades het volgende:

Oja.. je moet inderdaad adox gebruiken (zie mail van peter 1987) en dan zoeken in de online documentation van vb. Gegarandeerd dat je een example tegen komt.. Oja..
Het zijn trouwens de libraries uit de Ado extensie security dll bla bla... (in het plaatje boven, het 1 na onderste vinkje.. toe te voegen via project references dacht ik)
Nou zoals het voorbeeld hier betreft, moet je dus geen adox gebruiken, maar DA0

  • shades
  • Registratie: September 2001
  • Laatst online: 06-03 10:48

shades

huh ?

Op donderdag 04 april 2002 20:29 schreef Peter1978Thuis het volgende:

[..]

Nou zoals het voorbeeld hier betreft, moet je dus geen adox gebruiken, maar DA0
Grrr. ik ga het opzoeken :)
Moet deze trouwens niet naar P&W ??

https://k1600gt.nl


  • shades
  • Registratie: September 2001
  • Laatst online: 06-03 10:48

shades

huh ?

Ik hoop dat onderstaand voorbeeldje een beetje duidelijk is.
Ik moet een appje verzorgen dan gegevens in een aantal talen kon weergeven.

Er staat wat comments bij.
Ik denk wel dat je en uit moet kunnen komen..
Je kan ipv een connection string ook DSN gebruiken maar dan moet je zelf ff uitzoeken in de manuals of via vb-sites. Die zijn er in overvloed...

Misschien werkt het niet in 1 keer maar je bent vast ervaren genoeg om daar om heen te werken. De sub komt recht uit mijn source..

Oja.. MDAC 2.5 is aan te raden, MDAC 2.6 voor SQL2000 servers..
code:
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
// module1.bas
' adox
' maakt gebruiken van msadox.dll
' (Microsoft ADO Ext. 2.6 for DLL and Security) <- deze toevoegen via references

Global rstTaal As ADODB.Recordset
Global strSQL As String

' connection string
Global Const strDB_PROVIDER As String = "Provider=Microsoft.Jet.OLEDB.4.0"
Global Const strDB_DATA_SOURCE As String = "Data Source="
Global Const strDB_SECURITY As String = "" ' "Persist Security Info=False"
    
' database gerelateerde vars
Global strDB_BESTAND As String ' = "Comment.mdb" ' database bestandsnaam excl. het pad
Global strDB_CONNECTIE As String ' connectionstring propertie voor database
Global strDB_PAD As String ' pad naar database

// form1
' strDB_PAD invullen zonder ending slash
' strDB_BESTAND is database naam

strDB_CONNECTIE = strDB_PROVIDER & ";" & strDB_DATA_SOURCE & strDB_PAD & "\" & strDB_BESTAND
strConn = strDB_CONNECTIE

Sub ConnectTaal()
    ' Maakt gebruik van een combo box cmbTaal met index 0
    ' De intLus is for als er meerdere cmbTaal combo boxen zijn
    
    ' Velden in de tblTaal tabel vanuit de rstTaal recordset
    ' rstTaal!taal_id   = taal_id veld
    ' rstTaal!Taal_Naam = Taal_Naam veld

    ' init common
    
    ' init db
    Dim rstTaal As ADODB.Recordset
    Dim strSQL As String
    Dim intLus as Integer

    ' zet vars
    'strConn = "DSN=menusysteem_lok"
    strSQL = "SELECT * FROM tblTaal ORDER BY taal_naam"
    
    ' open db
    Set rstTaal = New ADODB.Recordset
    rstTaal.Open strSQL, strConn, adOpenStatic, adLockOptimistic, adCmdText
    DoEvents
    For intLus = 0 To cmbTaal.UBound
      With cmbTaal(intLus)
      
        ' cmdtaal vullen
        rstTaal.MoveFirst
        .Clear
        Do Until rstTaal.EOF
            .AddItem rstTaal!Taal_Naam
            .ItemData(.NewIndex) = rstTaal!taal_id
            rstTaal.MoveNext
        Loop
        
      End With
    Next intLus
      
End Sub

https://k1600gt.nl


  • Phenomenon
  • Registratie: December 2000
  • Laatst online: 01-04 13:18
Op donderdag 04 april 2002 22:24 schreef shades het volgende:
Ik hoop dat onderstaand voorbeeldje een beetje duidelijk is.
Ik moet een appje verzorgen dan gegevens in een aantal talen kon weergeven.

Er staat wat comments bij.
Ik denk wel dat je en uit moet kunnen komen..
Je kan ipv een connection string ook DSN gebruiken maar dan moet je zelf ff uitzoeken in de manuals of via vb-sites. Die zijn er in overvloed...

Misschien werkt het niet in 1 keer maar je bent vast ervaren genoeg om daar om heen te werken. De sub komt recht uit mijn source..

Oja.. MDAC 2.5 is aan te raden, MDAC 2.6 voor SQL2000 servers..
Sorrie hoor dat ik alweer tegen je in ga, maar het lijkt me nu niet echt het aannemelijkst om met adox te gaan werken in een access database. Als het nu in visual basic gemaakt was ja, dan zou ik het wel doen, maar niet in access zelf.

Hiervoor zou ik gewoon dao gebruiken. Aangezien je je tabellen etc toch al meteen kan oproepen en hiervoor dus geen connection string voor nodig hebt.

Als je bijvoorbeeld de recordset van een formulier wilt hebben (recordset.clone) dan is dit met behulp van Dao naar mijn weten.

Maar het is idd beter om Adox te gebruiken wanneer je in VB zelf werkt.

  • Blizard
  • Registratie: September 2001
  • Niet online
Thanks ! Heb wat zitten spelen met de verwijzigen en dao etc en nu lijkt het te werken. veel dank :)

  • shades
  • Registratie: September 2001
  • Laatst online: 06-03 10:48

shades

huh ?

Op vrijdag 05 april 2002 12:35 schreef Peter1978Thuis het volgende:

[..]

Maar het is idd beter om Adox te gebruiken wanneer je in VB zelf werkt.
Hier ging ik ook vanuit..
Kon niet helemaal opmaken waarin het nou was...
De code lijkt sprekend op vb als het access is en als het access is op vb ;D

Maar goed.. weet ie nu ook hoe het in vb(6) kan :D

https://k1600gt.nl


  • Sjnirk
  • Registratie: Maart 2001
  • Laatst online: 27-03-2025

Sjnirk

Hie vrieve

Heb ik ook heel lang op gezeten, niet dat ik hier ff een topic post |:( , al die inet cursussen op access 97 afgestemd zijn ok, alleen niet vergeten dat je er dan dao voor moet zetten

Bikkelen gebeurt pas na 2:00

Pagina: 1