Makro ile Sql den bilgi almak

Katılım
14 Ocak 2005
Mesajlar
792
Excel Vers. ve Dili
Ofis 2010 2016
Altın Üyelik Bitiş Tarihi
13/03/2022
Selam Arkadaşlar Formda aradım bulumadım. Yardım edebileceğinizi düşündüm.

ben Veri - Dış Veri Al - Yeni SQL Server bağlantısı ile manuel olarak serverimizde bulunan SQL serverden aşağıdaki gibi bilgilerimi alabiliyorum.
BAĞLANTI:

Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=True;Initial Catalog=DATA06;Data Source=192.168.0.7;Use Procedure for Prepare=1;Auto Translate=True;Packet Size=4096;Workstation ID=OZCANBLG;Use Encryption for Data=False;Tag with column collation when possible=False

KOMUT TÜRÜ : SQL

KOMUT :

SELECT ADSDOS_MLZ_KOD, ADSDOS_ACK, SUM(ADSDOS_STK_MIK) AS MIKTAR, SUM(ADSDOS_NET_TLL) AS TLTUTAR FROM ADSDOS WHERE ADSDOS_TAR BETWEEN '2007-09-24' AND '2007-10-03' AND ADSDOS_PAK_KOD = '' AND ADSDOS_SAT_TIP <> '5' GROUP BY ADSDOS_MLZ_KOD, ADSDOS_ACK

Bu komutlarla bilgilerim iste&#287;im gibi geliyor.

Benim Yapmak istedi&#287;im sayfaya ekleyece&#287;im bir buton ile bana hangi tarihler aras&#305;nda alaca&#287;&#305;m&#305; soracak ve ona g&#246;re bu bilgileri getirebilmesi gerekiyor. A&#231;aba bu &#351;ekilde bir macro ile yapabilirmiyiz. Te&#351;ekk&#252;rler
 
Katılım
15 Haziran 2006
Mesajlar
3,704
Excel Vers. ve Dili
Excel 2003, 2007, 2010 (TR)
&#199;ok emin cevaplayam&#305;yorum ama a&#351;a&#287;&#305;daki gibi denerseniz olabilir. E&#287;er olmazsa ba&#351;ka yollar da deneyebiliriz.

VARSAYIMLAR : Tarih aral&#305;&#287;&#305; A1 ve A2'de belirtilmek &#252;zere:

(1) A1 h&#252;cresi : &#304;lk Tarih
(2) A2 h&#252;cresi : Son Tarih

a&#351;a&#287;&#305;daki stringi SQL'e g&#246;nderebilirsiniz.

Kod:
SQLString = "SELECT ADSDOS_MLZ_KOD, " _
                & "ADSDOS_ACK, " _
                & "SUM(ADSDOS_STK_MIK) AS MIKTAR, " _
                & "SUM(ADSDOS_NET_TLL) AS TLTUTAR " _
          & "FROM ADSDOS " _
          & "WHERE ADSDOS_TAR BETWEEN '" & Year(Range("A1")) & "-" & Month(Range("A1")) & Day(Range("A1")) & "' AND " _
                                   & "'" & Year(Range("A2")) & "-" & Month(Range("A2")) & Day(Range("A2")) & "' AND " _
                                   & "ADSDOS_PAK_KOD = '' AND ADSDOS_SAT_TIP <> '5' GROUP BY ADSDOS_MLZ_KOD, ADSDOS_ACK"
 
Katılım
14 Ocak 2005
Mesajlar
792
Excel Vers. ve Dili
Ofis 2010 2016
Altın Üyelik Bitiş Tarihi
13/03/2022
Say&#305;n fpc bu t&#252;r kod hi&#231; yazmad&#305;m. SQL e g&#246;ndereilirsiniz demi&#351;siniz bunu nas&#305;l yap&#305;ca&#287;&#305;m yard&#305;m ederseniz sevinirm.
 
