VBA ADODB CommandString错误

问题描述:

所以我有一个有趣的问题。我正在使用Microsoft GP2013中的VB修改器(VBA),我所要做的就是在我们的一个数据库中引用一个表格,根据输入的服务电话号码(工作号码)获取总通话时间。为此,我使用SQL命令打开了一个SQL连接。问题是,无论我如何转换数据以及SQL命令引用的数据,我总是会得到转换错误。以下是错误我得到:VBA ADODB CommandString错误

Conversion failed when converting the varchar value 'Rack build' to data type int.

这是命令字符串:

cmdString.CommandText = "SELECT SUM(TRXHRUNT)/100 from CTI_Timetrack_Open_and_Closed where TRXDSCRN = " & CallNumber.Value & "" 

CallNumber.Value是一个整数我们的形式被填充。我整天围着我的脑袋,答案可能很简单。我正在寻找任何建议来缓解这个错误。谢谢。

+1

什么数据类型是'TRXHRUNT' - 你试图'sum'一个'varchar'? – sgeddes

+0

以及“Rack build”因素在这里如何? –

+0

“TRXHRUNT”或“TRXDSCRN”的其中一条记录的值为“Rack build”。 –

如果CallNumber.Value实际上是一个整数,那么您的一条记录的值为“Rack build”,其值为TRXDSCRN

试试这个选择:

SELECT * FROM CTI_Timetrack_Open_and_Closed WHERE TRXDSCRN = 'Rack build'; 

如果在该列实际上是整数值,而且你真的要搜索一个整数那里,你将需要通过添加到它作为一个字符串传递围绕CallNumber.Value单引号:

cmdString.CommandText = "SELECT SUM(TRXHRUNT)/100 from CTI_Timetrack_Open_and_Closed where TRXDSCRN = '" & CallNumber.Value & "'" 

You really should be using command parameters though通过传递以下字符串我打发CallNumber.Value中,否则可能会有人在数据库上肆虐。 N代表该CallNumber(如果它接受字符串):

'; DELETE FROM CTI_Timetrack_Open_and_Closed;--close command with comment 

您可以使用参数来解决SQL injection和其他人使用此:

cmdString.CommandText = "SELECT SUM(TRXHRUNT)/100 from CTI_Timetrack_Open_and_Closed where TRXDSCRN = ?"; 

Dim Pm As ADODB.Parameter 
Set Pm = cmdString.CreateParameter("parentid", adNumeric, adParamInput) 
Pm.Value = CallNumber.Value 
cmdstring.Parameters.Append Pm 

我知道TRXHRUNT是没有问题的,因为如果你尝试在varchar综上所述,您会收到以下错误:

Msg 8117, Level 16, State 1, Line 2

Operand data type varchar is invalid for sum operator.