Ado Left Join Kullanma

Mdemir63

Altın Üye
Katılım
7 Temmuz 2006
Mesajlar
2,867
Excel Vers. ve Dili
Ofis2010 32Bit Türkçe
Altın Üyelik Bitiş Tarihi
19-02-2026
Selamlar

Arkadaşlar
İcmal çalışma kitabındaki Sonuc sayfasının D sütunundaki Daire no kısmına göre, Kapalı Data Çalışma kitabındaki Veri Sayfası C sütunundaki Daire no larına eşit olanların Sabit toplamı sütunundan o dairelere ait olanlarını Sabit Aidat Bedeli sütununa getirmek istiyorum.

Aslında Düşeyara ya da İndis ile yapıyorum. Ancak dosya büyük olduğundan çok kasıyor. O yüzden ADO da Left Join (Soldan Birleştir) yöntemi ile yapmak istiyorum. Uğraştım ama Sorgu kısmını bir türlü yapamadım. Ya da kod ile nasıl yapılabilirse . Şimdiden çok teşekkürler
 

Ekli dosyalar

Erkan Akayay

Altın Üye
Katılım
8 Aralık 2006
Mesajlar
405
Excel Vers. ve Dili
Ofis 365 TR 64 Bit
Altın Üyelik Bitiş Tarihi
21-11-2028
Kolay bu yaaaa deyip uğraştım. Kulaklarınızı çınlattın biraz.
Bayağı yorgun ve uykusuzum. Herşeyi doğru yaptığıma eminim değer gelmiyor.
Yorgunluk ve uykusuzluktan icmaldeki Daire nolarının data dosyasına göre farklı olup boşluk içerdiğini bayağı geç farkettim.
Ondan uğraşıp durmuşum.
Diğer bir husus icmaldeki D.No başlığın daire no diye değiştirdim. Aradaki nokta yüzünden sıkıntı çıkardı, hata verdi.

Kod:
Sub AdoLeftJoin()
Dim con As Object, rs As Object, qStr As String, myPath As String, clsPath As String
Set con = CreateObject("ADODB.Connection")
Set rs = CreateObject("ADODB.Recordset")
myPath = ThisWorkbook.FullName
clsPath = "C:\Users\admin\Desktop\Mdemir\Data.xlsx"
con.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & myPath & _
";Extended Properties='Excel 12.0;HDR=YES'"
qStr = "SELECT b.[Sabit Toplamı] FROM [Sonuc$D2:D" & Range("C" & Rows.Count).End(3).Row & "] AS a LEFT JOIN [Excel 12.0 Xml;HDR=YES;DATABASE=" & clsPath & "].[Veri$] AS b ON a.[D_No]=b.[Daire No]"
rs.Open qStr, con, 1, 1
Range("G3").CopyFromRecordset rs
rs.Close: con.Close
Set con = Nothing: Set rs = Nothing: qStr = vbNullString: myPath = vbNullString: clsPath = vbNullString
End Sub
 

Mdemir63

Altın Üye
Katılım
7 Temmuz 2006
Mesajlar
2,867
Excel Vers. ve Dili
Ofis2010 32Bit Türkçe
Altın Üyelik Bitiş Tarihi
19-02-2026
Selamlar

Resimdeki hatayı verdi

248501
 

Erkan Akayay

Altın Üye
Katılım
8 Aralık 2006
Mesajlar
405
Excel Vers. ve Dili
Ofis 365 TR 64 Bit
Altın Üyelik Bitiş Tarihi
21-11-2028
Merhaba,
İcmal dosyasında iki değişiklik yaptım demiştim.
1. Daire noları arasında boşluk var. Eşitlemek için boşlukları kaldırdım.Data sayfasındaki daire nolarında yok.
2. İcmal dosyasında D.NO başlığı nokta var diye sıkıntı çıkarttı. D-No olarak değiştirdim demiştim.
3. Bunu belitmemiştim ama kapalı dosya yolunu (clsPath) düzenleyin.
Buna göre çalışan dosya ektedir.
248504
 

Ekli dosyalar

Haluk

Özel Üye
Katılım
7 Temmuz 2004
Mesajlar
12,406
Excel Vers. ve Dili
64 Bit 2010 - İngilizce
+
Google Sheets
+
JScript
Altın Üyelik Bitiş Tarihi
.........
......
Diğer bir husus icmaldeki D.No başlığın daire no diye değiştirdim. Aradaki nokta yüzünden sıkıntı çıkardı, hata verdi.
.......
....