Katılım
8 Temmuz 2004
Mesajlar
254
Excel Vers. ve Dili
office 2007-mssql 2008 R2
Selam,
http://www.excel.web.tr/showthread.php?t=14771
bu linki bir kontrol edebilirmisiniz? Bu linkte SQL'e ba&#287;lant&#305;y&#305; nas&#305;l yapaca&#287;&#305;n&#305;z anlat&#305;lm&#305;&#351;. Linkteki sorgu c&#252;mlesinin yerine @fpc'nin sorgu c&#252;mlesini yazarsan&#305;z, d&#305;&#351; veri al'a gerek kalmaz.
Kolay gelsin.
 
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
Say&#305;n Red lion 72 &#304;nceledim ama benim i&#231;in &#231;ok kar&#305;&#351;&#305;k bir yard&#305;mc&#305; olursan&#305;z &#231;ok sevinece&#287;im. Hem ilersi i&#231;in kendimi geli&#351;tirmi&#351; olurum. Ger&#231;ekten &#231;ok ihtiyac&#305;m var bu &#246;rne&#287;e. Te&#351;ekk&#252;r ederim.
 
Katılım
15 Haziran 2006
Mesajlar
3,704
Excel Vers. ve Dili
Excel 2003, 2007, 2010 (TR)
E&#287;er Sql'den veri &#231;ekti&#287;iniz makro kayd&#305;n&#305;z varsa, kodlar&#305;n&#305;z&#305; bu ba&#351;l&#305;k alt&#305;na koyun. ADO ba&#287;lant&#305;lar&#305;n&#305; kullanmadan &#231;&#246;zmeye &#231;al&#305;&#351;al&#305;m.
 
Katılım
14 Ocak 2005
Mesajlar
792
Excel Vers. ve Dili
Ofis 2010 2016
Altın Üyelik Bitiş Tarihi
13/03/2022
Sub Makro1()
'
' Makro1 Makro
' Makro &#214;zcan &#214;zarslan taraf&#305;ndan 05.10.2007 tarihinde kaydedildi.
'

'
With ActiveSheet.QueryTables.Add(Connection:=Array( _
"OLEDB;Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=True;Data Source=192.168.0.7;Use Procedure for Prepare=1;Auto" _
, _
" Translate=True;Packet Size=4096;Workstation ID=OZCANBLG;Use Encryption for Data=False;Tag with column collation when possible=F" _
, "alse;Initial Catalog=DATA06"), Destination:=Range("A1"))
.CommandType = xlCmdSql
.CommandText = Array( _
"SELECT ADSDOS_MLZ_KOD, ADSDOS_ACK, SUM(ADSDOS_STK_MIK) AS MIKTAR, SUM(ADSDOS_NET_TLL) AS TLTUTAR FROM ADSDOS WHERE ADSDOS_TAR BETWEEN '2007-09-24' AND '2007-10-03' AND ADSDOS_PAK_KOD = '' AND ADSDOS_SAT_TIP <> '5' GROU" _
, "P BY ADSDOS_MLZ_KOD, ADSDOS_ACK")
.Name = "+Yeni SQL Server Ba&#287;lant&#305;s&#305;_3"
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.BackgroundQuery = True
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.PreserveColumnInfo = True
.SourceConnectionFile = _
"C:\Documents and Settings\ozcan.GARDENIA\Belgelerim\Veri Kaynaklar&#305;m\192.168.0.7 DATA06 ADSDOS.odc"
.Refresh BackgroundQuery:=False
End With
End Sub

D&#305;&#351; veri al i&#351;lemini macro1 olarak kaydettim san&#305;r&#305;m bunu diyorsunuz.
 
Katılım
15 Haziran 2006
Mesajlar
3,704
Excel Vers. ve Dili
Excel 2003, 2007, 2010 (TR)
Aşağıdaki kodu deneyiniz.

VARSAYIM : "Sayfa2" adlı sheet'in A1 hücresine ilk tarihin, A2 hücresine son tarihin yazılacağı, sonra Sayfa1'e geçileceği ve makronun çalıştırılacağı varsayılmıştır.

