通过ADO& amp;将数据插入到其他xls工作簿SQL - 数据类型错误

时间:2015-06-30 17:05:06

标签: sql excel excel-vba connection vba

我正在构建一个非常复杂的UserForm,它使用ADO连接来连接另一个用作数据库的Excel工作簿并检索&通过SQL查询插入数据。请注意,在这种情况下我不能使用Access。

我已经弄清楚如何使用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

然后有一个链接到Submit按钮的子例程实际上生成了Query,因为我只需要保存填充的Textboxes和Combos以避免Null:

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 现在有了有趣的部分 - 对于Batch字段,它可以保存很好。但是当我将货件ID设置为“未知”(或任何其他字符串)时,它会抛出错误:

enter image description here

请注意,字段不是已禁用,只是锁定了一些外观更改。我也无法找到有关错误的任何具体细节,但似乎查询存在一些问题:

enter image description here

(它表示“表达式中不兼容的数据类型”)。生成的查询是这样的:

enter image description here

任何想法出了什么问题?我非常希望保留已知的功能并解决错误,而不是重新设计它,因为它已经花了一些精力而且字段不能保持空白。

1 个答案:

答案 0 :(得分:0)

从未在xls工作簿中使用过sql,但我已经遇到过SQL Server的这个问题。您的查询没有“错误”,问题是您要插入的表字段上接受的数据类型。尝试将该字段设置为使用文本值而不是数字,它应该可以正常工作。