Left Join Hakkında

Bilgemen

Altın Üye
Katılım
7 Şubat 2021
Mesajlar
58
Excel Vers. ve Dili
2021
Altın Üyelik Bitiş Tarihi
03-01-2026
Merhaba Arkadaşlar
Ekteki dosyada User Form üzerinden ürün adını aradığım zaman id ye göre Hem ürün adını hemde Müşteri bilgilerini left join yaparak listeleme yapmak istiyorum. Müşteri kısmını eklemden önce kod çalışıyordu fakat şimdi Hata Oluştu: 'Stoklistesi.Stokid=SatisListesi.Stokid LEFTJOIN Musteriler ON Satislistesi.Musteriid=Musteriler.Musterii' sorgu ifadesi içindeki sözdizimi hatası (eksik içleç) hatası verdi veriyor. Eski çalışan kodlarda yine aynı user formun içinede kodlar pasife alınmış şekilde. Yardımcı olabilimisiniz. Bu left join mantığını anlamaya çalışıyorum
 

Ekli dosyalar

Bilgemen

Altın Üye
Katılım
7 Şubat 2021
Mesajlar
58
Excel Vers. ve Dili
2021
Altın Üyelik Bitiş Tarihi
03-01-2026
 
Katılım
2 Temmuz 2014
Mesajlar
185
Excel Vers. ve Dili
2021 Türkçe, 64bit
satış tablosundaki MÜşteriId alanı sayısal, oysa müsteri tablosundaki müşteriid alanı metin ilgili alanların türünü aynı yapıp dener misiniz?
ayrıca from kısmını da
FROM (Stoklistesi LEFT JOIN SatisListesi ON Stoklistesi.Stokid = SatisListesi.Stokid) LEFT JOIN Musteriler ON SatisListesi.Musteriid = Musteriler.Musteriid
gibi düzenler misiniz?
 
Katılım
2 Temmuz 2014
Mesajlar
185
Excel Vers. ve Dili
2021 Türkçe, 64bit
bu arada
Kod:
    Do While Not rs.EOF
        ListBox1.AddItem rs.Fields("StokAdı").Value
        ListBox1.List(ListBox1.ListCount - 1, 1) = rs.Fields("Tarih").Value
        ListBox1.List(ListBox1.ListCount - 1, 2) = rs.Fields("Fiyatı").Value
        ListBox1.List(ListBox1.ListCount - 1, 3) = rs.Fields("Adet").Value
        ListBox1.List(ListBox1.ListCount - 1, 4) = rs.Fields("MusteriAdi").Value
        ListBox1.List(ListBox1.ListCount - 1, 5) = rs.Fields("MusteriTelefon").Value
        rs.MoveNext
    Loop
kodu yerine
Kod:
If Not rs.BOF And Not rs.EOF Then ListBox1.Column = rs.GetRows(, , Array(1, 2, 3, 4, 5, 6))
kodu kullanılabilir
 
Son düzenleme:

Bilgemen

Altın Üye
Katılım
7 Şubat 2021
Mesajlar
58
Excel Vers. ve Dili
2021
Altın Üyelik Bitiş Tarihi
03-01-2026
veri tabanındaki sayısalları metin olarak düzelttim. Kodlarıda aşağıdaki gibi revize ettim kodlar çalışıyor fakat her tuşa bastığımda ardından tür uyuşmazlığı hatası veriyor.

