• DİKKAT

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

VBA Sql Syntax Error

Katılım
31 Ocak 2013
Mesajlar
3
Excel Vers. ve Dili
2007
Arkadaşlar kolay gelsin, SQL Server Management Studio'da çalıştırabildiğim
Alttaki SQL kodu, excel içinde vba makro yazarken Syntax error hatası alıyorum.
Yardımcı olabilcek arkadaş var mı ?

Hata: Incorrect Syntax near 'CLCARD'.
Ama sanırım birden fazla hata var :)

Kod:
sql = "SELECT CLCARD.CODE, CLCARD.DEFINITION_, ITEMS.CODE, ITEMS.NAME " & _
"FROM LG_032_ITEMS ITEMS (NOLOCK), LG_032_CLCARD CLCARD" & _
"WHERE CLCARD.CODE" & "_" & "ITEMS.CODE NOT IN (" & _
   "SELECT CLCARD.CODE" & "_" & "ITEMS.CODE" & _
   "FROM LG_032_01_STLINE STLINE (NOLOCK)" & _
      "LEFT JOIN LG_032_ITEMS ITEMS (NOLOCK) ON ITEMS.LOGICALREF=STLINE.STOCKREF" & _
      "LEFT JOIN LG_032_CLCARD CLCARD (NOLOCK) ON CLCARD.LOGICALREF=STLINE.CLIENTREF" & _
   "WHERE STLINE.CANCELLED=0" & _
         "AND STLINE.INVOICEREF<>0" & _
         "AND STLINE.LINETYPE IN (0,1)" & _
         "AND YEAR(STLINE.DATE_)=2012" & _
         "AND month(STLINE.DATE_) in (11)" & _
         "AND STLINE.TRCODE IN ( 8 )" & _
   "GROUP BY CLCARD.CODE" & "_" & "ITEMS.CODE)" & _
"and CLCARD.CODE LIKE '%'" & _
"and ITEMS.CODE > '100000'" & _
"ORDER BY CLCARD.CODE,ITEMS.CODE"
oRS.Source = sql
oRS.Open
 
Merhaba, boşluklarda sorun var gibi. Aşağıdakini bir deneyin.
Kod:
sql = "SELECT CLCARD.CODE, CLCARD.DEFINITION_, ITEMS.CODE, ITEMS.NAME " & _
"FROM LG_032_ITEMS ITEMS (NOLOCK), LG_032_CLCARD CLCARD " & _
"WHERE CLCARD.CODE" & "_" & "ITEMS.CODE NOT IN (" & _
   "SELECT CLCARD.CODE" & "_" & "ITEMS.CODE " & _
   "FROM LG_032_01_STLINE STLINE (NOLOCK) " & _
      "LEFT JOIN LG_032_ITEMS ITEMS (NOLOCK) ON ITEMS.LOGICALREF=STLINE.STOCKREF " & _
      "LEFT JOIN LG_032_CLCARD CLCARD (NOLOCK) ON CLCARD.LOGICALREF=STLINE.CLIENTREF " & _
   "WHERE STLINE.CANCELLED=0 " & _
         "AND STLINE.INVOICEREF<>0 " & _
         "AND STLINE.LINETYPE IN (0,1) " & _
         "AND YEAR(STLINE.DATE_)=2012 " & _
         "AND month(STLINE.DATE_) in (11) " & _
         "AND STLINE.TRCODE IN ( 8 ) " & _
   "GROUP BY CLCARD.CODE" & "_" & "ITEMS.CODE) " & _
"and CLCARD.CODE LIKE '%' " & _
"and ITEMS.CODE > '100000' " & _
"ORDER BY CLCARD.CODE,ITEMS.CODE"
 
Merhaba, boşluklarda sorun var gibi. Aşağıdakini bir deneyin.
Kod:
sql = "SELECT CLCARD.CODE, CLCARD.DEFINITION_, ITEMS.CODE, ITEMS.NAME " & _
"FROM LG_032_ITEMS ITEMS (NOLOCK), LG_032_CLCARD CLCARD " & _
"WHERE CLCARD.CODE" & "_" & "ITEMS.CODE NOT IN (" & _
   "SELECT CLCARD.CODE" & "_" & "ITEMS.CODE " & _
   "FROM LG_032_01_STLINE STLINE (NOLOCK) " & _
      "LEFT JOIN LG_032_ITEMS ITEMS (NOLOCK) ON ITEMS.LOGICALREF=STLINE.STOCKREF " & _
      "LEFT JOIN LG_032_CLCARD CLCARD (NOLOCK) ON CLCARD.LOGICALREF=STLINE.CLIENTREF " & _
   "WHERE STLINE.CANCELLED=0 " & _
         "AND STLINE.INVOICEREF<>0 " & _
         "AND STLINE.LINETYPE IN (0,1) " & _
         "AND YEAR(STLINE.DATE_)=2012 " & _
         "AND month(STLINE.DATE_) in (11) " & _
         "AND STLINE.TRCODE IN ( 8 ) " & _
   "GROUP BY CLCARD.CODE" & "_" & "ITEMS.CODE) " & _
"and CLCARD.CODE LIKE '%' " & _
"and ITEMS.CODE > '100000' " & _
"ORDER BY CLCARD.CODE,ITEMS.CODE"

Kardesim teşk ediyorum, şimdide sorgum zaman aşımından dolayı gercekleşmiyor. Zaman aşımı hatası alıyorum buna bir çare var mı?