Erkan Bey, bu tür karakterlerin yerine SQL metninde "#" kullanabilirsiniz. Yani, veri tabanında "D.No" kullanılabilir, ama siz SQL metninde bu alana referans verirken orjinal alan adının yerine "D#No" kullanmalısınız....

.
 
Son düzenleme:

Mdemir63

Altın Üye
Katılım
7 Temmuz 2006
Mesajlar
2,867
Excel Vers. ve Dili
Ofis2010 32Bit Türkçe
Altın Üyelik Bitiş Tarihi
19-02-2026
Selamlar

Elinize sağlık Dosya çalıştı
Yalnız sorgu kısmın da ki a ve b nin ne anlama geliyor anlayamadım
 

Erkan Akayay

Altın Üye
Katılım
8 Aralık 2006
Mesajlar
405
Excel Vers. ve Dili
Ofis 365 TR 64 Bit
Altın Üyelik Bitiş Tarihi
21-11-2028
Benim verdiğim uydurma takma adlar. Başka şeylerde yazabilirdim.
Literatürde as x şeklinde geçer. Ama kısaca x şeklinde kullanabiliriz.
İki Tablo birleştiriyoruz. Bu iki tabloyu birbirinden ayırıp adreslemem lazımki ilişkide ve getirilecek değerde hangi alanın hangi tabloya ait olduğu anlaşılsın. Bu şekilde isimlendirmezsek bu alan hangi tabloda diye SQL kızar. a'nın D_No ile b'nin Daire Nosu diye hem uydurduğum tablo adını hem alanı ilişkilendirdim.
Bu ilişkilerde, sub querylerde vb. her durumda kullanılması zorunlu bir durumdur.
Benzer ama daha basit bir durumu kolay bir sorguda da yaşayabilirsiniz. Sorguda Sum(Miktar) diye bir işlem yaptırdınız.
Sum(Miktar) as Toplam diye bir alan başlıklandırmasını yaparsınız. Benzer bir durumdur.
 

Mdemir63

Altın Üye
Katılım
7 Temmuz 2006
Mesajlar
2,867
Excel Vers. ve Dili
Ofis2010 32Bit Türkçe
Altın Üyelik Bitiş Tarihi
19-02-2026
Benim verdiğim uydurma takma adlar. Başka şeylerde yazabilirdim.
Literatürde as x şeklinde geçer. Ama kısaca x şeklinde kullanabiliriz.
İki Tablo birleştiriyoruz. Bu iki tabloyu birbirinden ayırıp adreslemem lazımki ilişkide ve getirilecek değerde hangi alanın hangi tabloya ait olduğu anlaşılsın. Bu şekilde isimlendirmezsek bu alan hangi tabloda diye SQL kızar. a'nın D_No ile b'nin Daire Nosu diye hem uydurduğum tablo adını hem alanı ilişkilendirdim.
Bu ilişkilerde, sub querylerde vb. her durumda kullanılması zorunlu bir durumdur.
Benzer ama daha basit bir durumu kolay bir sorguda da yaşayabilirsiniz. Sorguda Sum(Miktar) diye bir işlem yaptırdınız.
Sum(Miktar) as Toplam diye bir alan başlıklandırmasını yaparsınız. Benzer bir durumdur.
Açıklayıcı bilgiler için ayrıca çok teşekkür ederim.
Elinize Emeğinize sağlık.

Saygılar
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,272
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Alternatif...

C++:
Option Explicit

