预期 SQL 语句无效; '删除','插入',
Invalid SQL statement expected; ‘DELETE’,’INSERT’,
我有密码
Dim Cn As New ADODB.Connection
Dim cmd As ADODB.Command
Set cmd = New ADODB.Command
Dim i As Long
Cn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & ThisWorkbook.FullName & ";" & _
"Extended Properties=""Excel 8.0;"""
Cn.Open
cmd.ActiveConnection = Cn
cmd.CommandText = "DECLARE @TS_HD DOUBLE;" & _
"SET @TS_HD = ?TS_HD;" & _
"SELECT So_HD, Ngay_HD, Ten_Khach_Hang, Ma_So_Thue, Sum(Doanh_So_KT) as DoanhSo, Sum(Thue_VAT) as VAT from [BR$] " & _
"Where Ngay_HD <> null And TS_HD = @TS_HD Group by So_HD, Ma_So_Thue,Ngay_HD, Ten_Khach_Hang Order by Ngay_HD"
Set TS_HD = cmd.CreateParameter("?TS_HD", adDouble, adParamInput)
cmd.Parameters.Append TS_HD
TS_HD.Value = 0.1 'in excel this value is 10%'
Dim rst As ADODB.Recordset
Set rst = cmd.Execute()
BRToTalKhongChiuThue() = rst.GetRows
rst.Close
Cn.Close
当我 运行 这段代码 VBA 显示错误 "Invalid SQL statement expected; ‘DELETE’,’INSERT’," 时,有什么问题吗
感谢您看到我的问题!
您的参数化查询的语法看起来不正确。
DECLARE @TS_HD DOUBLE;
SET @TS_HD = ?TS_HD;
SELECT
So_HD
,Ngay_HD
,Ten_Khach_Hang
,Ma_So_Thue
,SUM(Doanh_So_KT) AS DoanhSo
,SUM(Thue_VAT) AS VAT
FROM [BR$]
WHERE Ngay_HD <> NULL AND TS_HD = @TS_HD
GROUP BY
So_HD
,Ma_So_Thue
,Ngay_HD
,Ten_Khach_Hang
ORDER BY
Ngay_HD
我不确定提供商是否支持 DECLARE
语句。如果没有,这就是您收到此消息的原因。让我们尝试删除它:
SELECT
So_HD
,Ngay_HD
,Ten_Khach_Hang
,Ma_So_Thue
,SUM(Doanh_So_KT) AS DoanhSo
,SUM(Thue_VAT) AS VAT
FROM [BR$]
WHERE Ngay_HD <> NULL AND TS_HD = ?
GROUP BY
So_HD
,Ma_So_Thue
,Ngay_HD
,Ten_Khach_Hang
ORDER BY
Ngay_HD
注意 WHERE 子句,WHERE Ngay_HD <> NULL AND TS_HD = ?
- 参数占位符只是一个问号。
我很确定该声明会奏效。
虽然我不太确定参数是如何传入的:
Set TS_HD = cmd.CreateParameter("?TS_HD", adDouble, adParamInput)
我认为您可以删除名称参数,它是可选的 - 一些提供商不支持命名参数。但这很糟糕,因为现在您需要 命名参数 因为 Name
参数在 CreateParameter
:
的签名中排在第一位
Set TS_HD = cmd.CreateParameter(Type:=adDouble, Direction:=adParamInput)
另一种方法是 New
启动并初始化 "manually":
Dim param As New ADODB.Parameter
With param
.Type = adDouble
.Direction = adParamInput
.Value = 0.01 'in excel this value is 10% '?? really? it's 1% here!
End With
cmd.Parameters.Append param
我有密码
Dim Cn As New ADODB.Connection
Dim cmd As ADODB.Command
Set cmd = New ADODB.Command
Dim i As Long
Cn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & ThisWorkbook.FullName & ";" & _
"Extended Properties=""Excel 8.0;"""
Cn.Open
cmd.ActiveConnection = Cn
cmd.CommandText = "DECLARE @TS_HD DOUBLE;" & _
"SET @TS_HD = ?TS_HD;" & _
"SELECT So_HD, Ngay_HD, Ten_Khach_Hang, Ma_So_Thue, Sum(Doanh_So_KT) as DoanhSo, Sum(Thue_VAT) as VAT from [BR$] " & _
"Where Ngay_HD <> null And TS_HD = @TS_HD Group by So_HD, Ma_So_Thue,Ngay_HD, Ten_Khach_Hang Order by Ngay_HD"
Set TS_HD = cmd.CreateParameter("?TS_HD", adDouble, adParamInput)
cmd.Parameters.Append TS_HD
TS_HD.Value = 0.1 'in excel this value is 10%'
Dim rst As ADODB.Recordset
Set rst = cmd.Execute()
BRToTalKhongChiuThue() = rst.GetRows
rst.Close
Cn.Close
当我 运行 这段代码 VBA 显示错误 "Invalid SQL statement expected; ‘DELETE’,’INSERT’," 时,有什么问题吗 感谢您看到我的问题!
您的参数化查询的语法看起来不正确。
DECLARE @TS_HD DOUBLE; SET @TS_HD = ?TS_HD; SELECT So_HD ,Ngay_HD ,Ten_Khach_Hang ,Ma_So_Thue ,SUM(Doanh_So_KT) AS DoanhSo ,SUM(Thue_VAT) AS VAT FROM [BR$] WHERE Ngay_HD <> NULL AND TS_HD = @TS_HD GROUP BY So_HD ,Ma_So_Thue ,Ngay_HD ,Ten_Khach_Hang ORDER BY Ngay_HD
我不确定提供商是否支持 DECLARE
语句。如果没有,这就是您收到此消息的原因。让我们尝试删除它:
SELECT
So_HD
,Ngay_HD
,Ten_Khach_Hang
,Ma_So_Thue
,SUM(Doanh_So_KT) AS DoanhSo
,SUM(Thue_VAT) AS VAT
FROM [BR$]
WHERE Ngay_HD <> NULL AND TS_HD = ?
GROUP BY
So_HD
,Ma_So_Thue
,Ngay_HD
,Ten_Khach_Hang
ORDER BY
Ngay_HD
注意 WHERE 子句,WHERE Ngay_HD <> NULL AND TS_HD = ?
- 参数占位符只是一个问号。
我很确定该声明会奏效。
虽然我不太确定参数是如何传入的:
Set TS_HD = cmd.CreateParameter("?TS_HD", adDouble, adParamInput)
我认为您可以删除名称参数,它是可选的 - 一些提供商不支持命名参数。但这很糟糕,因为现在您需要 命名参数 因为 Name
参数在 CreateParameter
:
Set TS_HD = cmd.CreateParameter(Type:=adDouble, Direction:=adParamInput)
另一种方法是 New
启动并初始化 "manually":
Dim param As New ADODB.Parameter
With param
.Type = adDouble
.Direction = adParamInput
.Value = 0.01 'in excel this value is 10% '?? really? it's 1% here!
End With
cmd.Parameters.Append param