Excel Buton ile SQL 'den veri çekmek

Katılım
9 Nisan 2013
Mesajlar
13
Excel Vers. ve Dili
Excell 2013
Office professional plus
Merhabalar,

SQL 'de yazmış olduğum bir sorgu var. En alt kısmında göreceğiniz gibi "WHERE sr1.MAMUL_KODU = 'CS.0000.11020826'" cümlesi ile mamul kodunu yazarak sorgulatabiliyorum ama her seferinde farklı ürünler için sql sorgusunu değiştirmek istemiyorum. Bunun yerine excelde bir alan ve bir buton yapıp alanın içine mamul kodunu yazdığımda o sorguyu listelemesini istiyorum. Nasıl yapabileceğim konusunda detaylı yazarsanız sevinirim. Daha önce excelde hiç boyle bir çalışma yapmamıştım.

SELECT
sr1.MAMUL_KODU AS MamulKod,
COALESCE(sr6.MAMUL_KODU, sr5.MAMUL_KODU, sr4.MAMUL_KODU, sr3.MAMUL_KODU, sr2.MAMUL_KODU, sr1.MAMUL_KODU, '') AS AltMamulKod,
COALESCE(sr6.HAM_KODU, sr5.HAM_KODU, sr4.HAM_KODU, sr3.HAM_KODU, sr2.HAM_KODU, sr1.HAM_KODU, '') AS HamMaddeKod,

SUM(
(
ISNULL((sr1.MIKTAR /
((esn1.XFORMUL_TOPLAMI * CASE esn1.XURET_OLCU_BR WHEN 2 THEN sk1.PAYDA_1 WHEN 3 THEN sk1.PAYDA2 ELSE 1 END )
/ CASE esn1.XURET_OLCU_BR WHEN 2 THEN sk1.PAY_1 WHEN 3 THEN sk1.PAY2 ELSE 1 END)), 1) *
ISNULL((sr2.MIKTAR /
((esn2.XFORMUL_TOPLAMI * CASE esn2.XURET_OLCU_BR WHEN 2 THEN sk2.PAYDA_1 WHEN 3 THEN sk2.PAYDA2 ELSE 1 END )
/ CASE esn2.XURET_OLCU_BR WHEN 2 THEN sk2.PAY_1 WHEN 3 THEN sk2.PAY2 ELSE 1 END)), 1) *
ISNULL((sr3.MIKTAR /
((esn3.XFORMUL_TOPLAMI * CASE esn3.XURET_OLCU_BR WHEN 2 THEN sk3.PAYDA_1 WHEN 3 THEN sk3.PAYDA2 ELSE 1 END )
/ CASE esn3.XURET_OLCU_BR WHEN 2 THEN sk3.PAY_1 WHEN 3 THEN sk3.PAY2 ELSE 1 END)), 1) *
ISNULL((sr4.MIKTAR /
((esn4.XFORMUL_TOPLAMI * CASE esn4.XURET_OLCU_BR WHEN 2 THEN sk4.PAYDA_1 WHEN 3 THEN sk4.PAYDA2 ELSE 1 END )
/ CASE esn4.XURET_OLCU_BR WHEN 2 THEN sk4.PAY_1 WHEN 3 THEN sk4.PAY2 ELSE 1 END)), 1) *
ISNULL((sr5.MIKTAR /
((esn5.XFORMUL_TOPLAMI * CASE esn5.XURET_OLCU_BR WHEN 2 THEN sk5.PAYDA_1 WHEN 3 THEN sk5.PAYDA2 ELSE 1 END )
/ CASE esn5.XURET_OLCU_BR WHEN 2 THEN sk5.PAY_1 WHEN 3 THEN sk5.PAY2 ELSE 1 END)), 1) *
ISNULL((sr4.MIKTAR /
((esn4.XFORMUL_TOPLAMI * CASE esn6.XURET_OLCU_BR WHEN 2 THEN sk6.PAYDA_1 WHEN 3 THEN sk6.PAYDA2 ELSE 1 END )
/ CASE esn6.XURET_OLCU_BR WHEN 2 THEN sk6.PAY_1 WHEN 3 THEN sk6.PAY2 ELSE 1 END)), 1)
) )AS Miktar


