SQL kodunu VBA koduna çevirmek

Katılım
29 Haziran 2005
Mesajlar
158
Excel Vers. ve Dili
MS Office Professional Plus 2013 64 Bit -Eng
MSSQL 2012 R2 64 Bit
Şu SQL kodunu VBA koduna çevirebilirmisiniz ?

SELECT SUM(LG_086_01_KSLINES.AMOUNT) AS Giren
FROM LG_086_KSCARD INNER JOIN
LG_086_01_KSLINES ON LG_086_KSCARD.LOGICALREF = LG_086_01_KSLINES.CARDREF
WHERE (LG_086_01_KSLINES.DATE_ BETWEEN CONVERT(DATETIME, '2009-03-30 00:00:00', 102) AND CONVERT(DATETIME, '2009-03-30 00:00:00', 102)) AND
(LG_086_01_KSLINES.SIGN = 0) AND (LG_086_KSCARD.LOGICALREF = 1)
 
Katılım
29 Haziran 2005
Mesajlar
158
Excel Vers. ve Dili
MS Office Professional Plus 2013 64 Bit -Eng
MSSQL 2012 R2 64 Bit
Ben biraz uğraştım ama hata alıyorum....

086 ifadesi SETUP sayfasından çekiliyor...(Firma No)
Tarih1 ve Tarih2 aktif çalışma sayfasındaki B1 ve C1 hücresinden çekiliyor...

S = "SELECT SUM(LG_" & Format(Sheets("SETUP").Range("B5"), "000") & "_01_KSLINES.AMOUNT) AS Giren,"
S = S & "FROM LG_" & Format(Sheets("SETUP").Range("B5"), "000") & "_KSCARD INNER JOIN,"
S = S & "LG_" & Format(Sheets("SETUP").Range("B5"), "000") & "_01_KSLINES ON LG_" & Format(Sheets("SETUP").Range("B5"), "000") & "_KSCARD.LOGICALREF = LG_" & Format(Sheets("SETUP").Range("B5"), "000") & "_01_KSLINES.CARDREF,"
S = S & "WHERE (LG_" & Format(Sheets("SETUP").Range("B5"), "000") & "_01_KSLINES.DATE_ BETWEEN CONVERT(DATETIME, '" & tarih1 & "', 102) AND CONVERT(DATETIME, '" & tarih2 & "', 102)) AND"
S = S & "(LG_" & Format(Sheets("SETUP").Range("B5"), "000") & "_01_KSLINES.SIGN = 0) AND (LG_" & Format(Sheets("SETUP").Range("B5"), "000") & "_KSCARD.LOGICALREF = 1)"
 
Katılım
25 Aralık 2005
Mesajlar
4,160
Excel Vers. ve Dili
MS Office 2010 Pro Türkçe
Aşağıdaki kodları deneyebilir misiniz?

Kod:
Dim strSQl As String
  strSQL = "SELECT SUM(LG_086_01_KSLINES.AMOUNT) AS Giren" & vbNewLine
  strSQL = strSQL & "        FROM LG_086_KSCARD INNER JOINLG_086_01_KSLINES " & vbNewLine
  strSQL = strSQL & "          ON LG_086_KSCARD.LOGICALREF = LG_086_01_KSLINES.CARDREF" & vbNewLine
  strSQL = strSQL & "       WHERE (LG_086_01_KSLINES.DATE_ BETWEEN CONVERT(DATETIME" & vbNewLine
  strSQL = strSQL & "           , '2009-03-30 00:00:00'" & vbNewLine
  strSQL = strSQL & "           , 102) " & vbNewLine
  strSQL = strSQL & "         AND CONVERT(DATETIME" & vbNewLine
  strSQL = strSQL & "           , '2009-03-30 00:00:00'" & vbNewLine
  strSQL = strSQL & "           , 102)) AND(LG_086_01_KSLINES.SIGN = 0) " & vbNewLine
  strSQL = strSQL & "         AND (LG_086_KSCARD.LOGICALREF = 1)"
Alternatif olarak:

Kod:
Dim strSQLStart As String
  Dim strSQLFrom As String
  Dim strSQLWhere As String
  Dim strSQLOrder As String
  Dim strSQL as string
  strSQLStart = "SELECT SUM(LG_086_01_KSLINES.AMOUNT) AS Giren"
   strSQLFrom = " From  LG_086_KSCARD INNER JOINLG_086_01_KSLINES "
      strSQLFrom = strSQLFrom & "  ON LG_086_KSCARD.LOGICALREF = LG_086_01_KSLINES.CARDREF"
   strSQLWhere = " Where  (LG_086_01_KSLINES.DATE_ BETWEEN CONVERT(DATETIME"
      strSQLWhere = strSQLWhere & "  , '2009-03-30 00:00:00'"
      strSQLWhere = strSQLWhere & "  , 102) "
      strSQLWhere = strSQLWhere & "  AND CONVERT(DATETIME"
      strSQLWhere = strSQLWhere & "  , '2009-03-30 00:00:00'"
      strSQLWhere = strSQLWhere & "  , 102)) AND(LG_086_01_KSLINES.SIGN = 0) "
      strSQLWhere = strSQLWhere & "  AND (LG_086_KSCARD.LOGICALREF = 1)"
   strSQL = strSQLStart & strSQLFrom & strSQLWhere & strSQLOrder

İyi çalışmalar
 
Katılım
29 Haziran 2005
Mesajlar
158
Excel Vers. ve Dili
MS Office Professional Plus 2013 64 Bit -Eng
MSSQL 2012 R2 64 Bit
İlginize teşekkür ederim.

Sorunu şu şekilde hallettim...Sizin kullandığınız SQL Builder benzeri bir çalışma kullandım Sql cümleciğinin syntax biçimlerini tespit ettim.
daha sonra Locals Window dan F8 ile stepleyerek "S" değişkenine atadığım SQL sorgusunun vba den SQL e dönüşümünü gözlemleyerek , esas SQL kodunu VBA e çevirirken hangi syntax hatalarını yaptığımı tespit ettim...BOŞLUK , space , virgül ve çift tırnak hatalarım vardı , onları düzelttim , son olarak DATE COVERTTIME da yazım hatam vardı onu düzelttim...ve aşağıdaki son halini elde ettim ve sonuca ulaştım....

Kod:
tarih1 = Format(Range("B1").Value, "yyyy-mm-dd")
tarih2 = Format(Range("C1").Value, "yyyy-mm-dd")

s = "SELECT SUM(LG_" & Format(Sheets("SETUP").Range("B5"), "000") & "_01_KSLINES.AMOUNT) AS Giren "
s = s & "FROM LG_" & Format(Sheets("SETUP").Range("B5"), "000") & "_KSCARD INNER JOIN "
s = s & "LG_" & Format(Sheets("SETUP").Range("B5"), "000") & "_01_KSLINES ON LG_" & Format(Sheets("SETUP").Range("B5"), "000") & "_KSCARD.LOGICALREF = LG_" & Format(Sheets("SETUP").Range("B5"), "000") & "_01_KSLINES.CARDREF "
s = s & "WHERE (LG_" & Format(Sheets("SETUP").Range("B5"), "000") & "_01_KSLINES.DATE_ BETWEEN CONVERT(DATETIME, '" & tarih1 & "', 102) AND CONVERT(DATETIME, '" & tarih2 & "', 102)) AND"
s = s & "(LG_" & Format(Sheets("SETUP").Range("B5"), "000") & "_01_KSLINES.SIGN = 0) AND (LG_" & Format(Sheets("SETUP").Range("B5"), "000") & "_KSCARD.LOGICALREF = 1)"
 
Üst