Excelden VBA ile SQL Sorgusu Değişken Sorunu

Katılım
19 Eylül 2006
Mesajlar
67
Excel Vers. ve Dili
office 2007 tr
Excel sorgu sihirbazı vasıtası ile SQL veri tabanından bilgi sorgulaması yaptım ve bunu makro olarak keydettim
Yapmaya çalıştığım ama yapamadığım bir şey var.
SQL sorgusunda belirli bir sayıyı sorgulayabiliyorum bu makroyla ancak istediğim şey sorgulamamın aşağıda işaretli olan kısmını değişken olarak tanımladım.
Yani Sayfa1 A1 hücresine bir değer yazdığımda ve sorguyu çalıştırdığımda aşağıda kırmızı ile işaretli yerdeki sayılı sipariş çağrılması gerekirken "ora_01722 hatası alıyorum (Sayı olması gereken alanda başka bir veri var). Sanırım değişken tanımlamasını beceremedim. Bu konuda yardımcı olabilirseniz çok sevinirim.

Kodlar:
Range("A2").Select
With Selection.QueryTable
.Connection = "ODBC;DSN=discilik;UID=mercek;;SERVER=efes;"
.CommandText = Array( _
"SELECT VSATSIPARIS.PROJE_NO, VSATSIPARIS.SIPARIS_NO, VSATSIPARIS.BARKOD, VSATSIPARIS.MIKTAR_MUHTELIF, VSATSIPARIS.MIKTAR_BOLUMLER, VSATSIPARIS.FIYAT, VSATSIPARIS.IHALE_MALHIZMET_KODU, VSATSIPARIS.FIRM" _
, _
"A_KODU, VSATSIPARIS.BUTCE_YILI" & Chr(13) & "" & Chr(10) & "FROM OPUS.VSATSIPARIS VSATSIPARIS" & Chr(13) & "" & Chr(10) & "WHERE (VSATSIPARIS.SIPARIS_NO=" & CDbl(Range("A1").Value) & ") AND (VSATSIPARIS.BUTCE_YILI='2010')" & Chr(13) & "" & Chr(10) & "ORDER BY VSATSIPARIS.PROJE_NO, VSATSIPARIS.SIPARIS_NO, VSA" _
, _
"TSIPARIS.BARKOD, VSATSIPARIS.MIKTAR_MUHTELIF, VSATSIPARIS.MIKTAR_BOLUMLER, VSATSIPARIS.FIYAT, VSATSIPARIS.IHALE_MALHIZMET_KODU, VSATSIPARIS.FIRMA_KODU, VSATSIPARIS.BUTCE_YILI" _
)
.Refresh BackgroundQuery:=True
End With
End Sub
 

Levent Menteşoğlu

Administrator
Yönetici
Admin
Katılım
13 Ekim 2004
Mesajlar
16,030
Excel Vers. ve Dili
Excel 2010-32 bit-Türkçe
Excel 365 -32 bit-Türkçe
Değişkeni tek tırnak arasına alarak deneyin. Örneğin,

='" & CDbl(Range("A1").Value) & "')
 
Katılım
1 Nisan 2010
Mesajlar
5
Excel Vers. ve Dili
Excel 2003 Türkçe
Bende aynı şekilde bir çalışma yaptım ama bende tarih filtresinde takıldım. Kod aşağıda fakat bu haliyle çalışmıyor. SQL sorgumun WHERE koşulunda I2010_ALINAN_SIPARIS.SIPARIS_TARIHI='"+Format(Sheets("Sayfa1").Range("B1")."yyyy-mm-dd")+"' filterisin kullandım ama bunu yazdığımda hata alıyorum. Amacım B1 hücresine bir tarih yazdığımda sorgunun o tarihe göre çalışması. Tarih parametresi nasıl yazılır, yardım edebilir misiniz?

Sub GUNCELLE()
'
' GUNCELLE Makro
' Makro Ebru Çapraz Arslanoğlu tarafından 02.04.2010 tarihinde kaydedildi.
'
With Sheets("Sayfa1").Range("Siparişler").QueryTable
.Connection = Array(Array( _
"ODBC;DSN=LINX_OPEN;Description=LINX_OPEN_DSN;UID=USERLINX;PWD=USERLINX;APP=Microsoft Office 2003;WSID=00BIM02;DATABASE=INTERFARMA;LA" _
), Array("NGUAGE=Türkçe"))
.CommandText = Array( _
"SELECT I2010_ALINAN_SIPARIS.BOLGE, I2010_ALINAN_SIPARIS.CARI_HESAP_ADI, I2010_ALINAN_SIPARIS.BEKLEYEN_ADET, I2010_ALINAN_SIPARIS.SEVK_ADET, I2010_ALINAN_SIPARIS.SIPARIS_ADET, I2010_ALINAN_SIPARIS.SIPA" _
, _
"RIS_TARIHI" & Chr(13) & "" & Chr(10) & "FROM INTERFARMA.dbo.I2010_ALINAN_SIPARIS I2010_ALINAN_SIPARIS" & Chr(13) & "" & Chr(10) & "WHERE (I2010_ALINAN_SIPARIS.BOLGE='" & (Sheets("Sayfa1").Range("B3")) & "' AND I2010_ALINAN_SIPARIS.SIPARIS_TARIHI='"+Format(Sheets("Sayfa1").Range("B1")."yyyy-mm-dd")+"')" _
)


.Refresh BackgroundQuery:=False
End With
End Sub
 

Levent Menteşoğlu

