ich hab nen vb.net prog, in das ich die Tabellen aus einer Access db einlesen will... ich hab auch schon den query mit dem ich das machen kann:
SELECT MSysObjects.Name FROM(MSysObjects) WHERE (((MSysObjects.Type)=1) AND ((MSysObjects.Flags)=0) AND ((LCase(Left([Name],4)))<>'usys')) OR (((MSysObjects.ForeignName) Is Not Null)) ORDER BY MSysObjects.Name;
ich verbinde mich zur datenbank über OLEDB:
"Provider=Microsoft.Jet.OLEDB.4.0;Data Source="
jetz is das problem das ich, wenn ich den query vom programm aus starte, bekomm ich die meldung, dass ich keinen zugriff auf die systemtabellen hab... was kann ich da machn?
Die sauberste Lösung wäre sicher ein Ausweichen auf ein weniger "verschlossenes" Datenbankformat bzw. auf einen Datenbankserver. Aber du fragst nach Access, und das kommt leider als Datengrab immer noch vor.
Wenn es von extern nicht geht, dann versuch es von intern, mit Automatisierung: VBA von VB.NET aus. Wir machen das gelegentlich von Word aus, meist aber anders herum: Word von Access aus automatisieren. Hier http://support.microsoft.com/kb/317113/de steht prinzipiell, wie's geht.
Um die Tabellen zu ermitteln, gibt es m.W. zwei Varianten: 1. Wenn auf dem PC, auf dem Deine Anwendung läuft, Access vorhanden ist, kannst Du Access selbst verwenden, z.B. so:
Zugriff auf die Tabellen gibt es dann mit der Auflistung: AccApp.CurrentDb.TableDefs
Notwendige Verweise im Projekt: Microsoft.Office.Core Microsoft.Office.Interop.Access
2.Wenn das nicht geht, kannst Du noch DAO verwenden: (Code aus dem Kopf geschrieben, daher nur als Anregung zu verstehen)
Dim DB As dao.Database Dim DBE As dao.DBEngine
DBE = New dao.DBEngine DBE.SystemDB = Systemmdw DBE.CreateWorkspace("", Benutzername, Kennwort) DB = DBE.OpenDatabase(DBNameMitPfad, False, False, ";pwd=" & Kennwort) Und dann wieder Zugriff auf die Tabellen-Auflistung mit: DB.TableDefs
Hast du während des Zugriffs vielleicht die Access-DB und die Entwurfsansicht der Tabelle offen? Wenn ja, dann mache die Entwurfsansicht zu, und du kannst auf die Tabelle zugreifen.