NOT : İlk seferde düzgün çalışmayabilir. Eğer hata oluşursa bildiriniz.

Kod:
Sub Makro1()
'
' Makro1 Makro
' Makro Özcan Özarslan tarafından 05.10.2007 tarihinde kaydedildi.
'
Set sh = Sheets("Sayfa2")
SQLstring = "SELECT ADSDOS_MLZ_KOD, " _
                & "ADSDOS_ACK, " _
                & "SUM(ADSDOS_STK_MIK) AS MIKTAR, " _
                & "SUM(ADSDOS_NET_TLL) AS TLTUTAR " _
          & "FROM ADSDOS " _
          & "WHERE ADSDOS_TAR BETWEEN '" & Year(sh.Range("A1")) & "-" & Month(sh.Range("A1")) & Day(sh.Range("A1")) & "' AND " _
                                   & "'" & Year(sh.Range("A2")) & "-" & Month(sh.Range("A2")) & Day(sh.Range("A2")) & "' AND " _
                & "ADSDOS_PAK_KOD = '' AND " _
                & "ADSDOS_SAT_TIP <> '5' " _
          & "GROUP BY ADSDOS_MLZ_KOD, ADSDOS_ACK"
With ActiveSheet.QueryTables.Add(Connection:=Array("OLEDB;Provider=SQLOLEDB.1;" _
                                            & "Integrated Security=SSPI;" _
                                          & "Persist Security Info=True;" _
                                                    & "Data Source=192.168.0.7;" _
                                      & "Use Procedure for Prepare=1;Auto", _
                                                       " Translate=True;" _
                                                    & "Packet Size=4096;" _
                                                 & "Workstation ID=OZCANBLG;" _
                                        & "Use Encryption for Data=False;" _
                        & "Tag with column collation when possible=False;" _
                                                & "Initial Catalog=DATA06"), _
                                                      Destination:=Range("A1"))
    .CommandType = xlCmdSql
    .CommandText = Array(SQLstring)
    .Name = "+Yeni SQL Server Bağlantısı_3"
    .FieldNames = True
    .RowNumbers = False
    .FillAdjacentFormulas = False
    .PreserveFormatting = True
    .RefreshOnFileOpen = False
    .BackgroundQuery = True
    .RefreshStyle = xlInsertDeleteCells
    .SavePassword = False
    .SaveData = True
    .AdjustColumnWidth = True
    .RefreshPeriod = 0
    .PreserveColumnInfo = True
    .SourceConnectionFile = "C:\Documents and Settings\ozcan.GARDENIA\Belgelerim\Veri Kaynaklarım\192.168.0.7 DATA06 ADSDOS.odc"
    .Refresh BackgroundQuery:=False
End With
Set sh = Nothing
End Sub
 
Katılım
14 Ocak 2005
Mesajlar
792
Excel Vers. ve Dili
Ofis 2010 2016
Altın Üyelik Bitiş Tarihi
13/03/2022
.Refresh BackgroundQuery:=False

Aynen dedi&#287;in gibi yapt&#305;m say&#305;n fpc ama bu sat&#305;rda hata verdi.
 
Katılım
15 Haziran 2006
Mesajlar
3,704
Excel Vers. ve Dili
Excel 2003, 2007, 2010 (TR)
Blok &#351;eklinde bir kod oldu. Hata en son sat&#305;rda ama ayn&#305; zamanda en &#246;l&#252;mc&#252;l sat&#305;rda ... Hatan&#305;n neden ve nerden kaynakland&#305;&#287;&#305;n&#305; anlayam&#305;yorum. Makro kayd&#305; harici kodlarla, ba&#351;ka bir yol deneyelim.
 
