OLE Sorgusu ile SQL veritabanı tablodan veri çekmek

Katılım
14 Ocak 2005
Mesajlar
792
Excel Vers. ve Dili
Ofis 2010 2016
Altın Üyelik Bitiş Tarihi
13/03/2022
Merhaba arkadaşlar Dışardan veri tabanından yani SQL den OLE Sorgusu ile sorgu çekerken Komut Metni bölümüne yazmış olduğum
sorgumu şudur. SELECT * FROM XXXXX WHERE XXXXXX_TAR BETWEEN '2016-02-01' AND '2016-02-29' dır buradaki tarihleri benim
Excelde Parametre Sayfam var oradan aldırmam mümkün müdür. A4 hücremde başlangıç tarihi A5 hücresinde bitiş tarihim mevcuttur. Her sorguyu değiştirmektense böyle parametreden aldırmam daha mantıklı olacak gibi. Zira başka buna benzer en az 20 çeşit sorgum var hepsine girip tarih değiştirmek zorunda kalıyorum. Teşekkür ederim.
 
Katılım
12 Aralık 2015
Mesajlar
1,207
Excel Vers. ve Dili
Türkçe Ofis 2007
Sayın a_self_lion
Access'ten excel'e veri al ile veri çektim. sorunuzu araştırırken aşağıdaki adreste bulduğum kodu deneme yaparak Refresh sırasında CommandText'in parametresini sayfa2 den aldırdım. Kendi dosyanıza uyarlayabilirseniz.
https://msdn.microsoft.com/en-us/library/office/ff821552.aspx
Kod:
Sub Makro2()
Set qtQtrResults = Worksheets(1).QueryTables(1)
With qtQtrResults
 .CommandType = xlCmdSql
 .CommandText = "SELECT Tablo1.a1 FROM Tablo1 WHERE Tablo1.a1=" & Sheets("Sayfa2").Range("a1")
 .Refresh
End With
End Sub
 
Son düzenleme:

Mehmet Şahin

Destek Ekibi
Destek Ekibi
Katılım
13 Ekim 2005
Mesajlar
1,398
Excel Vers. ve Dili
Excel 2010 - 2013 Türkçe - İngilizce
Aşağıdaki gibi dener misiniz?

Kod:
...BETWEEN '" format(range("a4"),"yyyy-mm-dd") & "' AND '" & format(range("a5"),"yyyy-mm-dd") & "'"
 
Katılım
12 Aralık 2015
Mesajlar
1,207
Excel Vers. ve Dili
Türkçe Ofis 2007
Tarih sorgu metni sayfa, tablo, hücre ve alan isimlerini kendinize göre uyarlayın.
Kod:
 "SELECT Tablo1.a1 FROM Tablo1 WHERE Tablo1.a1 Between " & CDbl(Sheets("Sayfa2").Range("a1")) & " And " & CDbl(Sheets("Sayfa2").Range("b1"))
 
Katılım
14 Ocak 2005
Mesajlar
792
Excel Vers. ve Dili
Ofis 2010 2016
Altın Üyelik Bitiş Tarihi
13/03/2022
ali bey ve Mehmet bey teşekkür ederim ama kullandığım yer makro değil
OLE DB sorgusu Düzenlemede Komut Metni olan yere yazmam gerekiyor. Daha sonraki aylarda sadece gerekli yerden tarihleri değiştirip yenile yapamam yeterli olacaktır.