FROM TBLSTOKURM sr1 WITH(NOLOCK)
LEFT JOIN TBLSTOKURM sr2 WITH(NOLOCK) ON (sr2.MAMUL_KODU = sr1.HAM_KODU AND sr2.MIKTAR <> 0 )
LEFT JOIN TBLSTOKURM sr3 WITH(NOLOCK) ON (sr3.MAMUL_KODU = sr2.HAM_KODU AND sr3.MIKTAR <> 0 AND sr2.HAM_KODU IS NOT NULL)
LEFT JOIN TBLSTOKURM sr4 WITH(NOLOCK) ON (sr4.MAMUL_KODU = sr3.HAM_KODU AND sr4.MIKTAR <> 0 AND sr3.HAM_KODU IS NOT NULL)
LEFT JOIN TBLSTOKURM sr5 WITH(NOLOCK) ON (sr5.MAMUL_KODU = sr4.HAM_KODU AND sr5.MIKTAR <> 0 AND sr4.HAM_KODU IS NOT NULL)
LEFT JOIN TBLSTOKURM sr6 WITH(NOLOCK) ON (sr6.MAMUL_KODU = sr5.HAM_KODU AND sr6.MIKTAR <> 0 AND sr5.HAM_KODU IS NOT NULL)


LEFT JOIN TBLESNSTMAS esn1 WITH(NOLOCK) ON (esn1.STOKKODU = sr1.MAMUL_KODU )
LEFT JOIN TBLESNSTMAS esn2 WITH(NOLOCK) ON (esn2.STOKKODU = sr2.MAMUL_KODU AND sr2.MAMUL_KODU IS NOT NULL )
LEFT JOIN TBLESNSTMAS esn3 WITH(NOLOCK) ON (esn3.STOKKODU = sr3.MAMUL_KODU AND sr3.MAMUL_KODU IS NOT NULL )
LEFT JOIN TBLESNSTMAS esn4 WITH(NOLOCK) ON (esn4.STOKKODU = sr4.MAMUL_KODU AND sr4.MAMUL_KODU IS NOT NULL)
LEFT JOIN TBLESNSTMAS esn5 WITH(NOLOCK) ON (esn5.STOKKODU = sr5.MAMUL_KODU AND sr5.MAMUL_KODU IS NOT NULL)
LEFT JOIN TBLESNSTMAS esn6 WITH(NOLOCK) ON (esn6.STOKKODU = sr6.MAMUL_KODU AND sr6.MAMUL_KODU IS NOT NULL)

LEFT JOIN TBLSTSABIT sk1 WITH(NOLOCK) ON (sk1.STOK_KODU = sr1.MAMUL_KODU )
LEFT JOIN TBLSTSABIT sk2 WITH(NOLOCK) ON (sk2.STOK_KODU = sr2.MAMUL_KODU AND sr2.MAMUL_KODU IS NOT NULL)
LEFT JOIN TBLSTSABIT sk3 WITH(NOLOCK) ON (sk3.STOK_KODU = sr3.MAMUL_KODU AND sr3.MAMUL_KODU IS NOT NULL)
LEFT JOIN TBLSTSABIT sk4 WITH(NOLOCK) ON (sk4.STOK_KODU = sr4.MAMUL_KODU AND sr4.MAMUL_KODU IS NOT NULL)
LEFT JOIN TBLSTSABIT sk5 WITH(NOLOCK) ON (sk5.STOK_KODU = sr5.MAMUL_KODU AND sr5.MAMUL_KODU IS NOT NULL)
LEFT JOIN TBLSTSABIT sk6 WITH(NOLOCK) ON (sk6.STOK_KODU = sr6.MAMUL_KODU AND sr6.MAMUL_KODU IS NOT NULL)