Kod:
Private Sub urunadi_Change()
    ' Kullanıcı her yazmaya başladığında tetiklenecek
    Dim sql As String
    Dim searchKeyword As String
    Dim rs As Object
    Dim baglan As Object
    
    ' Bağlantıyı açmak için
    Set baglan = CreateObject("ADODB.connection")
    baglan.Open "provider=microsoft.ace.oledb.12.0;data source=" & ThisWorkbook.Path & "\Datalar.accdb"
    
    ' Text kutusundaki değeri al
    searchKeyword = Trim(urunadi.Text) ' Boşlukları temizle
    
    ' Eğer arama kutusu boşsa, ListBox'ı temizle
    If Len(searchKeyword) = 0 Then
        ListBox1.Clear
        Exit Sub
    End If
    
    ' SQL sorgusunu oluştur
    sql = "SELECT Stoklistesi.Stokid, Stoklistesi.StokAdı, SatisListesi.Tarih, SatisListesi.Fiyatı, " & _
          "SatisListesi.Adet, Musteriler.MusteriAdi, Musteriler.MusteriTelefon " & _
          "FROM (Stoklistesi " & _
               "LEFT JOIN SatisListesi ON Stoklistesi.Stokid = SatisListesi.Stokid) " & _
               "LEFT JOIN Musteriler ON SatisListesi.Musteriid = Musteriler.Musteriid " & _
          "WHERE Stoklistesi.StokAdı LIKE '%" & searchKeyword & "%'"

    ' Recordset nesnesini oluştur
    Set rs = CreateObject("ADODB.Recordset")
    
    On Error GoTo ErrorHandler
    ' Veritabanından veri çekme
    rs.Open sql, baglan, 1, 3 ' 1 = adOpenKeyset, 3 = adLockOptimistic

    ' ListBox'ı temizle
    ListBox1.Clear
    
    ' ListBox ayarlarını yap
    ListBox1.ColumnCount = 6
    ListBox1.ColumnWidths = "100;100;100;100;100;100" ' Müşteri adı ve telefon ekledik

    ' Recordset üzerinden döngü yaparak verileri ListBox'a ekleyin
    Do While Not rs.EOF
        ListBox1.AddItem rs.Fields("StokAdı").Value
        ListBox1.List(ListBox1.ListCount - 1, 1) = rs.Fields("Tarih").Value
        ListBox1.List(ListBox1.ListCount - 1, 2) = rs.Fields("Fiyatı").Value
        ListBox1.List(ListBox1.ListCount - 1, 3) = rs.Fields("Adet").Value
        ListBox1.List(ListBox1.ListCount - 1, 4) = rs.Fields("MusteriAdi").Value
        ListBox1.List(ListBox1.ListCount - 1, 5) = rs.Fields("MusteriTelefon").Value
        rs.MoveNext
    Loop

    ' Recordset ve bağlantıyı kapatma
    rs.Close
    Set rs = Nothing
    baglan.Close
    Set baglan = Nothing
    Exit Sub

ErrorHandler:
    MsgBox "Hata oluştu: " & Err.Description
    Set rs = Nothing
    Set baglan = Nothing
End Sub
Kodları aşağıdaki şekilde düzenledim çalışıyor fakat hemen ardından tür uyuşmazlığı hatası veriyor. veri tabanındaki ıd lerin hepsini metin olarak düzelttim. kod
 
Katılım
2 Temmuz 2014
Mesajlar
185
Excel Vers. ve Dili
2021 Türkçe, 64bit
Kod:
    Do While Not rs.EOF
        ListBox1.AddItem rs.Fields("StokAdı").Value
        ListBox1.List(ListBox1.ListCount - 1, 1) = rs.Fields("Tarih").Value
        ListBox1.List(ListBox1.ListCount - 1, 2) = rs.Fields("Fiyatı").Value
        ListBox1.List(ListBox1.ListCount - 1, 3) = rs.Fields("Adet").Value
        ListBox1.List(ListBox1.ListCount - 1, 4) = rs.Fields("MusteriAdi").Value
        ListBox1.List(ListBox1.ListCount - 1, 5) = rs.Fields("MusteriTelefon").Value
        rs.MoveNext
    Loop
bu kodu iptal edip önerdiğim
If Not rs.BOF And Not rs.EOF Then ListBox1.Column = rs.GetRows(, , Array(1, 2, 3, 4, 5, 6)) kodunu kullanarak dener misiniz?
 
Son düzenleme:
Katılım
2 Temmuz 2014
Mesajlar
185
Excel Vers. ve Dili
2021 Türkçe, 64bit
yada
If Not rs.BOF And Not rs.EOF Then ListBox1.Column = rs.GetRows(, , Array("StokAdı", "Tarih", "Fiyatı", "Adet", "MusteriAdi", "MusteriTelefon"))
 
Son düzenleme:

Bilgemen

Altın Üye
Katılım
7 Şubat 2021
Mesajlar
58
Excel Vers. ve Dili
2021
Altın Üyelik Bitiş Tarihi
03-01-2026
Kod:
    Do While Not rs.EOF
        ListBox1.AddItem rs.Fields("StokAdı").Value
        ListBox1.List(ListBox1.ListCount - 1, 1) = rs.Fields("Tarih").Value
        ListBox1.List(ListBox1.ListCount - 1, 2) = rs.Fields("Fiyatı").Value
        ListBox1.List(ListBox1.ListCount - 1, 3) = rs.Fields("Adet").Value
        ListBox1.List(ListBox1.ListCount - 1, 4) = rs.Fields("MusteriAdi").Value
        ListBox1.List(ListBox1.ListCount - 1, 5) = rs.Fields("MusteriTelefon").Value
        rs.MoveNext
    Loop
bu kodu iptal edip önerdiğim
If Not rs.BOF And Not rs.EOF Then ListBox1.Column = rs.GetRows(, , Array(1, 2, 3, 4, 5, 6)) kodunu kullanarak dener misiniz?
Teşekkür ederim kardeşim bu kodla sorunsuz çalıştı eline sağlık
 
Katılım
2 Temmuz 2014
Mesajlar
185
Excel Vers. ve Dili
2021 Türkçe, 64bit
Rica ederim
İyi çalışmalar)
 
Üst