Zaten Sql Managemnt Studio'da 15 dk sürüyor bu sorgunun gelmesi :)
 
Açık söylemek gerekirse, aşina olmadığımız tablolar, anahtar alanlar, içerikler varken, bir bakışta "şöyle yapın" demek zor benim için. Kaldı ki yoğunlukla Oracle database üzerinde çalışıyorum. Aralarında ifade ve teknik olarak farklılıklar olabiliyor. İsterseniz sorguyu açmadan önce brekpoint koyup
"oRS.Source = sql " satırından önce
Kod:
debug.print sql
kodunu çalıştırıp, immediate window penceresinden sql sorgunuzun son halini
kopyalayıp Management Studio üzerinde çalıştırın. En azından bu şekilde doğru olup olmadığını görün. İyi çalışmalar.
 
.
Zaten Sql Managemnt Studio'da 15 dk sürüyor bu sorgunun gelmesi :)

Bu anormal bir durum. Veritabanında optimizasyon kurallarına uyulmamış gibi anlaşılıyor.

Zaman aşımı için bağlantının "Timeout" özelliğini saniye cinsinden (15 dk X 60) değiştirmeyi deneyin.
 
Merhaba


"WHERE CLCARD.CODE" & "_" & "ITEMS.CODE NOT IN

yukarıdaki kodların açılımı

WHERE (CLCARD.CODE_ITEMS.CODE NOT IN......

CLCARD ve ITEMS ayrı ayrı tablo oldukları için zaten çalışmaz.Bu satırı tekrar düzenleyiniz

Sayın Dentex'in dediği gibi yapıp debug.print sql yazıp gelen bilgileri Sql'de yeni bir View'e kopyalayın hatayı göreceksizniz.

debug.print sql yerine cells(10,1)=sql olarakta kullanabilirsiniz
 
"WHERE CLCARD.CODE" & "_" & "ITEMS.CODE NOT IN

yukarıdaki kodların açılımı

WHERE (CLCARD.CODE_ITEMS.CODE NOT IN......

CLCARD ve ITEMS ayrı ayrı tablo oldukları için zaten çalışmaz.Bu satırı tekrar düzenleyiniz

Zafer bey, buradaki hatayı önce yazmıştım, ancak "sorgu geliyor" ibaresi olunca her halde benim bilemediğim bir şeyler var galiba diye iptal ettim. :)
 
Merhaba

Sayın Dentex sizin o açıklamanız atlamışım.Afedersiniz.

Sorgu gelmiyor.

debug.print sql veya cells(10,1).sql ile kodları alıp view'e dökünce zaten oradada o satırlarda hatalar veriyor.

Sql'de çalışan kodları view'e döküp sonrada Excel'de dış veri al ile o view'i çalıştırması en kolay yol.
Logo Tiger veya Unity kullanıyor sanırım
Çünki firma olarak (LG_032 ) parametre kullanmamış.Vba ile bilgilerin getirtilmesine gerek yok diye düşünüyorum
 
Zafer bey, "_" karakteri makronun çalışma anında "," olarak dönüştürülüyor olabilir. Bunu biz bilemeyiz. Yalnız süre aklıma takıldı. Sunucunun en yoğun anında bile 2-3 dk. geçmemesi gerekirdi. NOT IN içeriğini temporary tabloya aktarıp oradan sorgulatmak sorgunun süresini en fazla 1 dk. düşüreceğini tahmin ediyorum.
 
Merhaba

Açılımı aşağıdaki gibi

Kod:
SELECT   CLCARD.CODE, CLCARD.DEFINITION_, ITEMS.CODE AS Expr1, ITEMS.NAME
FROM         dbo.LG_032_ITEMS AS ITEMS WITH (NOLOCK) CROSS JOIN
                      dbo.LG_032_CLCARD AS CLCARD
WHERE     (CLCARD.CODE LIKE '%') AND (ITEMS.CODE > '100000') AND (CLCARD.CODE_ITEMS.CODE NOT IN
                          (SELECT     CLCARD.CODE_ITEMS.CODE
                            FROM          dbo.LG_032_01_STLINE AS STLINE WITH (NOLOCK) LEFT OUTER JOIN
                                                   dbo.LG_032_ITEMS AS ITEMS WITH (NOLOCK) ON ITEMS.LOGICALREF = STLINE.STOCKREF LEFT OUTER JOIN
                                                   dbo.LG_032_CLCARD AS CLCARD WITH (NOLOCK) ON CLCARD.LOGICALREF = STLINE.CLIENTREF
                            WHERE      (STLINE.CANCELLED = 0) AND (STLINE.INVOICEREF <> 0) AND (STLINE.LINETYPE IN (0, 1)) AND (YEAR(STLINE.DATE_) = 2012) AND 
                                                   (MONTH(STLINE.DATE_) IN (11)) AND (STLINE.TRCODE IN (8))
                            GROUP BY CLCARD.CODE_ITEMS.CODE))
ORDER BY CLCARD.CODE

Zeki bey dediklerinize katılıyorum çok az bir zamanda gelmesi lazım fakat
Tablolar arasında hiç bir bağlantı olmadığı için tabloların içindeki bütün bilgileri getirmeye çalışıyor.

Alınacak rapor'un ne olduğunu bilirsek daha fazla yardımcı oluruz diye düşünüyorum
 
Geri
Üst