Avatar billede themepark Nybegynder
03. september 2003 - 13:12 Der er 28 kommentarer og
2 løsninger

Dim som Database og Recordset

Jeg har i VBA følgende 2 linjer

    Dim DataBase As Database
    Dim PostSæt As Recordset

De startes ved et tryk på en knap på en formular, og så er der en masse anden kode, som udføres.

Problemet er, at jeg får fejlmeddelelsen "User-defined type not defined", når jeg prøver at køre det...men i Hjælp står der at man godt kan gøre sådan.

Hvad er der galt? Jeg bruger Access 2002 SP1.
Avatar billede themepark Nybegynder
03. september 2003 - 13:13 #1
For øvrigt går det ganske fint, hvis jeg udelader As delene...men det ønsker jeg sådan set ikke...for det burde da virke MED dem :-(
Avatar billede jkrons Professor
03. september 2003 - 13:24 #2
Hvad med DIM DB As Database

Normaklt bør man ikke bruge reserverede udtryk som varabelnavne.
Avatar billede themepark Nybegynder
03. september 2003 - 13:26 #3
Se, det havde jeg i forvejen tænkt på, men det giver samme resultat :-(
Avatar billede mugs Novice
03. september 2003 - 13:26 #4
User-defined type not defined: Plejer at betyde referencefejl. Iøvrigt enig med jkrons
Avatar billede jkrons Professor
03. september 2003 - 13:31 #5
Har du husket at referere til det rigtige bibliotek? MS DAO nn Object Library
Avatar billede jkrons Professor
03. september 2003 - 13:32 #6
Når du udelader As dimensioneres din variabel som Variant, og det er en tilladt type, også uden den nævnte reference.
Avatar billede themepark Nybegynder
03. september 2003 - 13:34 #7
Referere? Normalvis (er vant til at programmere i VBA i Access 97) plejer jeg bare at kunne starte med at dimensionere mine variabler, også som Database og Recordset...og det med Variant ved jeg godt, det fungerer jo også fint uden dem...men det SKAL da være muligt at definere som Database og Recordset...ved bare ikke hvad der går galt :-(
Avatar billede themepark Nybegynder
03. september 2003 - 13:38 #8
Nu du nævner der med at referere, kommer jeg til at tænke på, om det kan skyldes nogle indstillinger i Access? Det skal siges, at jeg bruger min skoles computere, derfor har jeg ingen anelse om hvordan Access er sat op.
Avatar billede jkrons Professor
03. september 2003 - 13:48 #9
I Access97 var DAO standard. Det er det iklke i nyere versioner. Gå ind under Tools - References og find MS DAO 3.6 Object Library. Hak det af, og se om det ikke hjælper.
Avatar billede jkrons Professor
03. september 2003 - 13:49 #10
MS skak læses som Microsoft
Avatar billede themepark Nybegynder
03. september 2003 - 13:53 #11
Nu gik jeg ind i Tools->References og opdagede at MS DAO 3.6 Object Library ikke var slået til, så det er den nu, og nu kan jeg godt deklarere variablerne som Database og Recordset, men når jeg så når til følgende linje:

    Set PostSæt = DB.OpenRecordset("SELECT * FROM Ord ORDER BY Ord")

får jeg en "Type Mismatch" fejl. Hvad er der NU galt? :-(
Avatar billede themepark Nybegynder
03. september 2003 - 13:54 #12
Blev allerede gjort, inden du skrev det ;-)
Avatar billede mugs Novice
03. september 2003 - 14:45 #13
Type MisMatch er sandsynligvis fordi, du sammenligner numeriske værdier med alfanumeriske.
Avatar billede terry Ekspert
03. september 2003 - 18:34 #14
Well here is the first proble,
Dim DataBase As Database
    --------

Dim dB as ADODB.Database

and also

Dim PostSæt As ADODB.Recordset

You can actually use ADO and DAO if you have a reference to them both


Dim dB as ADODB.Database
Dim dB1 as DAO.Database
Avatar billede themepark Nybegynder
04. september 2003 - 12:33 #15
Det første "Ord" er navnet på tabellen, mens det næste er navnet på et felt af typen Tekst...og jeg sammenligner jo ikke noget med noget som helst inden jeg kommer til Set PostSæt linjen...så det kan da ikke være det :-(
Avatar billede terry Ekspert
04. september 2003 - 17:58 #16
SELECT * FROM Ord ORDER BY Ord.Ord

not logical to have a field with the same names as the table!

you can send your dB to eksperten@santhell.dk and I can take a look otherwise I cant help!
Avatar billede themepark Nybegynder
04. september 2003 - 18:43 #17
Nej, det er måske ikke logisk, men selv når det er ændret, er det samme fejl.

Jeg har prøvet alle tænkelige ændringer og kommet frem til dette.

    Set PostSaet = DB.OpenRecordset("SELECT * FROM Hejsa ORDER BY Kode")

PostSaet fordi den måske ikke kan tage æ, Hejsa som det nye navn på min tabel (som faktisk eksisterer...jeg HAR tjekket), og Kode som navnet på et af felterne i min tabel.

Og inden da har jeg defineret DB med følgende sætning.

    Set DB = CurrentDb

Og jeg HAR husket at DIMensionere dem :-(
Avatar billede themepark Nybegynder
04. september 2003 - 18:57 #18
Okay...det virkede, da jeg satte DAO på. Men da jeg programmerede i Access 97, var det ikke nødvendigt med dette...jeg kunne blot skrive Dim PostSæt as Recordset, og så virkede det fint. Men hvordan kan det så være at jeg er nødt til at skrive DAO nu for at få det til at virke?
Avatar billede terry Ekspert
04. september 2003 - 19:00 #19
In 97 DAO was the default in 2000 > it is ADO!
Avatar billede mugs Novice
04. september 2003 - 19:02 #20
som jeg skrev 3/9 kl 13:26 < Referencefejl. 97 benytter DAO og 2000 ADO. Hvis du så kører en DAO kode i 2000 skal du referere til DAO
Avatar billede terry Ekspert
04. september 2003 - 19:02 #21
You do NOT need to write DAO.recordset.

Go in the tools + references and remove the reference to ADO making sure there is one to DAO
Avatar billede themepark Nybegynder
04. september 2003 - 19:37 #22
Nu er jeg så ikke så klog at jeg rent faktisk VED hvad en referencefejl vil sige ;-)
Avatar billede mugs Novice
04. september 2003 - 19:43 #23
Hvis du f.eks vil eksportere data fra Access til Excel, skal du lave en reference til Excel i Tools > References > og browse ned igennem bibliotekerne til du ser dit Excel bibliotek og derefter sørge for, at der er et checkmærke i boksen i venstre side. Hvis ikke du gør det, kan Access ikke "se" Excel, og eksporten lykkes ikke.

Hvis du koder i Access97 og bruger en DAO kode som du startede dit spørgsmål med, så kører det fint. Men bruger du den samme kode i 2000 går det galt, hvis ikke du har en reference til DAO, da DAO er standard i 97 medens ADO er standard i 2000.

Hvis du benytter andre "programmer", skal du sørge for, at fortælle programmet "hvilket sprog der skal tales". Ellers "misforstår" Access din kode.
Avatar billede terry Ekspert
04. september 2003 - 19:43 #24
Open a form in design view and then go into the code. Then on the menu select the Tools-References menu.
Now you will see a list of References which have a v beside them. Find the one containing ADO 2.X where X is a number between 1 and 9 Remove the v
Avatar billede themepark Nybegynder
04. september 2003 - 19:47 #25
Aha :-) Men ville det være for meget at bede om at få at vide, hvad forskellen lige er på de 2, bortset fra 2 ombyttede bogstaver? ;-)
Avatar billede mugs Novice
04. september 2003 - 19:49 #26
Jeg har engang læst en længere smøre om det, men det var på så højt et plan, at jeg opgav. Så der melder jeg pas, men er da interesseret i en letforståelig forklaring.
Avatar billede terry Ekspert
04. september 2003 - 19:57 #27
well Microsoft has made changes to many of their products over the years and data access is one of them. DAO is an older technology although still prefered by many. ADO is newer but has been out for a number of years now. ADO .NET is the newest technology and I expect it will come to Access soon!
Avatar billede themepark Nybegynder
05. september 2003 - 10:59 #30
Okay...jeg har prøvet det med at fjerne fluebenet for ADO, men databasen går helt kold, så jeg opgiver lige det for nu.

Men det lyder jo alt sammen fornuftigt nok, så jeg kan vist godt give point nu :-)
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
Dyk ned i databasernes verden på et af vores praksisnære Access-kurser

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