Çözüldü VeriTabanına Bağlanıyorum - Kayıt Yaparken Tür Uyuşmazlığı Hatası

Katılım
15 Haziran 2021
Mesajlar
147
Excel Vers. ve Dili
Office 2016
Merhabalar

Office 2016 sürümünü kullanıyorum. Geliştirdiğim bir uygulamada *.accdb veritabanına kayıt yapmak istiyorum. OBDC sürücüm : ACEODBC.


Aşağıdaki kodlarla bir bağlantı açıp userformdaki verileri veritabanına kaydetmek istedim, veri tabanına bağlantı yapıyor ama kayıt ettiği satırlara gelince tür uyuşmazlığı hatası alıyorum. Veri tabanımdaki sütunların veri türleri şu şekilde : Veri Türleri

Bu veri türlerine göre aşağıdaki kodu inceleyebilir misiniz? Kayıt ederken hangi türde hata yaptığımı bulamadım. Aşağıdaki gibi haliyle kodu çalıştırdığımda.
Bu satırda tür uyumazlığı hatası alıyorum.

cmd.Parameters.Append cmd.CreateParameter("p2", 130, 1, , TxtKanalAdi.Text) ' adVarVChar

Kodların tümü

Kod:
Sub VeriTabaninaKaydet()
    Dim dosyaYolu As String
    Dim databaseAdi As String
    Dim databaseSifresi As String
    Dim connStr As String
    Dim cnn As Object
    Dim cmd As Object
    Dim sql As String

    ' Dosya yolu, veritabanı adı ve şifreyi belirle
    dosyaYolu = ThisWorkbook.Sheets("sabitveri").Range("E2").value
    databaseAdi = ThisWorkbook.Sheets("sabitveri").Range("F2").value
    databaseSifresi = ThisWorkbook.Sheets("sabitveri").Range("G2").value

    ' Bağlantı dizesini oluştur
    connStr = "Provider=Microsoft.ACE.OLEDB.12.0;" & _
              "Data Source=" & dosyaYolu & "\" & databaseAdi & ".accdb;" & _
              "Jet OLEDB:Database Password=" & databaseSifresi & ";" & _
              "Persist Security Info=False;"

    ' Bağlantıyı aç
    Set cnn = CreateObject("ADODB.Connection")
    cnn.Open connStr

    ' KanalListesi tablosuna veri ekle
    Set cmd = CreateObject("ADODB.Command")
    cmd.ActiveConnection = cnn
    cmd.CommandType = 1 ' adCmdText

    ' SQL sorgusunu oluştur
    sql = "INSERT INTO KanalListesi (KayitTarihi, KanalAdi, Kategori, EkleyenAPICode) VALUES (?, ?, ?, ?)"

    ' Parametre değerlerini ayarla
    cmd.Parameters.Append cmd.CreateParameter("p1", 135, 1, , Now) ' adDBDate yerine 133
    cmd.Parameters.Append cmd.CreateParameter("p2", 130, 1, , TxtKanalAdi.Text) ' adVarVChar
    cmd.Parameters.Append cmd.CreateParameter("p3", 130, 1, , CmbKat.Text) ' adVarVChar
    cmd.Parameters.Append cmd.CreateParameter("p4", 130, 1, , LblAPICode.Caption) ' adVarVChar
    ' SQL sorgusunu ve parametre değerlerini kullanarak veriyi ekleyin
    cmd.CommandText = sql
    cmd.Execute

    ' Bağlantıyı kapat
    cnn.Close

    ' Başarı mesajı göster
    MsgBox "Veri başarıyla kaydedildi!", vbInformation
End Sub
 
Son düzenleme:
Katılım
15 Haziran 2021
Mesajlar
147
Excel Vers. ve Dili
Office 2016
Kayıt yöntemini ADO ile değiştirerek sorunu çözdüm. Aynı sorunu yaşayan birisi olur diye güncel kodları bırakıyorum. Araştırmak ve öğrenmek her zaman keyiflidir. Devam arkadaşlar. :D


Kod:
Sub VeriTabaninaKaydet()
    Dim dosyaYolu As String
    Dim databaseAdi As String
    Dim databaseSifresi As String
    Dim connStr As String
    Dim cnn As Object
    Dim sql As String

    ' Bağlantı Bilgileri
    dosyaYolu = ThisWorkbook.Sheets("sabitveri").Range("E2").value
    databaseAdi = ThisWorkbook.Sheets("sabitveri").Range("F2").value
    databaseSifresi = ThisWorkbook.Sheets("sabitveri").Range("G2").value

    ' Bağlantı dizesi
    connStr = "Provider=Microsoft.ACE.OLEDB.12.0;" & _
              "Data Source=" & dosyaYolu & "\" & databaseAdi & ".accdb;" & _
              "Jet OLEDB:Database Password=" & databaseSifresi & ";" & _
              "Persist Security Info=False;"

    ' Bağlantıyı aç
    Set cnn = CreateObject("ADODB.Connection")
    cnn.Open connStr

    ' SQL sorgusunu oluştur
    sql = "INSERT INTO KanalListesi (KayitTarihi, KanalAdi, Kategori, EkleyenAPICode) VALUES (" & _
          "'" & Format(Now, "mm/dd/yyyy hh:mm:ss") & "', '" & Me.TxtKanalAdi.value & "', '" & Me.CmbKat.value & "', '" & Me.LblAPICode.Caption & "')"

    ' Veriyi ekle
    cnn.Execute sql

    ' Bağlantıyı kapat
    cnn.Close

    MsgBox "Veri başarıyla kaydedildi!", vbInformation
End Sub
 
Son düzenleme:

veyselemre

Özel Üye
Katılım
9 Mart 2005
Mesajlar
3,614
Excel Vers. ve Dili
Pro Plus 2021
cmd.Parameters.Append cmd.CreateParameter("p1", 135, 1, , Now)

249212
Burada p1 parametresini tarih/zaman damgası olarak seçmişsiniz.

Çalışıyor dediğiniz kodda tek tırnak içerisinde (metin olarak) eklemişsiniz. Yani veritabanında o alan metin olarak tanımlı büyük ihtimalle.

sql = "INSERT INTO KanalListesi (KayitTarihi, KanalAdi, Kategori, EkleyenAPICode) VALUES (" & _
"'" & Format(Now, "mm/dd/yyyy hh:mm:ss") & "', '" & Me.TxtKanalAdi.value & "', '" & Me.CmbKat.value & "', '" & Me.LblAPICode.Caption & "')"
 
Son düzenleme:
Katılım
15 Haziran 2021
Mesajlar
147
Excel Vers. ve Dili
Office 2016
cmd.Parameters.Append cmd.CreateParameter("p1", 135, 1, , Now)

Ekli dosyayı görüntüle 249212
Burada p1 parametresini tarih/zaman damgası olarak seçmişsiniz.

Çalışıyor dediğiniz kodda tek tırnak içerisinde (metin olarak) eklemişsiniz. Yani veritabanında o alan metin olarak tanımlı büyük ihtimalle.

sql = "INSERT INTO KanalListesi (KayitTarihi, KanalAdi, Kategori, EkleyenAPICode) VALUES (" & _
"'" & Format(Now, "mm/dd/yyyy hh:mm:ss") & "', '" & Me.TxtKanalAdi.value & "', '" & Me.CmbKat.value & "', '" & Me.LblAPICode.Caption & "')"
Yanıt için teşekkür ederim. Ben farketmemişim. Ama kod çalışıyor.
 
Üst