WHERE sr1.MAMUL_KODU = 'CS.0000.11020826'
GROUP BY
sr1.MAMUL_KODU,
COALESCE(sr6.MAMUL_KODU, sr5.MAMUL_KODU, sr4.MAMUL_KODU, sr3.MAMUL_KODU, sr2.MAMUL_KODU, sr1.MAMUL_KODU, ''),
COALESCE(sr6.HAM_KODU, sr5.HAM_KODU, sr4.HAM_KODU, sr3.HAM_KODU, sr2.HAM_KODU, sr1.HAM_KODU, '')
 
Katılım
23 Şubat 2007
Mesajlar
2
Excel Vers. ve Dili
1.0
merhabalar,
Htm oluşan bir dosyayı (excele çevirn programımda var)
excel formatında açmak istiyorum. macroda yapabilir miyim?
 
Katılım
14 Ağustos 2008
Mesajlar
21
Excel Vers. ve Dili
office 2000'den bu yana ne varsa...
Merhabalar,

SQL 'de yazmış olduğum bir sorgu var. En alt kısmında göreceğiniz gibi "WHERE sr1.MAMUL_KODU = 'CS.0000.11020826'" cümlesi ile mamul kodunu yazarak sorgulatabiliyorum ama her seferinde farklı ürünler için sql sorgusunu değiştirmek istemiyorum. Bunun yerine excelde bir alan ve bir buton yapıp alanın içine mamul kodunu yazdığımda o sorguyu listelemesini istiyorum. Nasıl yapabileceğim konusunda detaylı yazarsanız sevinirim. Daha önce excelde hiç boyle bir çalışma yapmamıştım.

SELECT
sr1.MAMUL_KODU AS MamulKod,
COALESCE(sr6.MAMUL_KODU, sr5.MAMUL_KODU, sr4.MAMUL_KODU, sr3.MAMUL_KODU, sr2.MAMUL_KODU, sr1.MAMUL_KODU, '') AS AltMamulKod,
COALESCE(sr6.HAM_KODU, sr5.HAM_KODU, sr4.HAM_KODU, sr3.HAM_KODU, sr2.HAM_KODU, sr1.HAM_KODU, '') AS HamMaddeKod,

SUM(
(
ISNULL((sr1.MIKTAR /
((esn1.XFORMUL_TOPLAMI * CASE esn1.XURET_OLCU_BR WHEN 2 THEN sk1.PAYDA_1 WHEN 3 THEN sk1.PAYDA2 ELSE 1 END )
/ CASE esn1.XURET_OLCU_BR WHEN 2 THEN sk1.PAY_1 WHEN 3 THEN sk1.PAY2 ELSE 1 END)), 1) *
ISNULL((sr2.MIKTAR /
((esn2.XFORMUL_TOPLAMI * CASE esn2.XURET_OLCU_BR WHEN 2 THEN sk2.PAYDA_1 WHEN 3 THEN sk2.PAYDA2 ELSE 1 END )
/ CASE esn2.XURET_OLCU_BR WHEN 2 THEN sk2.PAY_1 WHEN 3 THEN sk2.PAY2 ELSE 1 END)), 1) *
ISNULL((sr3.MIKTAR /
((esn3.XFORMUL_TOPLAMI * CASE esn3.XURET_OLCU_BR WHEN 2 THEN sk3.PAYDA_1 WHEN 3 THEN sk3.PAYDA2 ELSE 1 END )
/ CASE esn3.XURET_OLCU_BR WHEN 2 THEN sk3.PAY_1 WHEN 3 THEN sk3.PAY2 ELSE 1 END)), 1) *
ISNULL((sr4.MIKTAR /
((esn4.XFORMUL_TOPLAMI * CASE esn4.XURET_OLCU_BR WHEN 2 THEN sk4.PAYDA_1 WHEN 3 THEN sk4.PAYDA2 ELSE 1 END )
/ CASE esn4.XURET_OLCU_BR WHEN 2 THEN sk4.PAY_1 WHEN 3 THEN sk4.PAY2 ELSE 1 END)), 1) *
ISNULL((sr5.MIKTAR /
((esn5.XFORMUL_TOPLAMI * CASE esn5.XURET_OLCU_BR WHEN 2 THEN sk5.PAYDA_1 WHEN 3 THEN sk5.PAYDA2 ELSE 1 END )
/ CASE esn5.XURET_OLCU_BR WHEN 2 THEN sk5.PAY_1 WHEN 3 THEN sk5.PAY2 ELSE 1 END)), 1) *
ISNULL((sr4.MIKTAR /
((esn4.XFORMUL_TOPLAMI * CASE esn6.XURET_OLCU_BR WHEN 2 THEN sk6.PAYDA_1 WHEN 3 THEN sk6.PAYDA2 ELSE 1 END )
/ CASE esn6.XURET_OLCU_BR WHEN 2 THEN sk6.PAY_1 WHEN 3 THEN sk6.PAY2 ELSE 1 END)), 1)
) )AS Miktar