Sub Update_Data()
    Dim My_File As String
   
    Application.ScreenUpdating = False
   
    My_File = "'" & ThisWorkbook.Path & "\[Data.xlsx]Veri'!"
   
    Range("G3:G" & Rows.Count).ClearContents
   
    With Range("G3:G" & Cells(Rows.Count, "B").End(3).Row)
        .Formula = "=INDEX(" & My_File & "I:I,MATCH(SUBSTITUTE(D3,"" "","""")," & My_File & "C:C,0))"
        .Value = .Value
    End With
   
    Application.ScreenUpdating = True
   
    MsgBox "İşleminiz tamamlanmıştır.", vbInformation
End Sub
 

Mdemir63

Altın Üye
Katılım
7 Temmuz 2006
Mesajlar
2,867
Excel Vers. ve Dili
Ofis2010 32Bit Türkçe
Altın Üyelik Bitiş Tarihi
19-02-2026
Selamlar

@Korhan Ayhan Hocam çok teşekkür ederim alternatif çözümünüz için

Saygılar
 

Haluk

Özel Üye
Katılım
7 Temmuz 2004
Mesajlar
12,406
Excel Vers. ve Dili
64 Bit 2010 - İngilizce
+
Google Sheets
+
JScript
Altın Üyelik Bitiş Tarihi
Konu hakkında ben de ADO/SQL ile bir alternatif hazırladım....

Bu alternatifte;

-Geçici bir Excel dosyası oluşturuluyor (Data.xlsx)

-Tablo1 ve Tablo2 sayfaları oluşturuluyor (Icmal.xlsb dosyasındaki "Sonuc" sayfasındaki tablo ile Data.xlsx dosyasindaki "Veri" sayfasından verilerle)

-Tablo1 ve Tablo2 sayfalarındaki "Daire No" ile ilgili sütunlarda verilerde karakterler arasında boşluklar varsa, siliniyor ve böylece Left Join sorgusunun sonucunda ilgili aidat tutarları sorunsuzca kapalı Data.xlsx dosyasında "Tablo1" sayfasına yazdırılıyor.

-Daha sonra, kodların yazıldığı Icmal.xlsb dosyasıyla Data.xlsx dosyalarında ilgili tablolarda Left Join ile aidat tutarları Icmal.xlsb dosyasına aktarılıyor.

-İstenirse "Data.xlsx" kod ile silinebilir veya merak ediyorsanız, silmeyip içeriğini görüntüleyebilirsiniz.

.
 

Ekli dosyalar

Son düzenleme:

Mdemir63

Altın Üye
Katılım
7 Temmuz 2006
Mesajlar
2,867
Excel Vers. ve Dili
Ofis2010 32Bit Türkçe
Altın Üyelik Bitiş Tarihi
19-02-2026
Haluk Hocam
Çok Teşekkür ederim.
Elinize Emeğinize Sağlık
 

Haluk

Özel Üye
Katılım
7 Temmuz 2004
Mesajlar
12,406
Excel Vers. ve Dili
64 Bit 2010 - İngilizce
+
Google Sheets
+
JScript
Altın Üyelik Bitiş Tarihi
Not:

Aşağıdaki satırda kırmızı ile belirtildiği şekilde, dosyanın uzantısını "xlsb" yaparsanız, açarken uyarı mesajı gelmez.... daha iyi olur.

Rich (BB code):
    DataFile = ThisWorkbook.Path & Application.PathSeparator & "Test.xlsb"
.
 

Haluk

Özel Üye
Katılım
7 Temmuz 2004
Mesajlar
12,406
Excel Vers. ve Dili
64 Bit 2010 - İngilizce
+
Google Sheets
+
JScript
Altın Üyelik Bitiş Tarihi
ADO/SQL kullanarak başka bir alternatif daha hazırladım.... Bu alternatifte, ayrıca "Data.xlsb" gibi bir dosya oluşturmadan tüm işlemler mevcut açık ve kapalı 2 dosya üzerinden yürütülmektedir.... Bu şekilde, daha az kodla işem yapılmaktadır. Kodlar daha da kısaltılabilir, ama şimdilik bu kadarı yeterli olacaktır....



Not: Sayfadaki Buton'un üzerinde yer alan yazı da düzeltilmiştir... :)


.
 

Ekli dosyalar

Mdemir63

Altın Üye
Katılım
7 Temmuz 2006
Mesajlar
2,867
Excel Vers. ve Dili
Ofis2010 32Bit Türkçe
Altın Üyelik Bitiş Tarihi
19-02-2026
Selamlar

Haluk Hocam
resimdeki hatayı verdi

248530
 

Haluk

Özel Üye
Katılım
7 Temmuz 2004
Mesajlar
12,406
Excel Vers. ve Dili
64 Bit 2010 - İngilizce
+
Google Sheets
+
JScript
Altın Üyelik Bitiş Tarihi
Dosyaları "RAR"'dan çıkartıp, masaüstü falan bir yere yerleştirdikten sonra mı denediniz?

.
 

Haluk

Özel Üye
Katılım
7 Temmuz 2004
Mesajlar
12,406
Excel Vers. ve Dili
64 Bit 2010 - İngilizce
+
Google Sheets
+
JScript
Altın Üyelik Bitiş Tarihi
ADO/SQL ile bir alternatif daha hazırladım..... Ekli dosyada tüm işlemler tek bir SQL sorgusu ile yapılmaktadır.

.
 

Ekli dosyalar

Üst