SELECT * FROM xxxx WHERE xxxxx_tar BETWEEN '"CDbl(Sheets(
"DigerHesapalamar").Format(Range("D2"),"YYYY-MM-DD") & "'AND '" & CDbl(Sheets("DigerHesapalamar").Format(Range("E2"),"YYYY-MM-DD") & "'"


ekran görüntüsü aşağıdadır.
 
Katılım
12 Aralık 2015
Mesajlar
1,207
Excel Vers. ve Dili
Türkçe Ofis 2007
Sayın a_self_lion
Ole DB Sorgu Düzenle İletişim Kutusundaki Komut Metni; Ya Manuel olarak değiştirilebiliyor yada 2 No mesajımdaki Macro ile değiştirilebiliyor. Yani Komut Metnine Direkt Sayfa ve Hücre Referansı veremiyorsunuz.
Aşağıdaki satır Komut Metnini değiştiriyor. Bu satırı siz kendinize göre ayarlayabilirsiniz.
Kod:
 .CommandText = "SELECT Tablo1.a1 FROM Tablo1 WHERE Tablo1.a1=" & Sheets("Sayfa2").Range("a1")
Aşağıdaki satır ise "yenile yapıyor"
Kod:
 .Refresh
 
Son düzenleme:
Katılım
14 Ocak 2005
Mesajlar
792
Excel Vers. ve Dili
Ofis 2010 2016
Altın Üyelik Bitiş Tarihi
13/03/2022
Kusura bakmayın Ali bey ben olayı sonra kavradım aslında macro ile müdahale daha mantıklı. Çünkü benim 9 adet aynı çalışma kitabımda ayrı sayfalar da farklı bağlantılardan bu tarz tablolarım var bunlara her bitine gidip tek tek yenileme demek yorucu olurdu ve hatalara neden olabilirdi. Yanlış düşünmüyorsam.

tarihi değiştirdiğim Digerhesaplamalar sayfamda bir command koyup macro ile sizin dediğiniz gibi ilgili sayfalardaki ilgili tabloları tarihleri aldırarak kendimiz bir tuşla yenileyebilir.
Ben içine girip macro kaydını açarak farazi bir işlem yaptım aldığım macro kaydı şu şekilde
Kod:
'
' Makro2 Makro
'

'
    Range("BT16416").Select
    With Selection.ListObject.QueryTable
        .Connection = Array( _
        "OLEDB;Provider=SQLOLEDB.1;Persist Security Info=True;User ID=mmm;Initial Catalog=DATA2016;Data Source=192.168.5.2;Use Procedure for " _
        , _
        "Prepare=1;Auto Translate=True;Packet Size=4096;Workstation ID=xxxx-PC;Use Encryption for Data=False;Tag with column collation w" _
        , "hen possible=False")
        .CommandType = xlCmdSql
        .CommandText = Array( _
        "SELECT * FROM xxxxWHERE xxxx_TAR BETWEEN '2016-03-01' AND '2016-03-31'")
        .Refresh BackgroundQuery:=False
    End With
Bura öğrenmek istediğim bu 9 adet aynı çalışma kitabımdaki sayfalarımdaki bu tablolarımın isimleri nedir veya onlara nasıl hükmedeceğim. Kusura bakmazsanız kısaca bir örnek verirmisiniz. Diyelim ki ben Macroyu Digerhesaplamalar sayfamda yapıp satışlar sayfam maliyetler saymadaki bu tablolarımın ilgili yere sizin dediğiniz gibi tarihlerini aldırıp tek tek nasıl yenile diyebilirim.
Umarım ne demek istediğimi anlatabilmişimdir.
Teşekkür ederim.
 
Son düzenleme:
Katılım
12 Aralık 2015
Mesajlar
1,207
Excel Vers. ve Dili
Türkçe Ofis 2007
Sayın a_self_lion
Bir ana excel dosyasından 9 ayrı excel dosyasında değişik sayfalardaki QueryTable larınızı, ana excel dosyasında girdiğiniz tarih aralığına göre, bir defada Refresh etmek mi istiyorsunuz.
Bunun için 9 ayrı dosya yapınız (Aynı klasörde mi? Sayfa sayı ve Sayfa adları aynı mı?)
 
Katılım
14 Ocak 2005
Mesajlar
792
Excel Vers. ve Dili
Ofis 2010 2016
Altın Üyelik Bitiş Tarihi
13/03/2022
Sayın a_self_lion
Bir ana excel dosyasından 9 ayrı excel dosyasında değişik sayfalardaki QueryTable larınızı, ana excel dosyasında girdiğiniz tarih aralığına göre, bir defada Refresh etmek mi istiyorsunuz.
Bunun için 9 ayrı dosya yapınız (Aynı klasörde mi? Sayfa sayı ve Sayfa adları aynı mı?)

Evet Hayır ali bey bey şöyle bir tane excel dosyam var xxRaporum.xlsb bunun içinde Satışlar1 Satışlar2 Satışlar3 Satışlar4 Satışlar5 Satışlar6 Satışlar7 Satışlar8 Satışlar9 sayfalarım var ayrıca birde Digerhesaplamalar sayfam var.
digerhesaplamalar sayfamdan d2 ve e2 hücrelerine tarihleri yazdım 01.03.2016 31.03.2016 şeklinde giriyorum. Extrabilgi (lakin sql 2016-03-01 2016-03-31 bu formatta anlıyor tarihi.) yine digerhesaplamalar sayfamda sizin dediğiniz gibi bir macrodan bu bütün sayfalarımdaki tabloları bir seferde güncellemek istiyorum. Hepsinin sorgusu bir birinden doğal olarak farklı.
 
Katılım
12 Aralık 2015
Mesajlar
1,207
Excel Vers. ve Dili
Türkçe Ofis 2007
Sayın a_self_lion

Veri tabanının aynı Tablosundan aynı bilgileri aldırmayacağınızı düşünerek Komut Metnini ilk önce F (F2-F10 hücrelerinde) sütununda formülle oluşturun, döngü ile Satışlar1 sayfasındaki QueryTable ya DigerHesapalamar sayfasındaki F2 hücresindeki Metni, Satışlar2 sayfasındaki QueryTable ya DigerHesapalamar F3 hücresindeki Metni................ aldıran kod aşağıda.

Kod:
Makro2 Makro
for i = 1 To 9 
Sheets("Satışlar" & i).QueryTables(1).CommandText = Sheets("DigerHesapalamar").Range("F" & i +1)
Sheets("Satışlar" & i).QueryTables(1).Refresh  
Next
End Sub
Her sayfada önceden 1 adet QueryTable nin oluşturulmuş olması gerekiyor.
 
Son düzenleme:
Katılım
14 Ocak 2005
Mesajlar
792
Excel Vers. ve Dili
Ofis 2010 2016
Altın Üyelik Bitiş Tarihi
13/03/2022
Burda sql ifadesini f1 f2 şeklinde yazmalıyız sanırım. Ben döngüye sokmadan kendime göre uyarlayacağım.
Anladım olayı.
Peki hocam digerhesaplamalar sayfasının E2 hücresinde 01.03.2016 şeklinde girilmiş olan tarihi SQL in istediğ formatta sorgu içine nasıl koyarım.
Kod:
SELECT * FROM xxxxWHERE xxxx_TAR BETWEEN '2016-03-01' AND '2016-03-31'")
burda ilk tarihi digerhesaplamalar E2 hücresinden format bu şekilde çekilecek. ve diğeri......
Saygılarımla.
 
Katılım
12 Aralık 2015
Mesajlar
1,207
Excel Vers. ve Dili
Türkçe Ofis 2007
D2 hücresine başlangıç tarihini, E2 hücresine Bitiş tarihini yazıp.F2 hücresine aşağıdaki formülü yazarsanız.
Kod:
="SELECT * FROM xxxxWHERE xxxx_TAR BETWEEN '"&METNEÇEVİR(D25;"yyyy-aa-gg")&"' AND '"&METNEÇEVİR(E25;"yyyy-aa-gg")&"'"
 
Son düzenleme:
Katılım
14 Ocak 2005
Mesajlar
792
Excel Vers. ve Dili
Ofis 2010 2016
Altın Üyelik Bitiş Tarihi
13/03/2022
Ali bey dediğiniz gibi yaptım resimde görünen hatayı alıyorum.

ayrıca
Sheets("ADSDOS-BYIL").QueryTables(1).CommandText = Sheets("DigerHesaplamalar").Range("M51") bu satırda sarı boyalı çıkıyor.


bi kontrol eder misiniz rica etsem.
 
Katılım
12 Aralık 2015
Mesajlar
1,207
Excel Vers. ve Dili
Türkçe Ofis 2007
SQL server bende yok, ben konunun genel mantığını açıklamaya çalıştım. Daha fazla yardım edemiyorum.
 
Üst