(29/02/2024, 13:06)atoykan yazdı: Verdiğim kod sadece size fikir vermesi açısından örnekti. TableDef System.Data.OleDb kitaplığında bulunmaz bunun için DAO kitaplığını eklemeniz gerekir. Projenizde Solution Explorer'dan Manage NuGet Packages seçeneğine girin ve Browse'u tıklayıp Microsoft.Office.Interop.Access.Dao paketini bulup install ederek projenize ekleyin. İşlemi tamamladıktan sonra yukarıdaki kodu
mantığında düzenleyerek kullanabilirsiniz.Kod:Imports System.Data.OleDb
Imports Microsoft.Office.Interop.Access.Dao ' DAO'yu ekleyin
Public Class Form1
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim tableName As String = "BağlıTabloAdı" ' Bağlı tablo adını buraya girin
Dim connectionString As String = "provider=microsoft.jet.oledb.4.0;data source=" & Application.StartupPath & "\DataBase.mdb;Persist Security Info=True;Jet OLEDB:Database Password=Şifre" ' Eğer var ise şifreyi girin
Try
Using connection As New OleDbConnection(connectionString)
connection.Open()
Dim linkedDbPath As String = GetLinkedDatabasePath(connection, tableName) ' Bağlı tablonun bağlı olduğu veritabanını al
If Not String.IsNullOrEmpty(linkedDbPath) Then ' Sonuçları görüntüle
MessageBox.Show("Bağlı Tablonun Bağlı Olduğu Veritabanı Yolu: " & linkedDbPath)
Else
MessageBox.Show("Bağlı Tablo Bulunamadı")
End If
End Using
Catch ex As Exception
MessageBox.Show("Hata: " & ex.Message)
End Try
End Sub
Private Function GetLinkedDatabasePath(connection As OleDbConnection, tableName As String) As String
Dim dbPath As String = ""
Dim tableDef As TableDef = connection.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, {Nothing, Nothing, tableName, Nothing}).Rows(0)("TABLE_NAME") ' Bağlı tablonun veritabanının dosya yolunu al
If tableDef IsNot Nothing Then
dbPath = tableDef.Connect
End If
Return dbPath
End Function
Private Function GetLinkedDatabasePath(connection As OleDbConnection, tableName As String) As String
Dim dbPath As String = ""
Dim dbEngine As New DBEngine() ' DAO DBEngine kullanımı
Dim db As Database = dbEngine.OpenDatabase(connection.DataSource) ' Veritabanını aç
For Each tableDef As TableDef In db.TableDefs
If tableDef.Name = tableName Then
dbPath = tableDef.Connect
Exit For
End If
Next
db.Close()
Return dbPath
End Function
End Class
Teşekkür ederim. Sağolun.
Private Function GetLinkedDatabasePath(connection As OleDbConnection, tableName As String) As String
Dim dbPath As String = ""
Dim dbEngine As New DBEngine() ' DAO DBEngine kullanımı
Dim db As Database = dbEngine.OpenDatabase(connection.DataSource) ' Veritabanını aç
For Each tableDef As TableDef In db.TableDefs
If tableDef.Name = tableName Then
dbPath = tableDef.Connect
Exit For
End If
Next
db.Close()
Return dbPath
End Function
function ile bu işlem tamam olur gibi. Sorun şu; bağlı tablo olan yani başka bir klasördeki Access veritabanı tablolarına bağlı olan acces veritabanını şifrelediğim zaman connectionString kısmına bu Access VERİTABANIMA AİT şifreyi yazsamda okumuyor. "HATA GEÇERSİZ PAROLA YAZIYOR". Acces veritabanımda Şifreyi kaldırınca okuyor şifreli olunca okumuyor.Teşekkürler.Kodlar aşağıda
Kod:
Private Sub Button19_Click(sender As System.Object, e As System.EventArgs) Handles Button19.Click
Dim tableName As String = "tb_personel_bilgileri" ' Bağlı tablo adını buraya girin
Dim connectionString As String = "provider=microsoft.jet.oledb.4.0;data source=" & Application.StartupPath & "\DataBase.mdb ;Persist Security Info=True;Jet OLEDB:Database Password=12212"
Try
Using connection As New OleDbConnection(connectionString)
connection.Open()
Dim linkedDbPath As String = GetLinkedDatabasePath(connection, tableName) ' Bağlı tablonun bağlı olduğu veritabanını al
If Not String.IsNullOrEmpty(linkedDbPath) Then ' Sonuçları görüntüle
MessageBox.Show("Bağlı Tablonun Bağlı Olduğu Veritabanı Yolu: " & linkedDbPath)
Else
MessageBox.Show("Bağlı Tablo Bulunamadı")
End If
End Using
Catch ex As Exception
MessageBox.Show("Hata: " & ex.Message)
End Try
End Sub
Private Function GetLinkedDatabasePath(connection As OleDbConnection, tableName As String) As String
Dim dbPath As String = ""
Dim dbEngine As New DBEngine() ' DAO DBEngine kullanımı
Dim db As Database = dbEngine.OpenDatabase(connection.DataSource) ' Veritabanını aç
For Each tableDef As TableDef In db.TableDefs
If tableDef.Name = tableName Then
dbPath = tableDef.Connect
Exit For
End If
Next
db.Close()
Return dbPath
End Function