Avatar billede ds-zim Nybegynder
13. oktober 2000 - 12:41 Der er 20 kommentarer og
1 løsning

Hente Navne vha SQL ?

Jeg skal en gang i næste uge igang med en tabelanalyse, og istedet for at sidde og
manuelt indtaste alle tabel-/feltnavne i et dokumenter, er det så muligt at benytte en
forespørgsel(SQL sætning) ?

Det, jeg er interresseret i, er;
1. Alle Tabellers navne
2. Alle Felters navne, grupperet efter tilhørende Tabel

Der er garanteret mere end dette jeg skal bruge, men nu holder jeg weekend :)
så I hører først fra mig på Mandag!

Cheers, Zim
Avatar billede moses Praktikant
13. oktober 2000 - 13:34 #1
Avdrr weekend !!

ds-zim du skulle vel ikke tilfældigvis kende AllForms ??

Så kunne du jo også bruge AllTables

Sub AllTables()
    Dim obj As AccessObject, dbs As Object
    Set dbs = Application.CurrentData
    \' Search for open AccessObject objects in AllTables collection.
    For Each obj In dbs.AllTables
        Debug.Print obj.Name
        \' Eller hvad du nu vil
       
    Next obj
End Sub
Avatar billede moses Praktikant
13. oktober 2000 - 13:59 #2
For c=0 to TableDefs.Count - 1
  CurrentDb.TableDefs(c).Name
next

Kan jo så også gøre det !
Avatar billede moses Praktikant
13. oktober 2000 - 14:00 #3
Så lige den korrekte

With CurrentDb
For c=0 To .TableDefs.Count - 1
  .TableDefs(c).Name
Next c
End With
Avatar billede moses Praktikant
13. oktober 2000 - 14:04 #4
Og  med det hele bliver det:

With CurrentDb
For c=0 To .TableDefs.Count - 1
  With .TableDefs(c)
  For c2=0 To .Fields.Count - 1
    Debug.Print .Fields(c2).Name
  Next c2
  End With
