• DİKKAT

    DOSYA İndirmek/Yüklemek için ÜCRETLİ ALTIN ÜYELİK Gereklidir!
    Altın Üyelik Hakkında Bilgi

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
 
Değişkeni tek tırnak arasına alarak deneyin. Örneğin,

='" & CDbl(Range("A1").Value) & "')
 
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
 
Tarihi aşağıdaki gibi tanımlayarak deneyin.

AND I2010_ALINAN_SIPARIS.SIPARIS_TARIHI=cdate('" & Sheets("Sayfa1").Range("B1") & "')")
 
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?
 
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:
Tamamdır Levent bey, çalıştı. Yardımlarınız için çok teşekkürler.
 
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
 
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
 
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.
 
Geri
Üst