Katılım
14 Ocak 2005
Mesajlar
792
Excel Vers. ve Dili
Ofis 2010 2016
Altın Üyelik Bitiş Tarihi
13/03/2022
Evet san&#305;r&#305;m &#246;yle yapsak iyi olucak ama ben daha &#246;nce hi&#231; bu &#351;ekilde bir veri almad&#305;m. SQL c&#252;mleci&#287;imiz belli serverimiz belli kullan&#305;c&#305;m&#305;z belli taplomuz da belli acaba ba&#351;ka ne t&#252;rl&#252; bir &#351;ekilde bu verileri vb ile excel e alabiliriz.
 
Katılım
15 Haziran 2006
Mesajlar
3,704
Excel Vers. ve Dili
Excel 2003, 2007, 2010 (TR)
Yine aynı şekilde aşağıdaki kodları dener misiniz?

NOT : VBE Menüden: Tools->References'a basın. Listeden; Microsoft Activex Data Object 2.x Library ve Microsoft ADO Ext. 2.8 for DLL and Security işaretlenmiş olmalıdır.

NOT : Kodlarda kırmızı olarak işaretlenen kısımlara, kendi Username ve Passwordunuzu yazınız.

Kod:
Sub VeriAl()
Dim conn As New ADODB.Connection
Dim rs As New ADODB.Recordset
Dim SQLString As String
Dim sh As Worksheet
Dim y As Long, i As Integer
Set conn = New ADODB.Connection
Set rs = New ADODB.Recordset
Set sh = Sheets("Sayfa2")
conn.ConnectionString = "Provider=sqloledb;" _
                   & "Data Source=192.168.0.7;" _
               & "Initial Catalog=DATA06;" _
                       & "User Id=User;" _
                      & "Password=Pass;"
conn.Open
SQLString = "SELECT ADSDOS_MLZ_KOD, " _
                & "ADSDOS_ACK, " _
                & "SUM(ADSDOS_STK_MIK) AS MIKTAR, " _
                & "SUM(ADSDOS_NET_TLL) AS TLTUTAR " _
          & "FROM ADSDOS " _
          & "WHERE ADSDOS_TAR BETWEEN '" & Year(sh.Range("A1")) & "-" & Month(sh.Range("A1")) & Day(sh.Range("A1")) & "' AND " _
                                   & "'" & Year(sh.Range("A2")) & "-" & Month(sh.Range("A2")) & Day(sh.Range("A2")) & "' AND " _
                & "ADSDOS_PAK_KOD = '' AND " _
                & "ADSDOS_SAT_TIP <> '5' " _
          & "GROUP BY ADSDOS_MLZ_KOD, ADSDOS_ACK"
rs.Open SQLString, conn, adOpenKeyset, adLockOptimistic
Do Until rs.EOF
    y = y + 1
    For i = 1 To 4
        Cells(y, i) = rs(i - 1)
    Next i
Loop
rs.Close
Set conn = Nothing
Set rs = Nothing
Set sh = Nothing
End Sub
 
Katılım
17 Mayıs 2005
Mesajlar
117
Excel Vers. ve Dili
2013 TR
2013 EN
Selamlar, Aynı şekilde benimde bir rapor çalışmam olmuştu, ve tarih aralığını Takvim öğesi Kullanarak çözdüm,

Yapmış olduğum raporda Takvimi birden fazla kullandığımdan dolayı öncelikle makroya takvim verilerini bir alana yazdırmasını ve bu işlemden sonra rapora ait makroyu çalıştırmasını sağladım bu şekilde istediğim tarih veya başka aralıkta rapor almam mümkün oldu,

Ekteki Takvim Denetimi ile ilgili Dosyayı inceleyiniz sanırım İşinizi Görecektir. SQL ile ilgili alanlara tablo ve Başlıklara kendi tablonuza ait verileri girmeniz gerekmektedir. Aksi halde çalışmayacaktır.

Not : VBA Referans bölümünden Takvim denetimi 11 i etkinleştirmeniz gerekmekte.
 
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
Teşekkür ederim ilgin için
 
Katılım
26 Ocak 2007
Mesajlar
4,625
Excel Vers. ve Dili
Ofis 2016
Altın Üyelik Bitiş Tarihi
20-02-2025
Paylaşım için teşekkürler.
 
Üst