Next c
End With
Avatar billede moses Praktikant
13. oktober 2000 - 14:05 #5
Nu har jeg filosof... tænkt længe nok over det.
Avatar billede moses Praktikant
13. oktober 2000 - 14:07 #6
Og jeg vil ikke høre et ord om, at det er Visual Basic og ikke SQL.
Du kan jo bare få VB til at fylde det hele ud i en tabel.
Avatar billede ds-zim Nybegynder
16. oktober 2000 - 12:45 #7
Det du egentlig siger er, at det IKKE (vha SQL alene) er muligt at udføre ovenstående opgave ? :)
Avatar billede ds-zim Nybegynder
16. oktober 2000 - 13:00 #8
\"Bare\" få VB til at fylde det hele ud i en tabel. æh sure :)
Jeg ville nok mene, at min mangel på erfaring, både programmerings- såvel som Visual Basic
mæssigt, er temli\' transparent :) Og helt ærlig ! Så R jeg i tvivl om, hvordan jeg ville få
ovenstående funktion til at aflevere alle navnene i en tabel :(

Desuden er jeg også interresseret i alle felter i hver individuel tabel.
Avatar billede moses Praktikant
18. oktober 2000 - 14:20 #9
Så gør vi sådan, når vi vasker vort tøj ...

Vi snakker Access 2000:

    Dim MyDB As Database
    Dim Counter1, Counter2 As Integer
    Dim MyTable As TableDef
    Dim MyRecordset As DAO.Recordset
   
    Set MyDB = CurrentDb
    Set MyTable = MyDB.CreateTableDef(\"Olsen2\")
    With MyTable
        .Fields.Append .CreateField(\"Tabelnavn\", dbText, 50)
        .Fields.Append .CreateField(\"Feltnavn\", dbText, 50)
    End With
    MyDB.TableDefs.Delete \"Olsen2\"
    MyDB.TableDefs.Append MyTable
   
    Set MyRecordset = MyDB.OpenRecordset(\"Olsen2\")
    With MyDB
        For Counter1 = 0 To .TableDefs.Count - 1
            With .TableDefs(Counter1)
                If ((dbSystemObject Or dbHiddenObject) And .Attributes) = 0 Then
                    For Counter2 = 0 To .Fields.Count - 1
                        MyRecordset.AddNew
                        MyRecordset![Tabelnavn] = .Name
                        MyRecordset![Feltnavn] = .Fields(Counter2).Name
                        MyRecordset.Update
                    Next Counter2
                End If
            End With
        Next Counter1
    End With
    MyRecordset.Close

Du skal lige ind i Visual Basic og vælge menupunktet Tools / References
Der skal du så finde og sætte flueben ved følgende libraries ud over dem, som allerede er sat:

Microsoft DAO 3.6 Object Library
Avatar billede moses Praktikant
18. oktober 2000 - 14:24 #10
Det giver en tabel \"Olsen2\" med følgende:

Tabelnavn, Feltnavn
\"MinTabel\", \"Felt1\"
\"MinTabel\", \"Felt2\"
\"MinTabel\", \"Felt3\"
\"Næste Tabel\", \"Felt 1\"
\"Næste Tabel\", \"Felt 2\"
\"Næste Tabel\", \"Felt 3\"
...

Så kan du egentlig gøre alt med de data, som du vil.
Lav en report med en wizard, hvor du vælger Tabelnavn, som header, så alle feltnavnene samles under hver tabelnavn.

Du kan også lave en query, hvor du kun udtager for en enkelt tabel.
Avatar billede ds-zim Nybegynder
24. oktober 2000 - 22:22 #11
Cr smukt ud, har haft lidt rigelidt at C til .. Tak 4 hjælpen ! :)
Avatar billede moses Praktikant
25. oktober 2000 - 08:57 #12
Software er smukt !

Tak
Avatar billede ds-zim Nybegynder
07. november 2000 - 11:18 #13
Jeg forstår ikke helt, hvorfor du foreslår at delete tabellen før den bliver append\'ed ?!? ~ (*)

Sub DBDoc()

  Dim MyDB As Database
  Dim Counter1, Counter2 As Integer
  Dim MyTable As TableDef
  Dim MyRecordset As DAO.Recordset
   
  Set MyDB = CurrentDb
  Set MyTable = MyDB.CreateTableDef(\"DBDoc\")
   
  With MyTable
      .Fields.Append .CreateField(\"Tabelnavn\", dbText, 50)
      .Fields.Append .CreateField(\"Feltnavn\", dbText, 50)
  End With
   
  MyDB.TableDefs.Delete \"DBDoc\" (*)
  MyDB.TableDefs.Append MyTable
   
  Set MyRecordset = MyDB.OpenRecordset(\"DBDoc\")

  With MyDB
      For Counter1 = 0 To .TableDefs.Count - 1
          With .TableDefs(Counter1)
              If ((dbSystemObject Or dbHiddenObject) And .Attributes) = 0 Then
                  For Counter2 = 0 To .Fields.Count - 1
                      MyRecordset.AddNew
                      MyRecordset![Tabelnavn] = .Name
                      MyRecordset![Feltnavn] = .Fields(Counter2).Name
                      MyRecordset.Update
                  Next Counter2
              End If
          End With
      Next Counter1
  End With
 
  MyRecordset.Close

End Sub
Avatar billede moses Praktikant
08. november 2000 - 13:20 #14
Prøv at sæt en \'  for linien, så den bliver en kommentar og så kør programmet 2 gange efter hinanden !!!!!!!

Derfor !
Avatar billede ds-zim Nybegynder
10. november 2000 - 10:01 #15
Hvis jeg gerne vil have mere info om de forskellige felter, hvad har jeg så
af muligheder ? Jeg ville fx. gerne have datatypen med og det eneste jeg selv
umiddelbart har kunne udtænkte var, at oprette en række variabler af de forskel-
lige datatyper for derefter at prøve at skrive til dem. Men det får jeg bare kun
fejl ud af.. Har du nogen idé om hvilken fremgangsmåde jeg burde bruge her ? Jeg
er meget interesseret i at vha. VBkode kunne manipulere de forskellige objekters properties!

Cheers, Zim
Avatar billede moses Praktikant
13. november 2000 - 08:19 #16
Sub DBDoc()

  Dim MyDB As Database
  Dim Counter1, Counter2 As Integer
  Dim MyTable As TableDef
  Dim MyRecordset As DAO.Recordset
   
  Set MyDB = CurrentDb
  Set MyTable = MyDB.CreateTableDef(\"DBDoc\")
   
  With MyTable
      .Fields.Append .CreateField(\"Tabelnavn\", dbText, 50)
      .Fields.Append .CreateField(\"Feltnavn\", dbText, 50)
      .Fields.Append .CreateField(\"Felttype\", dbLong)
  End With
   
  MyDB.TableDefs.Delete \"DBDoc\" (*)
  MyDB.TableDefs.Append MyTable
   
  Set MyRecordset = MyDB.OpenRecordset(\"DBDoc\")

  With MyDB
      For Counter1 = 0 To .TableDefs.Count - 1
          With .TableDefs(Counter1)
              If ((dbSystemObject Or dbHiddenObject) And .Attributes) = 0 Then
                  For Counter2 = 0 To .Fields.Count - 1
                      MyRecordset.AddNew
                      MyRecordset![Tabelnavn] = .Name
                      MyRecordset![Feltnavn] = .Fields(Counter2).Name
                      MyRecordset![Felttype] = .Fields(Counter2).Type
                      MyRecordset.Update
                  Next Counter2
              End If
          End With
      Next Counter1
  End With
 
  MyRecordset.Close

End Sub

Konstanter for typekan f.eks. være:

dbBoolean    Boolean
dbByte        Byte
dbChar        Char
dbCurrency    Currency
dbDate        Date/Time
dbDouble      Double
dbFloat      Float
dbInteger    Integer
dbLong        Long
dbLongBinary  Long Binary (OLE Object)
dbMemo        Memo
dbSingle      Single
dbText        Text

Avatar billede moses Praktikant
13. november 2000 - 08:20 #17
Der er mange andre Properties, som du kan spørge på for Field-objektet. Se online hjælpen.
Avatar billede ds-zim Nybegynder
13. november 2000 - 09:01 #18
Jeg går ud fra at D R
http://msdn.microsoft.com/vstudio/technical/documentation.asp
du henviser til :)
Avatar billede ds-zim Nybegynder
13. november 2000 - 09:26 #19
D her er hva\' jeg har læst omkring field object;

- Field Object - http://msdn.microsoft.com/library/officedev/office97/output/F1/D2/S5A2A6.HTM

- Field Object(DAO) - http://msdn.microsoft.com/library/devprods/vs6/vbasic/dao360/daobjfield.htm

Nogen speciel grund til at du bruger dblong til at beskrive tabel.felt.datatype ?!?
Jeg er ikke helt klar over, hvor jeg skal slå op for at \"oversætte\" de tal jeg får hva.
ovenstående løsning. R der en mere logisk forklaring ?
Avatar billede moses Praktikant
13. november 2000 - 09:46 #20
Med online hjælp, tænker jeg på F1 kanppen imens din cursor er på det ord, som du vil have hjælp om.

Type er egentlig en Integer, så det kan du godt nøjes med.

Med hensyn til konstanternes betydning, så:

Sub DBDoc()

  Dim MyDB As Database
  Dim Counter1, Counter2 As Integer
  Dim MyTable As TableDef
  Dim MyRecordset As DAO.Recordset
  Dim TempType As Integer
  Dim MyType As String
   
  Set MyDB = CurrentDb
  Set MyTable = MyDB.CreateTableDef(\"DBDoc\")
   
  With MyTable
      .Fields.Append .CreateField(\"Tabelnavn\", dbText, 50)
      .Fields.Append .CreateField(\"Feltnavn\", dbText, 50)
      .Fields.Append .CreateField(\"FelttypeNr\", dbLong)
      .Fields.Append .CreateField(\"Felttype\", dbText, 50)
  End With
   
  MyDB.TableDefs.Delete \"DBDoc\" (*)
  MyDB.TableDefs.Append MyTable
   
  Set MyRecordset = MyDB.OpenRecordset(\"DBDoc\")

  With MyDB
      For Counter1 = 0 To .TableDefs.Count - 1
          With .TableDefs(Counter1)
              If ((dbSystemObject Or dbHiddenObject) And .Attributes) = 0 Then
                  For Counter2 = 0 To .Fields.Count - 1
                      MyRecordset.AddNew
                      MyRecordset![Tabelnavn] = .Name
                      MyRecordset![Feltnavn] = .Fields(Counter2).Name
                      MyRecordset![FelttypeNr] = .Fields(Counter2).Type
                      TempType = .Fields(Counter2).Type
                      Select Case TempType
                      Case dbBigInt \'16
                          MyType = \"Big Integer\"
                      Case dbBinary \'9
                          MyType = \"Binary\"
                      Case dbBoolean \'1
                          MyType = \"Boolean\"
                      Case dbByte \'2
                          MyType = \"Byte\"
                      Case dbChar \'18
                          MyType = \"Char\"
                      Case dbCurrency \'5
                          MyType = \"Currency\"
                      Case dbDate \'8
                          MyType = \"Date / Time\"
                      Case dbDecimal \'20
                          MyType = \"Decimal\"
                      Case dbDouble \'7
                          MyType = \"Double\"
                      Case dbFloat \'21
                          MyType = \"Float\"
                      Case dbGUID \'15
                          MyType = \"Guid\"
                      Case dbInteger \'3
                          MyType = \"Integer\"
                      Case dbLong \'4
                          MyType = \"Long\"
                      Case dbLongBinary \'11
                          MyType = \"Long Binary (OLE Object)\"
                      Case dbMemo \'12
                          MyType = \"Memo\"
                      Case dbNumeric \'19
                          MyType = \"Numeric\"
                      Case dbSingle \'6
                          MyType = \"Single\"
                      Case dbText \'10
                          MyType = \"Text\"
                      Case dbTime \'22
                          MyType = \"Time\"
                      Case dbTimeStamp \'23
                          MyType = \"Time Stamp\"
                      Case dbVarBinary \'17
                          MyType = \"VarBinary\"
                      Case Else
                          MyType = \"Unknown type\"
                      End Select
                      MyRecordset![Felttype] = MyType
                      MyRecordset.Update
                  Next Counter2
              End If
          End With
      Next Counter1
  End With
 
  MyRecordset.Close

End Sub
Avatar billede ds-zim Nybegynder
07. december 2000 - 16:04 #21
Smukt arbejde der, Moses! Har du den liste over datatyper fra hjælpfilen ?
I øjeblikket prøver jeg at få ovenstående til at køre i VB6.0 Learning Ed.,
men har mine problemer med at forbinde til databasen. Hvordan SET\'r jeg den ?
Med en path angivelse ?
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