• DİKKAT

    DOSYA İndirmek/Yüklemek için ÜCRETLİ ALTIN ÜYELİK Gereklidir!
    Altın Üyelik Hakkında Bilgi

Soru Accesden Düşeyara (Excelden Vba ile)

leonadies

Excel Derya Deniz Bizde Kulaç Atmaya Çalışıyoruz:)
Altın Üye
Katılım
12 Şubat 2015
Mesajlar
520
Excel Vers. ve Dili
Office 2016 TR 64 Bit Windows
Üstadlar merhaba; Baya araştırdım ama güzel örnek bulamadım.

SiparislerDBO adlı veritabından Sipariş numarasına göre Düşeyara yapacak VBA ihtiyacım var.
Excelde sipariş numaralarını D sütununa gireceğim. Urun Adı olarak E sütununa satır bazında getirecek.

Tüm dosyalarımı ekledim.


AccesVlookup.jpg
AccesVlookupExcel.jpg
 

Ekli dosyalar

Merhaba;

Table Recordset olarak açıp "Filter" özelliğini kullanarak amacınıza ulaşabilirsiniz.

Filter Reference : Filter property (ADO)

.
 
Merhaba Vba olarak gerekiyor hocam :) Projeden ufak kesit diyelim
 
Alternatif ......



C#:
Sub Test()
    Dim adoCN As Object, SourceFile As String, strSQL As String
          
    Range("E2:E" & Rows.Count) = ""
    
    Set adoCN = CreateObject("ADODB.Connection")
    
    SourceFile = ThisWorkbook.Path & "\SiparislerDBO.accdb"
    
    adoCN.Provider = "Microsoft.ACE.OLEDB.12.0"
    adoCN.ConnectionString = SourceFile
    adoCN.Open
    
    strSQL = " Select  T2.[UrunAd] From [Excel 12.0;HDR=Yes;Database=" & ThisWorkbook.FullName & "].[Giris$] As T1 " _
           & " Inner Join " _
           & " [SiparisTBL] As T2 " _
           & " On (Cstr(T1.[Siparis No]) = T2.[SiparisNo]) " _
           & " Where T1.[Siparis No] Is Not Null"
   
    Set RS = adoCN.Execute(strSQL)
    
    Range("E2").CopyFromRecordset RS
    
    adoCN.Close
    Set adoCN = Nothing
End Sub

.
 
Son düzenleme:
Ellerine sağlı üstadım :)
 
Merhaba,

İnner join sonuç bulamazsa boş bırakma yapmaz ve bulabildiği sonuçları sırası ile getirir.
Left join kullanırsanız eğer access çalışmasında sonuç dönmezse ilgili sipariş numarasını boş bırakır.
Çalışmanın durumuna göre left join kullanmak daha doğru sonuç getirecektir.

Aradaki farkı anlamak için aşağıdaki linkleri inceleyebilirsiniz.

https://www.sqlkodlari.com/20-sql-left-join-kullanimi.asp

https://www.sqlkodlari.com/19-sql-inner-join-kullanimi.asp
 
Bu soruya özel hazırlanmış olan yukarıdaki 4 No'lu mesajda yer alan kodda Inner veya Left Join her ikisi de kullanılabilir ve her ikisi de doğru çalışır, çünkü burada yapılan iş, Join işleminden sonra tüm alanları yazdırmıyoruz...... sorunun orjinalinde olduğu gibi, sadece "Ürün Adı" alanı yazdırılıyor. Yani, soruda belirtildiği gibi Excel'in Vlookup-Düşeyara simülasyonu yapılıyor.

.
 
@Haluk hocam merhaba,

İnner join tam olarak düşeyara'yı karşılamıyor. İnner join ortak alanları getirdiği için 4 tane sipariş numarasının ürün adını getirmek isterseniz, access tablosunda tüm sipariş numaralarının olması gerekiyor. Tabloda sipariş numaralarından biri olmazsa , ortak sonuçları getirdiği için eşleşmelerde kayma olabilir. Left join'de ise soldaki tablo değerlerine göre sonuç getireceği için eşleşmeyen sipariş numarasını boş bırakır.
 

Ekli dosyalar

Evet, "Left Join" kullanmak daha akılcı görünüyor, çünkü örnek tablodaki tüm Sipariş No'ların Access tablosunda olup olmadığını bilmiyoruz....

.
 
Geri
Üst