2015-06-30 27 views
1

我正在構建一個相當複雜的用戶窗體,它使用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 

有形式兩個特定文本框的工作完全一樣。通常情況下,要求用戶輸入數字,對他們的一切節省罰款(不介意的「+」按鈕):

enter image description here

然而有時候,用戶不知道的值,但不能離開那些空。這時候,他們都應該勾選複選框的值(一個或多個)設置爲「未知」:

enter image description here 現在有來有趣的部分 - 對批次字段,這樣可以節省罰款。但是,當我設置的貨物ID爲「未知」(或任何其他字符串),它拋出一個錯誤:

enter image description here

注意的領域是不是殘疾人,只是一些外觀上的變化鎖定。我也無法找到任何有關錯誤的具體細節,但它似乎有一些問題與查詢:

enter image description here

(它說,像「在表達不兼容的數據類型」)。生成的查詢是這樣的:

enter image description here

任何想法什麼不順心?我非常想保持知道的功能並解決錯誤,而不是重新設計它,因爲它已經花費了一些努力,並且字段不能留空。

+0

這是你收到的錯誤嗎? http://www.vbforums.com/showthread.php?43288-Run-time-error –

回答

0

從未在xls工作簿中使用過SQL,但我已經在SQL Server中遇到了這個問題。您的查詢沒有什麼「錯誤」,問題在於您要插入的表的字段上接受的數據類型。嘗試轉換該字段使用文本值而不是數字,它應該工作。

+0

非常感謝,安東尼奧! – jirkap

相關問題