RE: Access Bağlatısı - umutakkaya - 29/02/2024
Önceki sorun bitmedi hocam.
Sorun şu; içinde bağlı tablo olan bir Access veritabanı şifreleLİ OLURSA
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. Eğer bağlandığım acces veritabanı şifresini kaldırırsam aşağıdaki kodlar işimi görüyor Access vt şifreleyince "HATA GEÇERSİZ PAROLA YAZIYOR".
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 OLEDBatabase 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
RE: Access Bağlatısı - atoykan - 29/02/2024
Bağlı tabloya bağlanırken, şifreli veritabanınıza bağlantı parametrelerini eklemelisiniz. Örneğin,
Kod:
Dim connectionString As String = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Path\To\Your\Database.accdb;Jet OLEDB:Database Password=YourPassword;"
gibi bir Jet OLEDB: Database Password parametresi ekleyerek şifreyi sağlayabilirsiniz.
dbEngine.OpenDatabase yöntemini kullanırken de şifreli veritabanınızın tam yolu ve gerekirse şifresi ile
Kod:
Dim db As Database = dbEngine.OpenDatabase("C:\Path\To\Your\Database.accdb", False, False, ";PWD=şifreniz")
beneri şekilde açmalısınız.
Bağlı tabloların bağlantı bilgileri tablo tanımlarının connect özelliğinde bulunur ve bağlı tablonun tam yolunu ve şifresini içerir. Bağlı tablonun şifresini kontrol etmek içinde şöyle bir kod kullanabilirsiniz:
Kod:
For Each tabledef As TableDef In db.TableDefs
If tabledef.Name = tablename Then
Dim connectInfo As String = tabledef.Connect
If connectInfo.Contains("PWD=") Then ' Şifreyi kontrol et
Dim password As String = connectInfo.Split("PWD=")(1) ' şifre varsa password değişkeni artık şifreyi içerir
End If
Exit For
End If
Next
Re: Access Bağlatısı - umutakkaya - 29/02/2024
Hocam çok güzel gidiyor, ilk sorum yani acceste bir tablo bağlı tablo ise bu tablonun link adresini alma tamam,
Şimdi Access teki bağlı tabloyu yerel tabloya dönüştürmede kodlarınızı deniyorum. Kodlarım aşağıda. Hata resimdeki gibi. Nerde hata var da bağlı bir tabloyu yerel tabloya dönüştür yapamıyorum.
Kod:
Private Function ConvertLinkedTableToTable(ByVal tableName As String)
Dim dbEngine As New DBEngine() ' DAO DBEngine usage
Dim db As Database = dbEngine.OpenDatabase(Application.StartupPath & "\DataBase.mdb ", False, False, ";PWD=12345") ' DB’yi aç
Dim linkedTable As TableDef = Nothing
For Each tableDef As TableDef In db.TableDefs
If tableDef.Name = tableName Then
linkedTable = tableDef
Exit For
End If
Next
If linkedTable IsNot Nothing Then
Dim linkedTableDef As TableDef = db.CreateTableDef(linkedTable.Name, linkedTable.SourceTableName, linkedTable.Connect) ' Bağlantılı tablonun tanımını al
db.TableDefs.Append(linkedTableDef) ' Yeni tablo tanımını DB’ye ekleme
db.TableDefs.Refresh() ' TableDefs’i yenile
db.TableDefs.Delete(linkedTable.Name) ' (İsteğe bağlı) Bağlantılı tabloyu sil
End If
db.Close()
Return db.TableDefs(tableName)
End Function
Private Sub Button22_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button22.Click
Dim tableName As String = "tb_personel_bilgileri" ' Bağlı tablo adını buraya girin
ConvertLinkedTableToTable(tableName)
End Sub
RE: Access Bağlatısı - atoykan - 29/02/2024
Öncelikle her konuda bir soru iletin ki benzer konuda yardım arayanlar veya konuyu inceleyenler açısından karışmasın. Kodu
Kod:
Private Function ConvertLinkedTableToTable(ByVal tableName As String)
Dim dbEngine As New DBEngine() ' DAO DBEngine usage
Dim db As Database = dbEngine.OpenDatabase(Application.StartupPath & "\DataBase.mdb ", False, False, ";PWD=12345") ' DB’yi aç
Dim linkedTable As TableDef = Nothing
For Each tableDef As TableDef In db.TableDefs
If tableDef.Name = tableName Then
linkedTable = tableDef
Exit For
End If
Next
If linkedTable IsNot Nothing Then
Dim linkedTableDef As TableDef = db.CreateTableDef(tableName, dbAttachSavePWD, linkedTable.SourceTableName, linkedTable.Connect) ' Bağlantılı tablonun tanımını al
db.TableDefs.Append(linkedTableDef) ' Yeni tablo tanımını DB’ye ekleme
db.TableDefs.Refresh() ' TableDefs’i yenile
db.TableDefs.Delete(linkedTable.Name) ' (İsteğe bağlı) Bağlantılı tabloyu sil
End If
db.Close()
Return db.TableDefs(tableName)
End Function
Private Sub Button22_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button22.Click
Dim tableName As String = "tb_personel_bilgileri" ' Bağlı tablo adını buraya girin
ConvertLinkedTableToTable(tableName)
End Sub
bu şekilde revize ederek deneyin.
RE: Access Bağlatısı - umutakkaya - 29/02/2024
(29/02/2024, 16:27)atoykan yazdı:
Kod:
Private Function ConvertLinkedTableToTable(connection As OleDbConnection, tableName As String) As Table
Dim dbEngine As New DBEngine() ' DAO DBEngine usage
Dim db As Database = dbEngine.OpenDatabase(connection.DataSource) ' DB’yi aç
Dim linkedTable As TableDef = Nothing
For Each tableDef As TableDef In db.TableDefs
If tableDef.Name = tableName Then
linkedTable = tableDef
Exit For
End If
Next
If linkedTable IsNot Nothing Then
Dim linkedTableDef As TableDef = db.CreateTableDef(linkedTable.Name, linkedTable.SourceTableName, linkedTable.Connect) ' Bağlantılı tablonun tanımını al
db.TableDefs.Append(linkedTableDef) ' Yeni tablo tanımını DB’ye ekleme
db.TableDefs.Refresh() ' TableDefs’i yenile
db.TableDefs.Delete(linkedTable.Name) ' (İsteğe bağlı) Bağlantılı tabloyu sil
End If
db.Close()
Return db.TableDefs(tableName)
End Function
kodu tabloyu bağlı topladan çıkartır tabloya dönüştürür
(29/02/2024, 21:48)atoykan yazdı: Öncelikle her konuda bir soru iletin ki benzer konuda yardım arayanlar veya konuyu inceleyenler açısından karışmasın. Kodu
Kod:
Private Function ConvertLinkedTableToTable(ByVal tableName As String)
Dim dbEngine As New DBEngine() ' DAO DBEngine usage
Dim db As Database = dbEngine.OpenDatabase(Application.StartupPath & "\DataBase.mdb ", False, False, ";PWD=12345") ' DB’yi aç
Dim linkedTable As TableDef = Nothing
For Each tableDef As TableDef In db.TableDefs
If tableDef.Name = tableName Then
linkedTable = tableDef
Exit For
End If
Next
If linkedTable IsNot Nothing Then
Dim linkedTableDef As TableDef = db.CreateTableDef(tableName, dbAttachSavePWD, linkedTable.SourceTableName, linkedTable.Connect) ' Bağlantılı tablonun tanımını al
db.TableDefs.Append(linkedTableDef) ' Yeni tablo tanımını DB’ye ekleme
db.TableDefs.Refresh() ' TableDefs’i yenile
db.TableDefs.Delete(linkedTable.Name) ' (İsteğe bağlı) Bağlantılı tabloyu sil
End If
db.Close()
Return db.TableDefs(tableName)
End Function
Private Sub Button22_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button22.Click
Dim tableName As String = "tb_personel_bilgileri" ' Bağlı tablo adını buraya girin
ConvertLinkedTableToTable(tableName)
End Sub
bu şekilde revize ederek deneyin.
Hocam kusura bakmayın kod hata veriyor acaba eksik olan nedir?
RE: Access Bağlatısı - atoykan - 01/03/2024
Kodun başına
Kod:
Imports Microsoft.Office.Interop.Access.Dao
ekleyin ve ConvertLinkedTableToTable fonksiyonunun başlangıcını
Kod:
Private Function ConvertLinkedTableToTable(ByVal tableName As String)
Dim dbEngine As New DBEngine() ' DAO DBEngine usage
Dim db As Database = dbEngine.OpenDatabase(Application.StartupPath & "\DataBase.mdb", False, False, ";PWD=12345") ' DB’yi aç
Const dbAttachSavePWD As Integer = 536870912
.....................
olarak düzenleyin
|