Avatar billede piotr Nybegynder
07. maj 2001 - 11:49 Der er 32 kommentarer og
1 løsning

Visual Basic og Access 2000

Jeg har lavet et program i VB som læser nogle fra felter fra en Access 2000 database, men for at det virker skal jeg konvertere databasen til en \"tidligere version\", for ellers kommer VB med fejlbeskeden: \"Runtime error 3343, unrecognized database format\". Hvad skal jeg gøre for at kunne arbejde direkte med en Access 2000 database?
Avatar billede jennemaan Nybegynder
07. maj 2001 - 11:54 #1
er access 2000 installeret på den maskine du arbejder på?

/Jennemaan
Avatar billede piotr Nybegynder
07. maj 2001 - 11:55 #2
ja
Avatar billede jennemaan Nybegynder
07. maj 2001 - 11:59 #3
åben databasen i access, vælg Tools-database utilities-compact and repair database.

Din database er sandsynligvis korrupt.

/Jennemaan
Avatar billede piotr Nybegynder
07. maj 2001 - 12:05 #4
Virker heller ikke, den vil stadigvæk ikke acceptere databasen.
Avatar billede jennemaan Nybegynder
07. maj 2001 - 12:08 #5
hvordan åbner du databasen...? Vha. ado eller...?

Avatar billede tdaugaard Nybegynder
07. maj 2001 - 12:11 #6
piotr:> på hvilken måde bruger du databasen ? Altså sårn kodemæssigt .. DAO eller ADO ?
Avatar billede jennemaan Nybegynder
07. maj 2001 - 12:12 #7
hvis du bruger datacontrol eller dao så check

http://support.microsoft.com/support/kb/articles/q257/7/80.asp

Du skal enten opgradere til visual basic sp 4 eller bruge den beskrevne workaround.

/Jennemaan
Avatar billede piotr Nybegynder
07. maj 2001 - 12:15 #8
Sådan ser koden ud:

Dim ws As Workspace
Dim db As Database
Dim rs As Recordset


Private Sub Form_Load()

