13. oktober 2000 - 12:41Der 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!
I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
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
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
\"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.
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:
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.
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
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!
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
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
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 ?
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
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
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 ?
Synes godt om
Ny brugerNybegynder
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.