Avatar billede bernhof Nybegynder
12. november 2001 - 14:54 Der er 33 kommentarer og
2 løsninger

SQL: Hent felter fra Access DB

Hej!

Jeg leder efter en SQL-streng, som kan skaffe mig samtlige felters navne i min database...

fx vare_ID, vare_titel, osv.

Er der nogen der kan hjælpe mig?
Avatar billede terry Ekspert
12. november 2001 - 14:55 #1
ADO eller DAO
Avatar billede bennytordrup Nybegynder
12. november 2001 - 14:59 #2
Det nærmeste, jeg kan komme, er tabelnavne med denne her:

SELECT Name
FROM MSysObjects
WHERE (Type=1) AND (Name NOT LIKE \'MSYS*\')
Avatar billede bennytordrup Nybegynder
12. november 2001 - 15:00 #3
Ellers må du gennem DAO TableDefs Collection, som terry foreslår
Avatar billede terry Ekspert
12. november 2001 - 15:02 #4
And that only works with local tables (not linked)
Avatar billede loss Nybegynder
12. november 2001 - 15:02 #5
vil du bare vælge alle felter eller hvad....
så skal du bare skrive SELECT * FROM MSysObjects
Avatar billede bennytordrup Nybegynder
12. november 2001 - 15:03 #6
loss>> Det kan højst give dig tabelnavnene
Avatar billede loss Nybegynder
12. november 2001 - 15:06 #7
er det ikke osse det han vil, eller er jeg bare ikke stået op endnu :)
Avatar billede bennytordrup Nybegynder
12. november 2001 - 15:07 #8
loss>> Han ønsker feltnavnene, så go\'morgen :-)
Avatar billede terry Ekspert
12. november 2001 - 15:07 #9
field names too loss!
Avatar billede terry Ekspert
12. november 2001 - 15:07 #10
you can do it in code!
Avatar billede loss Nybegynder
12. november 2001 - 15:09 #11
hehe
Avatar billede bernhof Nybegynder
12. november 2001 - 15:15 #12
hvis nu jeg gerne vil have alle feltnavne fra tabellen \"tblVarer\" ... hvad skal jeg så helt præcist skrive?

fordi jeg jeg får nemlig fejlen:
\"Poster kan ikke læses fordi der ikke er tilladelse til at læse i \'MSysObjects\'\"
Avatar billede terry Ekspert
12. november 2001 - 15:16 #13
You cant!
Avatar billede bernhof Nybegynder
12. november 2001 - 15:18 #14
kan jeg ikke? altså det er bare ikke muligt at finde feltnavne i en tabel gennem ADO?
Avatar billede terry Ekspert
12. november 2001 - 15:20 #15
I didnt say that! You wanted an SQL statement and that is what people were trying to give you. It can be done in ADO/DAO by looping through various collections.

The first thing I asked was ADO or DAO!!!!
Avatar billede bernhof Nybegynder
12. november 2001 - 15:25 #16
ok -- ADO er svaret.. men hvad skal jeg så skrive i mit SQL-statement? (Er jeg fuldstændig tabt? :)
Avatar billede terry Ekspert
12. november 2001 - 15:29 #17
As far as I know, you CAN NOT use a single SQL statement. You can use code to do it.
Avatar billede bernhof Nybegynder
12. november 2001 - 15:30 #18
ok .. fine! men hvilken kode.. kender du den?
Avatar billede terry Ekspert
12. november 2001 - 15:37 #19
I would think I could find something but I am off home in a short while can you wait?

Are you using Access 97 or 2000?
Avatar billede bernhof Nybegynder
12. november 2001 - 15:44 #20
Access 2000!

Det kommer nok an på hvor længe du er hjemmefra.. I lang tid, eller ...?
Avatar billede terry Ekspert
12. november 2001 - 15:46 #21
You should get an answer this evening, how does that sound?
Avatar billede terry Ekspert
12. november 2001 - 15:48 #22
But then if anyone else can give you an answer then it doesnt matter, and if they cant then you will just have to wait IKKE????
Avatar billede bernhof Nybegynder
12. november 2001 - 15:52 #23
hehe -- i aften lyder godt, men jeg kan ikke garantere nogle point hvis nogen skulle komme dig i forkøbet! :)
Avatar billede terry Ekspert
12. november 2001 - 15:53 #24
Well thats the risk I have to take, and when we are only talking 30 then the risk is minimal :o)
Avatar billede bernhof Nybegynder
12. november 2001 - 15:55 #25
heh .. DOUBLE UP! - 60 pts. ;)
Avatar billede bernhof Nybegynder
12. november 2001 - 16:01 #26
Forresten ville det også være en god ting, hvis jeg sammen med felterne kunne få fat på beskrivelsen, som man skriver i Design View i Access... Hvis dette kan lade sig gøre altså :)
Avatar billede bennytordrup Nybegynder
12. november 2001 - 16:10 #27
Hvis du går gennem ADO, kan du bruge connection-objektets OpenSchema til at få et recordset med information om feltnerne:

(følgende forudsætter et åbent connection objekt med navnet cnn

Dim rstSchema As ADODB.Recordset
Set rstSchema = cnn.OpenSchema(adSchemaColumns)
 
Do Until rstSchema.EOF
  Debug.Print \"Table name: \" & _
      rstSchema!TABLE_NAME & vbCr & _
      \"Field Name: \" & rstSchema!COLUMN_NAME & vbCr & _
      \"Description: \" & rstSchema!DESCRIPTION & vbCr
  rstSchema.MoveNext
Loop
rstSchema.Close
Avatar billede bernhof Nybegynder
12. november 2001 - 16:34 #28
ok, så mangler jeg så lidt:

kan man på en måde sortere resultaterne, og kan jeg få den til kun at hente felter fra tabellen tblVarer?
Avatar billede bernhof Nybegynder
12. november 2001 - 16:35 #29
nåå jo! hvordan kan jeg få at vide om et felt er primary key?
Avatar billede terry Ekspert
12. november 2001 - 20:46 #30
If we keep to what Benny has given so far then it would look like this and it isnt sorted!

Dim cn As New ADODB.Connection
Dim rs As New ADODB.Recordset
   
   
    cn.Open \"Provider=Microsoft.Jet.OLEDB.4.0; Data Source=D:\\VB\\ADO Example\\ado.mdb\"
       
    Dim rstSchema As ADODB.Recordset
    Set rstSchema = cn.OpenSchema(adSchemaColumns)
 
    Do Until rstSchema.EOF
        If Mid(rstSchema!TABLE_NAME, 1, 4) <> \"MSys\" Then
            Debug.Print \"Table name: \" & _
            rstSchema!TABLE_NAME & vbCr & _
            \"Field Name: \" & rstSchema!COLUMN_NAME & vbCr & _
            \"Description: \" & rstSchema!Description & vbCr
        End If
        rstSchema.MoveNext
    Loop
   
    Set rstSchema = cn.OpenSchema(adSchemaIndexes)
    Do Until rstSchema.EOF
        If Mid(rstSchema!TABLE_NAME, 1, 4) <> \"MSys\" Then
            If rstSchema(\"PRIMARY_KEY\") = True Then
                Debug.Print \"Table name: \" & _
                rstSchema!TABLE_NAME & vbCr & _
                \"Primary Key: \" & rstSchema!COLUMN_NAME
            End If
        End If
        rstSchema.MoveNext
    Loop
   
    rstSchema.Close
    cn.Close
Avatar billede terry Ekspert
12. november 2001 - 20:48 #31
and if you only want to see \"tblVarer\"
then change this line
If Mid(rstSchema!TABLE_NAME, 1, 4) <> \"MSys\" Then
           
to
If rstSchema!TABLE_NAME = \"tblVarer\" Then
           
Avatar billede bernhof Nybegynder
13. november 2001 - 15:19 #32
ok - det ser fint ud, men hvad med at sortere?
Kan man ikke gøre brug af rstSchema.Sort?
Hvis ja, hvordan?
Avatar billede terry Ekspert
13. november 2001 - 15:28 #33
You could try it!

rstSchema.Sort \"TABLE_NAME ASC\"
Avatar billede bernhof Nybegynder
13. november 2001 - 17:49 #34
Well .. det ser ikke ud til at virke med sorteringen, men det gør nu heller ikke så meget! Derfor må I dele pointene, terry og benny.tordrup, da I begge har været til stor hjælp... Jeg har samtidig sat pointene op til 100 for at I skulle få noget ud af det, og I kan derfor gå herfra med 50 hver :)

Men hvis nogen skulle finde ud af hvordan det med sorteringen af et OpenSchema RecordSet foregår, må vedkommende meget gerne skrive sit svar på denne side, så vil jeg give ham/hende point for et brugbart svar!

Mvh. Mikkel
Avatar billede terry Ekspert
13. november 2001 - 19:14 #35
OK! og mange tak :o)
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