Set ws = Workspaces(0)
Set db = ws.OpenDatabase(App.Path & \"\\db2.mdb\")

   
   
   
   
    Set rs = db.OpenRecordset(\"SELECT * FROM Ordre_status\")
   
    If Not rs.EOF Then
    rs.MoveFirst
    Do While Not rs.EOF
     
          lstOrdre.AddItem rs!ordreid
        rs.MoveNext
       
    Loop
End If


Jeg har loadet \"Microsoft DAO 3.51 object libary\" som reference, men det er åbenbart ikke nok?
Avatar billede jennemaan Nybegynder
07. maj 2001 - 12:17 #9
du er nød til enten at opgradere til vb sp4 eller bruge en odbc dsn + ado.

Se ovenstående.

/Jennemaan
Avatar billede tdaugaard Nybegynder
07. maj 2001 - 12:18 #10
Det er sku også en lidt besværlig måde at gøre det på ...

Private Sub Form_Load()
  Set db = CreateObject(\"ADODB.Connection\")
  db.Open \"DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=\" & App.Path & \"\\db2.mdb\"

  Set Rs = db.Execute(\"SELECT * FROM ordre_status\")

  If Not Rs.BOF Then
    Do Until Rs.EOF
      lstOrdre.AddItem Rs(\"odreid\")
      Rs.MoveNext
    Loop
  End If
End Sub

Sådan gør man det med ADO
Avatar billede tdaugaard Nybegynder
07. maj 2001 - 12:19 #11
jennemaan:> du behøver ikke et ODBC DSN for at bruge ADO!
Avatar billede jennemaan Nybegynder
07. maj 2001 - 12:24 #12
tdaugaard > enig :o)

jeg mente også odbc dsn + dao ;)

det smarteste er IMHO at bruge ado. Så er app\'en jo lidt mere fremtidssikker.

Nu viste jeg ikke lige hvor meget dao kode han havde skrevet... Det kan være ret omfangsrigt at opgradere dao kode til ado kode.

/Jennemaan
Avatar billede piotr Nybegynder
07. maj 2001 - 12:24 #13
tdaugaard: hvilke referencer skal der loades?
Avatar billede terry Ekspert
07. maj 2001 - 12:25 #14
take a look at your references in the projects menu.
To use Access 2000 you need to use DAO 3.6!
Avatar billede jennemaan Nybegynder
07. maj 2001 - 12:27 #15
piotr > Umiddelbart ingen. Når du bruger CreateObject så foretager vb en såkaldt late-binding, hvilket vil sige at du ikke behøver at referere typelibrariet.

Det er dog hurtigere at refererere typelibrariet hvis du har mange kald til objektet.

I givet fal skal du referere \"Microsoft ActiveX Data Objects 2.x livrary\"

og så skrive

Dim db as ADODB.Connection
Dim rs as ADODB.Recordset
Set db = New ADODB.Connection

Set rs=db.Execute... osv


/Jennemaan
Avatar billede tdaugaard Nybegynder
07. maj 2001 - 12:28 #16
piotr:> ingen af hvad jeg ved ... det har jeg i hvert fald aldrig gjort...

terry:> no need for DAO! ADO can access both Access 97 AND 2000 databases.
Avatar billede tdaugaard Nybegynder
07. maj 2001 - 12:31 #17
jennemaan:> alt det der Dim xx As [noget database sjov]  .. det er jeg sku\'t meget for *G*
Avatar billede piotr Nybegynder
07. maj 2001 - 12:32 #18
Det virker når referencen DAO 3.6 loades, ser ud til Terry løber med pointene :P

Terry: DAO 3.6 did the trick, thanks
Avatar billede tdaugaard Nybegynder
07. maj 2001 - 12:32 #19
vil lige lægge et svar i tilfælde af at piotr kunne bruge mit ADO eksempel.
Avatar billede jennemaan Nybegynder
07. maj 2001 - 12:35 #20
tdaugaard:>

Når du bruger CreateObject så sker der følgende ved udførsel.

Programmet beder Session Control Manageren (SCM) om en reference til objektet \"ADODB.Connection\". SCM\'en går så på jagt i registry for at find CLSID\'et på objektet. Når den har fundet det, søger den så endnu engang i registry for at finde typelibrariet, hvorefter den instansierer objektet og returnerer dette.

Hvis du har en reference til typelibrariet forespørger programmet SCM\'en om CLSID\'et istedet, hvilket betyder at du sparer en søgning i registry (hvilken for nogen maskiner kan være kæmpe ;) ).


Er der tale om et objekt som bliver instansieret ofte så bør man bruge early-binding (vha. reference).


/Jennemaan :o)
Avatar billede terry Ekspert
07. maj 2001 - 12:37 #21
Thanks  piotr!

tdaugaard: I could see piotr was using DAO and NOT ADO so it is important that referance to DAO 3.6 is in use. I am aware that ADO can use both 97 and 200p dB\'s but that wasnt the problem!!!

Terry
Avatar billede piotr Nybegynder
07. maj 2001 - 12:41 #22
forresten, også tak til jer andre :)
Avatar billede tdaugaard Nybegynder
07. maj 2001 - 12:48 #23
jennemaan:> hmm ... det må jeg lige kigge på for jeg bruger selv Access DB\'ere i mine programmer og der bruger jeg ingen referencer...

terry:> well as I told piotr, it is much easier to use ADO than DAO. Also, if you are planning on distributing your program you should note that DAO adds about 8 MEGS og drivers to your distribution where ADO requires none.
Avatar billede jennemaan Nybegynder
07. maj 2001 - 12:50 #24
tdaugaard > ADO fordrer AFAICR at MDAC 2.0 bliver distribueret med? (+8mb)

/Jennemaan
Avatar billede tma_oksboel Nybegynder
07. maj 2001 - 12:51 #25
Du skal blot installere servicepack (minimum SP 4), så kan vb fint arbejde med Access 2000.

Kan downloades fra microsoft.

Torben
Avatar billede tdaugaard Nybegynder
07. maj 2001 - 12:54 #26
jennemaan:> ALLE computere har MDAC 2.0. Jeg har ikek været ude for at der er en der ikke har. (og et af mine programmer har været nede og køre på wn Win95 maskine!)
Og der er IKKE 8 MB MDAC med.
Avatar billede terry Ekspert
07. maj 2001 - 12:56 #27
To the best of my knowledge DAO is faster than ADO

I have used both ADO and DAO and have had more problems with ADO than DAO. So I intend using DAO for a while now.

Avatar billede tdaugaard Nybegynder
07. maj 2001 - 13:01 #28
terry:> DAO is slower than ADO. I\'ve a script that proves it!
Avatar billede terry Ekspert
07. maj 2001 - 13:05 #29
tdaugaard: We all have our preferences and mine is DAO!
Avatar billede tdaugaard Nybegynder
07. maj 2001 - 13:10 #30
terry:> Of course we do, but why use something that is slow when there are faster alternatives ?
Avatar billede terry Ekspert
07. maj 2001 - 13:13 #31
tdaugaard: Where are you going with this? You sound like my EX:
Avatar billede tdaugaard Nybegynder
07. maj 2001 - 13:19 #32
terry:> *LOL* I was just asking you why you want to use DAO when ADO in fact IS faster than DAO.. ?
Which problems did you have with ADO that you didn\'t have with DAO ?
Avatar billede Kim Neesgaard Seniormester
08. april 2003 - 17:41 #33
Blot en information: installation af SP5 får VB 6.0 til at køre mod en Access 2000 database med ADO uden problemer: http://msdn.microsoft.com/vstudio/downloads/updates/sp/vs6/sp5/default.asp
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester