Finns tabell??
Lyckas ej hitta något sätt att från VB få reda på om en viss tabell finns
i databasen. Någon som kan mer än mig??
Mvh
MiZ
Svara
Sv: Finns tabell??
Använder du ADO eller DAO?
Har gjort en funktion åt dig för ADO:
<code>
Public Function FindTable(Connection As ADODB.Connection, TableName As String)
Dim rs As ADODB.Recordset
'TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME, TABLE_TYPE
Set rs = Connection.OpenSchema(adSchemaTables, Array(Empty, Empty, TableName, Empty))
If rs.EOF Then
FindTable = False
Else
FindTable = True
End If
rs.Close
End Function
</code>
Du anropar den så här:
<code>
Public Sub Test()
Dim con As ADODB.Connection
Set con = New ADODB.Connection
con.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Persist Security Info=False;" & _
"Data Source=c:\test.mdb"
If FindTable(con, "User") Then
Debug.Print "User finns!"
Else
Debug.Print "User saknas!"
End If
If FindTable(con, "Users") Then
Debug.Print "Users finns!"
Else
Debug.Print "Users saknas!"
End If
con.Close
End Sub
</code>
Svara
Sv: Finns tabell??
Kalas! Men - måste jag använda objektet con, jag är ju redan i databasen (VB Acess)?
Svara
Sv: Finns tabell??
Eftersom du utelämnade den informationen så antog jag att du använde ADO Genom VB i VB.
Inte DAO genom VB i Access. Då kan du istället skriva:
<code>
Public Function FindTable(TableName As String) As Boolean
Dim db As DAO.Database
Dim TableDef As DAO.TableDef
Set db = CurrentDb
For Each TableDef In db.TableDefs
If TableDef.Name = TableName Then
FindTable = True
Exit For
End If
Next
End Function
</code>
Eller den lite fulare varianten:
<code>
Public Function FindTable(TableName As String) As Boolean
Dim db As DAO.Database
Dim TableDef As DAO.TableDef
On Error Resume Next
Set db = CurrentDb
Set TableDef = db.TableDefs(TableName)
FindTable = Not TableDef Is Nothing
End Function
</code>
Svara
Sv: Finns tabell??
Sorry Andreas!
Får nu felmeddelande "User defined type not defined" på dimensioneringen av db (Dim db As DAO.Database)??
Mvh
MiZ
Svara
Sv: Finns tabell??
Jag använder en liknande funktion men jag kollar om det finns en fråga. Du kan snickra om den och kolla tabeller istället.
Function ExistQry(strQryName As String) As Boolean
Dim db As Database
Dim i As Integer
Set db = CurrentDb
db.QueryDefs.Refresh
ExistQry = False
For i = 0 To db.QueryDefs.Count - 1
If strQryName = db.QueryDefs(i).Name Then
'Frågan finns
ExistQry = True
Exit For
End If
Next i
Set db = Nothing
End Function
Svara
Sv: Finns tabell??
Testade att ta bort deklarationen av db och tabledef då funkar det!! Men undrar ändå var som krävs för att kunna deklarera som Database resp. TabelDef??
Tack för hjälpen!!
Mvh
MiZ
Svara
Sv: Finns tabell??
Det är en bugg i Access 2000 (tror även senare versioner lider av det).
Lägg till en referens till "Microsoft DAO X.XX Object Library". Versionsnummer (X.XX) är beroende av vilken Access du använder. Har för mig att det är Access 97 = 3.51, Access2000 = 3.6 osv...
Svara