Administrator
Yönetici
Admin
Katılım
13 Ekim 2004
Mesajlar
16,030
Excel Vers. ve Dili
Excel 2010-32 bit-Türkçe
Excel 365 -32 bit-Türkçe
Tarihi aşağıdaki gibi tanımlayarak deneyin.

AND I2010_ALINAN_SIPARIS.SIPARIS_TARIHI=cdate('" & Sheets("Sayfa1").Range("B1") & "')")
 
Katılım
1 Nisan 2010
Mesajlar
5
Excel Vers. ve Dili
Excel 2003 Türkçe
Yeni bir hata aldım

Çok teşekkürler. Sanırım oldu ama şimdi çalıştırdığımda ".Refresh BackgroundQuery:=False" bu satırda hata alıyorum. Nedendir?
 
Katılım
1 Nisan 2010
Mesajlar
5
Excel Vers. ve Dili
Excel 2003 Türkçe
Aldığım hata ;

Run-Time error '1004'
YSD (Yapılandırılmış Sorgu Dili) hatası

Bunun üzerine ".Refresh BackgroundQuery:=True" yaptım.

Bu defa aşağıdaki hatayı aldım ;

[Microsoft][ODBC SQL Server Driver][SQL Server] 'cdate' is not a recognized function name.
 
Son düzenleme:
Katılım
1 Nisan 2010
Mesajlar
5
Excel Vers. ve Dili
Excel 2003 Türkçe
Tamamdır Levent bey, çalıştı. Yardımlarınız için çok teşekkürler.
 

mustafakoker

MUSTAFA KÖKER
Altın Üye
Katılım
20 Haziran 2008
Mesajlar
697
Excel Vers. ve Dili
Microsoft Office ev ve iş 2019
Hocam aynı sorun bende de mevcut sorgu sonucunda sayfaya (2021/01/01) şeklinde geliyor ben 01/01/2021 şeklinde gelmesini istiyorum.
Sorgum daki TARİH'i nasıl düzenlemeliyim ki 01/01/2021 formatında excel sayfasına gelsin?


Kod:
Sub ADOExcelSQLServer()
     ' SQL Sunucu Bağlantısı
    
    Dim Cn As ADODB.Connection
    Dim Server_Name As String
    Dim Database_Name As String
    Dim User_ID As String
    Dim Password As String
    Dim SQLStr As String
    Dim rs As ADODB.Recordset
    Set rs = New ADODB.Recordset

    Server_Name = "***********" 
    Database_Name = "ANADOLU_2021" 
    User_ID = "Sa" 
    Password = "T*********" 
    
    SQLStr = " SELECT  " & _
    "YEAR (TARIH) AS [YIL]," & _
    " MONTH (TARIH)   AS [AY]," & _
    " TARIH , " & _
    " EVRAKNO," & _
    " KASACODE,        ACIKLAMA," & _
    " SUM (TL_BORCFIYAT)      Tahsilat," & _
    " SUM (TL_ALACAKFIYAT)    Tediye  ," & _
    " SUM (TL_BORCFIYAT-TL_ALACAKFIYAT) OVER (PARTITION BY KASACODE  ORDER BY TARIH,TLOG_LOGTIME ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS 'Bakiye' " & _
    " FROM [ANDGR_2021].[dbo].[NAKT10T]" & _
    " WHERE KASACODE like'%100-01%'  and TARIH BETWEEN '2021/01/01' AND '2021/12/31'" & _
    " GROUP BY  TARIH, EVRAKNO,KASACODE,ACIKLAMA,TL_BORCFIYAT,TL_ALACAKFIYAT, TLOG_LOGTIME ,MONTH (TARIH) ,YEAR (TARIH)" & _
    " ORDER BY TARIH"
    
        
    
    Set Cn = New ADODB.Connection
    Cn.Open "Driver={SQL Server};Server=" & Server_Name & ";Database=" & Database_Name & _
    ";Uid=" & User_ID & ";Pwd=" & Password & ";"
    
    Cn.CommandTimeout = 900

    rs.Open SQLStr, Cn, adOpenStatic
     
    For i = 0 To rs.Fields.Count - 1
Sayfa1.Cells(3, i + 1).Value = rs.Fields(i).Name 'sorgulama sonucu sayfada 3.satırdan başlar
Next i
Sayfa1.Range("a4").CopyFromRecordset rs
Range("A3").Select   'Colon Başlıklarını Sayfanın Tema Rengine Göre Ayarlar
    Dikkat.Show
 Call HucreBicimi  'Colon Başlıklarını hücrebicimi macrosundakilere Göre Ayarlar  A3-I3 ARASI

    rs.Close
    Set rs = Nothing
    Cn.Close
    Set Cn = Nothing
End Sub
 

mustafakoker

MUSTAFA KÖKER
Altın Üye
Katılım
20 Haziran 2008
Mesajlar
697
Excel Vers. ve Dili
Microsoft Office ev ve iş 2019
Aşağıdaki gibi deneyiniz.
Hocam run time error hatası aldım,
Microsoft ODBC SQL Server direver Sql Server argument data type Char is invalid for argument 1 of format fonction

rs.Open SQLStr, Cn, adOpenStatic hata bu satırda verdi

sql managamet studi v18.8
Databese özellikleri
Maintanece Collaction :Turkish_100_CS_AI
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
41,325
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Linkte benzer bir konu var.


Ayrıca sorgunuzda birden fazla TARIH ifadesi geçiyor.

Order by ve group by bölümlerini de aynı şekilde formatlamayı deneyiniz.
 
Üst