FROM TBLSTOKURM sr1 WITH(NOLOCK)
LEFT JOIN TBLSTOKURM sr2 WITH(NOLOCK) ON (sr2.MAMUL_KODU = sr1.HAM_KODU AND sr2.MIKTAR <> 0 )
LEFT JOIN TBLSTOKURM sr3 WITH(NOLOCK) ON (sr3.MAMUL_KODU = sr2.HAM_KODU AND sr3.MIKTAR <> 0 AND sr2.HAM_KODU IS NOT NULL)
LEFT JOIN TBLSTOKURM sr4 WITH(NOLOCK) ON (sr4.MAMUL_KODU = sr3.HAM_KODU AND sr4.MIKTAR <> 0 AND sr3.HAM_KODU IS NOT NULL)
LEFT JOIN TBLSTOKURM sr5 WITH(NOLOCK) ON (sr5.MAMUL_KODU = sr4.HAM_KODU AND sr5.MIKTAR <> 0 AND sr4.HAM_KODU IS NOT NULL)
LEFT JOIN TBLSTOKURM sr6 WITH(NOLOCK) ON (sr6.MAMUL_KODU = sr5.HAM_KODU AND sr6.MIKTAR <> 0 AND sr5.HAM_KODU IS NOT NULL)


LEFT JOIN TBLESNSTMAS esn1 WITH(NOLOCK) ON (esn1.STOKKODU = sr1.MAMUL_KODU )
LEFT JOIN TBLESNSTMAS esn2 WITH(NOLOCK) ON (esn2.STOKKODU = sr2.MAMUL_KODU AND sr2.MAMUL_KODU IS NOT NULL )
LEFT JOIN TBLESNSTMAS esn3 WITH(NOLOCK) ON (esn3.STOKKODU = sr3.MAMUL_KODU AND sr3.MAMUL_KODU IS NOT NULL )
LEFT JOIN TBLESNSTMAS esn4 WITH(NOLOCK) ON (esn4.STOKKODU = sr4.MAMUL_KODU AND sr4.MAMUL_KODU IS NOT NULL)
LEFT JOIN TBLESNSTMAS esn5 WITH(NOLOCK) ON (esn5.STOKKODU = sr5.MAMUL_KODU AND sr5.MAMUL_KODU IS NOT NULL)
LEFT JOIN TBLESNSTMAS esn6 WITH(NOLOCK) ON (esn6.STOKKODU = sr6.MAMUL_KODU AND sr6.MAMUL_KODU IS NOT NULL)

