Skip to main content

AccessTr.neT


Ado Left Join Problem.

Ado Left Join Problem.

Çözüldü #1
Merhaba ekteki resimdeki gösterdiğim gibi sonuç neden hatalı geliyor?
Sayfa1 A sütununda veriler çift olunca hata veriyor sonuç olarak.
Saygılar.

Kod:
Private Sub CommandButton1_Click()
    Dim con As Object
    Dim rs As Object
    Dim sql As String
    Set con = CreateObject("Adodb.connection")
    Set rs = CreateObject("adodb.recordset")
   
    con.Open "provider=microsoft.ace.oledb.12.0;data source=" & ThisWorkbook.FullName & ";extended properties=""Excel 12.0;hdr=yes"""
    sql = "select t1.bb FROM [Sayfa2$] t2 left Join [Sayfa1$] t1 on t2.aa = t1.aa"
   
    rs.Open sql, con, 1, 1
   
    Sayfa2.[B:B].Clear
    Sayfa2.Range("B2").CopyFromRecordset rs
    rs.Close
    con.Close
    Set rs = Nothing
    Set con = Nothing
End Sub

[Resim: do.php?img=10658]
.rar Ado left Join.rar (Dosya Boyutu: 18,03 KB | İndirme Sayısı: 4)
Cevapla
#2
sonuç için neden hatalı dediğiniz anlamadım sonuçta A4 değeri 1. sayfada 2 defa var, biz de verileri sayfa1'den aldığımıza göre 2 sonucun olması normal o nedenle de b sütununda verileri bir aşağı kaydırıyor. bu durumda ya 2 sütunu birden alıp recordset copy için A2 olacak yada yine 2 sütunu başka yere aktaracaksınız ama tekrar belirteyim sayfa1'tekrarlayan veri varken distinct/group by gibi sorgular olmadan sayfa1deki çift kaydı teke düşürüp sayfa2ye aktaramazsınız
    Sql = "SELECT t2.aa, t1.bb " & _
"FROM [Sayfa1$] as t1 RIGHT JOIN [Sayfa2$] as t2 ON t1.aa = t2.aa;"

rs.Open sql, con, 1, 1

Sayfa2.[B:B].Clear
Sayfa2.Range("A2").CopyFromRecordset rs
sorguyu yukardaki gibi değiştirirseniz sonuç doğru bir şekilde geliyor ama belirtiiğim gibi distinct/group by olmadan sayfa1deki her tekrarlı kayıt sayfa2ye olduğu gibi aktarılır
Cevapla
#3
Berduş hocam sağolun yarın deneyeceğim.
Heralde sadwce Left yerine Right yapmışsınız gördüğüm kadarıyla.Sayfa1 de çift veri olacak.Ayrıca inner join kullanılsa ve sayfa1 de çift olsa problem olur mu?
Ben exceldeki düşeyara mantığını uygulamak istemiştim bir Ado ile deneyim demiştim olmadı. Img-cray
Sadece öğrenme amaçlı örnek yapmıştım denemek için.
Cevapla
#4
Right yada left farketmez o tablolarin yeriyle ilgili siz önce sayfa2 kullanmışsınız o nedenle left kullanmışsınız, ben ise once sayfa1 kullandığım için right kullandım.
Cevapla
#5
Ama düşeyara için 1 şey sorayım mesela sayfa2de a4 degerine sahip veriden sayfa1de 2 tane var sizin çalışmanızda olduğu gibi düşeyara hangi değeri dönderir? Mesela Dlookup sadece ilk değeri dönderir
Cevapla
#6
(03/01/2021, 23:22)berduş yazdı: Ama düşeyara için 1 şey sorayım mesela sayfa2de  a4 degerine sahip veriden sayfa1de 2 tane var sizin çalışmanızda olduğu gibi düşeyara hangi değeri dönderir? Mesela Dlookup   sadece ilk değeri dönderir
Düşeyara ilk bulduğunu getirir bildiğim kadarıyla.
Mesela alttaki gibi iki sütun varsa ve A aranıyorsa ikinciden alınacaksa sonuç 12 olmalı.
Süt1,süt2
A,12
A,15
Cevapla

Bir hesap oluşturun veya yorum yapmak için giriş yapın

Yorum yapmak için üye olmanız gerekiyor

ya da