Access veritabanından veri almak

Katılım
31 Ağustos 2005
Mesajlar
1,534
Excel Vers. ve Dili
Excel 2003 - Türkçe
Merhaba;

Ekteki çalışmamda;

Excel userformundaki Combobox'a, aynı klasör içindeki access veritabanında bulunan tablodaki isimlerin yüklenerek, isim seçildiğinde, seçilen bu isme ait bilgilerin textboxlara yazdırılması konusundaki yardımlarınıza şimdiden teşekkürler.

Selamlarımla.
 

Mahmut Kök

Özel Üye
Katılım
14 Temmuz 2006
Mesajlar
878
Excel Vers. ve Dili
Excel 2007 - Türkçe
Ekli örneğe bakınız. Bu excel belgesi ile deneme.mdb dosyanızın aynı klasörde bulunması lazım. DAO referansı gerektirir.
 
Katılım
15 Haziran 2006
Mesajlar
3,704
Excel Vers. ve Dili
Excel 2003, 2007, 2010 (TR)
Merhabalar

ADO ile çözüm alternatifi için de aşağıdakileri, Userformunuzun kod sayfasına kopyalayınız.

Kod:
Option Explicit
Private Sub ComboBox1_Change()
Dim conn As ADODB.Connection
Dim rs As ADODB.Recordset
Dim Sql As String
Set conn = New ADODB.Connection
Set rs = New ADODB.Recordset
conn.ConnectionString = "Driver={Microsoft Access Driver (*.mdb)};" _
                      & "Dbq=" & ThisWorkbook.Path & "\deneme.mdb;" _
                      & "Uid=;" _
                      & "Pwd=;"
conn.Open
Sql = "SELECT adisoyadi, 'TC Kimlik', adresi FROM Müşteriler WHERE adisoyadi='" & ComboBox1 & "'"
rs.Open Sql, conn, 1, 3
TextBox2 = rs(0)
TextBox3 = rs(1)
TextBox4 = rs(2)
rs.Close
conn.Close
Set rs = Nothing
Set conn = Nothing
End Sub
Private Sub UserForm_Initialize()
Dim conn As ADODB.Connection
Dim rs As ADODB.Recordset
Dim Sql As String
Dim kayit As Integer
Set conn = New ADODB.Connection
Set rs = New ADODB.Recordset
conn.ConnectionString = "Driver={Microsoft Access Driver (*.mdb)};" _
                      & "Dbq=" & ThisWorkbook.Path & "\deneme.mdb;" _
                      & "Uid=;" _
                      & "Pwd=;"
conn.Open
Sql = "SELECT DISTINCT adisoyadi FROM Müşteriler"
rs.Open Sql, conn, 1, 3
Do Until rs.EOF
   ComboBox1.AddItem rs(0)
   rs.MoveNext
Loop
rs.Close
conn.Close
Set rs = Nothing
Set conn = Nothing
End Sub
Not : VBE'de; Tools->References'den, Microsoft ADO Ext. 2.8 for DLL and Security ve Microsoft Activex Data Object 2.8 Library referansları işaretlenmelidir.
 
Son düzenleme:
Katılım
31 Ağustos 2005
Mesajlar
1,534
Excel Vers. ve Dili
Excel 2003 - Türkçe
Sayın Mesleki;

Örneğinizi çalışmama uyarladım.

TextBox2 = dst!adisoyadi
TextBox3 = dst("TC kimlik")
TextBox4 = dst!adresi

kodundaki altı çizili olan satır hata veriyordu.
TextBox3 = dst!TCkimlikno

olarak değiştirdim. Şu an çalışıyor. (Bazı textBoxlar için ! işareti kullanıldığı halde bazılarında (" işaretini kullanmamızın sebebini de açıklarsanız (öğrenmek açısından) sevinirim.

Fakat

Private Sub ComboBox1_Change()

Set dst = dbs.OpenRecordset("select * from tblMusteriler where AdiSoyadi='" & ComboBox1 & "'")

TextBox2 = dst!AdiSoyadi
TextBox3 = dst!TCkimlikno
TextBox4 = dst!VergiDairesi
TextBox5 = dst!Vergino
End Sub

olarak uyguladığım kodda:
Access vertabanındaki bilgilerden biri yoksa (Mesela şirketlerde TC Kimlik no olmadığı için) hata veriyor.

Access'ten veri çektiğimiz sütunlardan bir veya birkaçında veri yoksa bile hata vermemesi için kodda ne gibi değişiklik yapmalıyız.

Selamlarımla.
 

Mahmut Kök

Özel Üye
Katılım
14 Temmuz 2006
Mesajlar
878
Excel Vers. ve Dili
Excel 2007 - Türkçe
Sayın Mesleki;

Örneğinizi çalışmama uyarladım.


olarak değiştirdim. Şu an çalışıyor. (Bazı textBoxlar için ! işareti kullanıldığı halde bazılarında (" işaretini kullanmamızın sebebini de açıklarsanız (öğrenmek açısından) sevinirim..

İkisi de aynı işlemi görüyor. Tırnak içine almamın sebebi, arada boşluk olmasıydı. Yani "TC Kimlik" ten dolayı.... Veritabanında alan adlarının bitişik olması daha yaygın bir kullanım şeklidir. Siz de zaten öyle yapmışsınız.

uyguladığım kodda:
Access vertabanındaki bilgilerden biri yoksa (Mesela şirketlerde TC Kimlik no olmadığı için) hata veriyor.

Access'ten veri çektiğimiz sütunlardan bir veya birkaçında veri yoksa bile hata vermemesi için kodda ne gibi değişiklik yapmalıyız.

Selamlarımla.
Null (Hiçlik) değerindeki verileri metinkutusuna alırken hata alabilirsiniz. Bunun için iki yol önerebilirim:

Birincisi; isnull(dst("adisoyadi))=true then .... şeklinde bir eğer sorgusuyla, bu verinin aktarılmamasını sağlayabilirsiniz.

İkincisi ve daha kolay kullanımlı olanı da, aktarma sonuna & "" eklemenizdir. Yani; textbox1= dst("adisyadi") & "" şeklinde yaparsanız, boş verileri de boş olarak aktarabilirsiniz.
 
Katılım
31 Ağustos 2005
Mesajlar
1,534
Excel Vers. ve Dili
Excel 2003 - Türkçe
Sayın Mesleki;

Her zamanki gibi yine imdadıma yetiştiniz.

Çok teşekkür ediyorum.
 
Üst