Min idé är så här. Titta på OpenSchema metoden på Connection objektet istället. Mycket smiddigare. Jo det känns nog rätt, men jag hittar inte allt i min hjälp. Nu går det som tåget(nästan) <code></code>Du använder DATA_TYPE, CHARACTER_MAXIMUM_LENGTH, NUMERIC_PRECISION, NUMERIC_SCALE osv... Det här ser ju kanonbra ut, men jag får problem. <code></code>Kanske rättighetsproblem.
Jag har via ett "utforskar-fönster" möjlighet att leta rätt på alla mina mdb-filer.
Dom listas i en listbox. Genom att klicka på mdb filen så ville jag ha fram lite info om filen.
Så här försöker jag:
<code>
MSysObjects = NormalizePath(File1.Path) & File1
SQL = "SELECT MSysObjects.DateCreate, MSysObjects.DateUpdate, MSysObjects.Name, MSysObjects.Type " & _
" From MSysObjects " & _
" Where (((MSysObjects.Type) = 1) And ((Left$([MSysObjects.Name], 1)) <> ""~"") And ((Left$([MSysObjects.Name], 4)) <> ""Msys"")) " & _
" ORDER BY MSysObjects.Name"
Set Rst = Con.Execute(SQL)
MsgBox Rst(3)
MSysObjects = NormalizePath(File1.Path) & File1
SQL = "SELECT MSysObjects.DateCreate, MSysObjects.DateUpdate, MSysObjects.Name, MSysObjects.Type " & _
" From MSysObjects " & _
" Where (((MSysObjects.Type) = 1) And ((Left$([MSysObjects.Name], 1)) <> ""~"") And ((Left$([MSysObjects.Name], 4)) <> ""Msys"")) " & _
" ORDER BY MSysObjects.Name"
Set Rst = Con.Execute(SQL)
MsgBox Rst(3)
</code>
Jag får ett error:
Runtime error '2147217911 (80040e09);
Det går inte att läsa poster(na)
Behörighet att läsa data saknas för MSysObjects.
Då har jag ändå kollat väldigt noga så att lägga till IUSR osv
Vad felas?Sv: Kanske rättighetsproblem.
Sv: Kanske rättighetsproblem.
När jag kör:
Set Rst = Con.OpenSchema(adSchemaTables, Array(Empty, Empty, Empty, "VIEW"))
så får jag bara fram frågorna 8det är ju vad views betyder...)
men kör jag:
Set Rst = Con.OpenSchema(adSchemaTables)
då får jag fram allting.
Jag vill inte ha systemtabellerna.
Några tips?Sv: Kanske rättighetsproblem.
Men ändå lite frågor.
Jag kör nu så här:
<code>
Set Rst = Con.OpenSchema(adSchemaColumns, Array(Empty, Empty, List1.Text))
While Not Rst.EOF
List3.AddItem Rst!COLUMN_NAME
Rst.MoveNext
Wend
Set Rs = Con.OpenSchema(adSchemaProviderTypes)
While Not Rs.EOF
List4.AddItem Rs!TYPE_NAME
List5.AddItem Rs!COLUMN_SIZE
Rs.MoveNext
Wend
</code>
Som det nu är, så får jag fram alla fälten, och alla datatyperna och storleken, men det är inte som jag ville ha det.
Jag ville ha det att den skulle ta fram datatyp och storlek för just dom fälten som jag använder.
Några tips?Sv: Kanske rättighetsproblem.
Här kanske är en början för dig:
<code>
Set Rs = Con.OpenSchema(adSchemaColumns, "TABLE_NAME='" & List1.Text & "'")
Set ListItems = ListView1.ListItems
Do Until Rs.EOF
Set ListItem = ListItems.Add(, , "" & Rs("COLUMN_NAME"))
Select Case Rs("DATA_TYPE")
Case adBoolean
ListItem.SubItems(1) = "Boolean"
Case adTinyInt
ListItem.SubItems(1) = "TinyInt"
Case adSmallInt
ListItem.SubItems(1) = "SmallInt"
Case adInteger
ListItem.SubItems(1) = "Integer"
Case adDate
ListItem.SubItems(1) = "Date"
Case adCurrency
ListItem.SubItems(1) = "Currency"
Case adDecimal
ListItem.SubItems(1) = "Decimal"
Case adDouble
ListItem.SubItems(1) = "Double"
Case adGUID
ListItem.SubItems(1) = "GUID"
Case adSingle
ListItem.SubItems(1) = "Single"
Case adChar
ListItem.SubItems(1) = "Char"
ListItem.SubItems(2) = rs("CHARACTER_MAXIMUM_LENGTH")
Case adWChar
ListItem.SubItems(1) = "Char (Unicode)"
ListItem.SubItems(2) = rs("CHARACTER_MAXIMUM_LENGTH")
Case adVarChar
ListItem.SubItems(1) = "VarChar"
ListItem.SubItems(2) = rs("CHARACTER_MAXIMUM_LENGTH")
Case adVarWChar
ListItem.SubItems(1) = "VarChar (Unicode)"
ListItem.SubItems(2) = rs("CHARACTER_MAXIMUM_LENGTH")
End Select
Rs.MoveNext
Loop
</code> Sv: Kanske rättighetsproblem.
Först, error:
3251 Objectet eller providen kan inte utföra den här åtgärden.
Och så pekar han på den här raden:
Set Rs = Con.OpenSchema(adSchemaColumns, "TABLE_NAME='" & List1.Text & "'")
Con öppnar jag med:
ConStr = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & NormalizePath(File1.Path) & File1 & ";" & _
"Persist Security Info=False"
Set Con = CreateObject("adodb.connection")
Con.Open ConStr
och där har jag inga problem.
Han vill också ha ListItems, ListItem dimmade,men jag är osäker på vad för variabel det skall vara.Sv: Kanske rättighetsproblem.
Jag visar informationen i en listview istället för i listboxar. Det är därför jag använder
Exemplet använder bara tre kolumen i Listviewn. Med det är bara för dig att fylla på:
<code>
' * Lägg till en listview
' * Lägg till Tre ColumnHeaders i ListView1
' + Name
' + Type
' + Size
Dim ListItem as ListItem
Dim ListItems as ListItems
Set Rs = Con.OpenSchema(adSchemaColumns, Array(Empty, Empty, List1.Text))
Set ListItems = ListView1.ListItems
Do Until Rs.EOF
Set ListItem = ListItems.Add(, , "" & Rs("COLUMN_NAME"))
Select Case Rs("DATA_TYPE")
Case adBoolean
ListItem.SubItems(1) = "Boolean"
Case adTinyInt
ListItem.SubItems(1) = "TinyInt"
Case adSmallInt
ListItem.SubItems(1) = "SmallInt"
Case adInteger
ListItem.SubItems(1) = "Integer"
Case adDate
ListItem.SubItems(1) = "Date"
Case adCurrency
ListItem.SubItems(1) = "Currency"
Case adDecimal
ListItem.SubItems(1) = "Decimal"
Case adDouble
ListItem.SubItems(1) = "Double"
Case adGUID
ListItem.SubItems(1) = "GUID"
Case adSingle
ListItem.SubItems(1) = "Single"
Case adChar
ListItem.SubItems(1) = "Char"
ListItem.SubItems(2) = rs("CHARACTER_MAXIMUM_LENGTH")
Case adWChar
ListItem.SubItems(1) = "Char (Unicode)"
ListItem.SubItems(2) = rs("CHARACTER_MAXIMUM_LENGTH")
Case adVarChar
ListItem.SubItems(1) = "VarChar"
ListItem.SubItems(2) = rs("CHARACTER_MAXIMUM_LENGTH")
Case adVarWChar
ListItem.SubItems(1) = "VarChar (Unicode)"
ListItem.SubItems(2) = rs("CHARACTER_MAXIMUM_LENGTH")
End Select
Rs.MoveNext
Loop
</code>