Skip to main content

AccessTr.neT


Access Bağlatısı

Access Bağlatısı

#13
Ö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 OLEDBLolatabase 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
Cevapla
#14
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

Cevapla
#15
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

[Resim: uwUikzmTJ2r.jpg]
Son Düzenleme: 29/02/2024, 20:28, Düzenleyen: umutakkaya.
Cevapla
#16
Ö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.
Cevapla
#17
(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? [Resim: qBurJ1olnVU.jpg]
Cevapla
#18
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
Cevapla

Bir hesap oluşturun veya yorum yapmak için giriş yapın

Yorum yapmak için üye olmanız gerekiyor

ya da
Task