2015-04-22 59 views
0

所以我有一個有趣的問題。我正在使用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」。 –

回答

1

如果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.