我正在構建一個相當複雜的用戶窗體,它使用ADO連接連接到另一個用作數據庫的Excel工作簿並檢索通過SQL查詢插入數據的&。請注意,在這種情況下,我不允許使用Access。通過ADO&SQL將數據插入到其他xls工作簿 - 數據類型錯誤
我已經想出瞭如何使用SELECT,但是INSERT中有一個特定的錯誤,我無法解決。這讓我困惑不已,我已經做了很多工作。
首先連接(我使用JET用於檢索數據和ACE保存數據,我是不是能夠得到JET爲這項工作):
Public Sub InsertDataToSheet(SQLCmd As String)
Dim cnx As Object
Set cnx = CreateObject("ADODB.Connection")
cnx.Open "Provider=Microsoft.ACE.OLEDB.12.0; Data Source='" & ThisWorkbook.Path & "\Database.xls'; Extended Properties=Excel 12.0;"
cnx.Execute SQLCmd
cnx.Close
End Sub
再有就是掛一個提交按鈕的子程序實際生成的查詢,因爲我需要只保存填寫文本框和組合,以避免空值:
Private Sub SaveRecord()
Dim SQL As String
SQL = "INSERT INTO [Report$A2:AM50000] ("
Dim i As Control
For Each i In Me.controls
If TypeName(i) = "TextBox" Or TypeName(i) = "ComboBox" Then
If i <> e Then SQL = SQL & i.Name & ","
End If
Next i
SQL = Mid(SQL, 1, Len(SQL) - 1) & ") VALUES(" ' Remove last space & comma
Dim j As Control
For Each j In Me.controls
If TypeName(j) = "TextBox" Or TypeName(j) = "ComboBox" Then
If j <> e Then
If j = "Unknown" Then MsgBox "Fire"
Select Case IsNumeric(j)
Case False
SQL = SQL & "'" & j & "'" ' Add single quotes around strings
Case True
SQL = SQL & j
End Select
SQL = SQL & ","
End If
End If
Next j
SQL = Mid(SQL, 1, Len(SQL) - 1) & ")" ' Remove last comma
' Connect
InsertDataToSheet (SQL)
End Sub
有形式兩個特定文本框的工作完全一樣。通常情況下,要求用戶輸入數字,對他們的一切節省罰款(不介意的「+」按鈕):
然而有時候,用戶不知道的值,但不能離開那些空。這時候,他們都應該勾選複選框的值(一個或多個)設置爲「未知」:
現在有來有趣的部分 - 對批次字段,這樣可以節省罰款。但是,當我設置的貨物ID爲「未知」(或任何其他字符串),它拋出一個錯誤:
注意的領域是不是殘疾人,只是一些外觀上的變化鎖定。我也無法找到任何有關錯誤的具體細節,但它似乎有一些問題與查詢:
(它說,像「在表達不兼容的數據類型」)。生成的查詢是這樣的:
任何想法什麼不順心?我非常想保持知道的功能並解決錯誤,而不是重新設計它,因爲它已經花費了一些努力,並且字段不能留空。
這是你收到的錯誤嗎? http://www.vbforums.com/showthread.php?43288-Run-time-error –