LEFT JOIN TBLSTSABIT sk1 WITH(NOLOCK) ON (sk1.STOK_KODU = sr1.MAMUL_KODU )
LEFT JOIN TBLSTSABIT sk2 WITH(NOLOCK) ON (sk2.STOK_KODU = sr2.MAMUL_KODU AND sr2.MAMUL_KODU IS NOT NULL)
LEFT JOIN TBLSTSABIT sk3 WITH(NOLOCK) ON (sk3.STOK_KODU = sr3.MAMUL_KODU AND sr3.MAMUL_KODU IS NOT NULL)
LEFT JOIN TBLSTSABIT sk4 WITH(NOLOCK) ON (sk4.STOK_KODU = sr4.MAMUL_KODU AND sr4.MAMUL_KODU IS NOT NULL)
LEFT JOIN TBLSTSABIT sk5 WITH(NOLOCK) ON (sk5.STOK_KODU = sr5.MAMUL_KODU AND sr5.MAMUL_KODU IS NOT NULL)
LEFT JOIN TBLSTSABIT sk6 WITH(NOLOCK) ON (sk6.STOK_KODU = sr6.MAMUL_KODU AND sr6.MAMUL_KODU IS NOT NULL)

WHERE sr1.MAMUL_KODU = 'CS.0000.11020826'
GROUP BY
sr1.MAMUL_KODU,
COALESCE(sr6.MAMUL_KODU, sr5.MAMUL_KODU, sr4.MAMUL_KODU, sr3.MAMUL_KODU, sr2.MAMUL_KODU, sr1.MAMUL_KODU, ''),
COALESCE(sr6.HAM_KODU, sr5.HAM_KODU, sr4.HAM_KODU, sr3.HAM_KODU, sr2.HAM_KODU, sr1.HAM_KODU, '')
Yapmak istediğinizi özet tabloda yapamıyorsunuz. Tablo olarak excel'e aldığınızda mümkün. Dış kaynaktan veri alırken biliyorsunuz tablo seçili geliyor. Pivot table ya da özet grafik seçmeden özelliklere geçtiğinizde sorgu kodu yazdığınız tanım sekmesinde parametre butonunun aktif olduğunu göreceksiniz. Parametre olarak bir hücreye referans verebiliyorsunuz. sorgu kodunda da parametre ile mamul kodunu eşitleyeceksiniz.
Böylece atanan hücreye yeni bir kod girdiğinizde veriyi güncelleyecek.

Bir de bu yazdığınız uzun kodu where kısmı hariç view olarak database'e ekleyip, o view üzerinden veriyi almanızı tavsiye ederim. Yanılmıyorsam diğer türlü hata veriyordu.

 

Trilenium

Destek Ekibi
Destek Ekibi
Katılım
16 Eylül 2008
Mesajlar
1,115
Excel Vers. ve Dili
Microsoft Office 2019 English
' Excel de ALT+F11 yap ve Tools bölümünden Reference yazan bölümü seç
' Microsoft ActiveX DataObject 2.8 seç..Sonra aşağıdaki kodları kullan

Dim rst As New ADODB.Recordset
Dim cnn As New ADODB.Connection


Sub Rectangle1_Click()
cnn.Open "Provider=Microsoft.ACE.OLEDB.12.0; " & _
"Data Source=C:\VTA.accdb;"


' CNN.open yazan yere sen SQL Bağlantı kodunu yazarsın...

rst.Open "select * from CHK where Yas= '" & Range("H1").Value & "'", cnn, adOpenForwardOnly, adLockReadOnly

'H1 satırı benim için artık Yaş kolonu için sorgulama yeri olacaktır.


i = 1
Do Until rst.EOF = True
Range("A" & i).Value = rst!Ad_Soyad
Range("B" & i).Value = rst!Yas
Range("C" & i).Value = rst!Tutar

i = i + 1

rst.MoveNext
Loop
rst.Close
cnn.Close
End Sub

Alanlar benim örnek veritabanıma göre oldugu icin sen select cümlende hangi alan isimlerini koyduysan onları yazmalısın..

Kolay gelsin
 
Üst