2015-01-22 3 views
1

Чтобы дать краткий обзор цели этого макроса, я пытаюсь получить сумму наличных денег между определенными датами на основе набора параметров. Я продолжаю получать ошибку в VBA, когда пытаюсь запустить SQL-запрос с датой. Я не уверен, в чем проблема, но я думаю, что это связано с тем, как я форматировал дату. Я попытался запустить его несколькими способами, но продолжаю получать синтаксическую ошибку, связан ли она с «a», «#» или «table».Вопросы VBA при попытке запустить SQL-запрос между двумя датами

Вот запрос, который я использую. Любая помощь будет принята с благодарностью.

Sub GetCashBalance() 

Dim cn As New ADODB.Connection 
Dim rs As ADODB.Recordset 
Dim SQL As String 
Dim StartDate As String 
Dim EndDate As String 

StartDate = InputBox("Enter Start Date in mm/dd/yy format.") 
EndDate = InputBox("Enter End Date in mm/dd/yy format.") 

SQL = "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=True;Initial Catalog=master;Data Source=SERVER\ODS" 

Set cn = New ADODB.Connection 
Set rs = New ADODB.Recordset 

cn.Open SQL 
Set rs = cn.Execute("SELECT SUM(a.CASH)" & _ 
      "FROM CUSTOMER_DATA.dbo.TRANSACTION_HISTORY a" & _ 
      "LEFT JOIN CUSTOMER_DATA.dbo.DAILY_TRANSACTION b" & _ 
      "ON a.T01_KEY = b.T01_KEY" & _ 
      "WHERE PROC_DATE BETWEEN #StartDate# AND #EndDate#" & _ 
      "AND a.CODE NOT IN ('22','23','M','2-L','36-R')" & _ 
      "AND isnull(a.DESCRIPTION, '') NOT IN ('01','02','03','0DO1','0NF2');") 

If Not rs.EOF Then 
    Sheets(7).Range("A40").CopyFromRecordset rs 
    rs.Close 
Else 
    MsgBox "Error", vbCritical 
End If 

cn.Close 

End Sub 

ответ

0
Set rs = cn.Execute("SELECT SUM(a.CASH)" & _ 
      "FROM CUSTOMER_DATA.dbo.TRANSACTION_HISTORY a" & _ 
      "LEFT JOIN CUSTOMER_DATA.dbo.DAILY_TRANSACTION b" & _ 
      "ON a.T01_KEY = b.T01_KEY" & _ 
      "WHERE PROC_DATE BETWEEN '" & StartDate & "' AND '" & EndDate & _ 
      "# AND a.CODE NOT IN ('22','23','M','2-L','36-R')" & _ 
      "AND isnull(a.DESCRIPTION, '') NOT IN ('01','02','03','0DO1','0NF2');") 

Взгляните ниже кусок, который должен быть изменен

BETWEEN '" & StartDate & "' AND '" & EndDate & _    
"' AND .... 

Я думаю, что лучше использовать ADODB.Command и Parameters вместо того, чтобы делать конкатенации в запросе SQL.

+0

Привет, спасибо за ответ. Я все еще получаю неправильную синтаксическую ошибку, но на этот раз она находится рядом с «а». Это потому, что VBA не нравится «a» и «b» после предложения FROM в SQL-запросе? – nam24

+0

Я знаю, почему я получил неправильную синтаксическую ошибку вокруг 'a'. Когда я удалил конец продолжения строки («& _») и имел запрос в одной строке в VBA, все было отлично. С учетом сказанного, есть ли способ, которым я могу использовать несколько строк, потому что у меня больше кода, который не может быть помещен в одну строку? Это то, что вы имели в виду, используя ADODB.Command и Parameters вместо конкатенации? Извините, если вы уже ответили на это, но я довольно новичок в VBA. – nam24

+0

Я понял. Я забыл поставить пробел перед цитатами. Спасибо за вашу помощь. – nam24

Смежные вопросы