2

我目前正在使用 Excel VBA 制作一个简单的库存系统应用程序。我有一个用户表单来获取输入,我想将导入数据保存到几个 Microsoft Access 表中。

我正在尝试从用户窗体中提取数据并在用户按 Enter 时将其输入到访问表中。当我运行此代码时,会使用表 ID 创建一条新记录,但我尝试导入的两条记录留空。

    Public Sub AddDatabaseEntry()

      'Initialize all variables
      Dim cn As New ADODB.Connection
      Dim rs As New ADODB.Recordset
      Dim stDB As String, stSQL As String, stProvider As String
      Dim orderNum As String
      Dim orderDate As String

      orderNum = txtOrderNum
      orderDate = txtDate


      stDB = "Data Source= " & ThisWorkbook.Path & "\obsDatabase.accdb"
      stProvider = "Microsoft.ACE.OLEDB.12.0"


      'Opening connection to database
      With cn

          .ConnectionString = stDB
          .Provider = stProvider
          .Open

      End With

     'SQL Statement of what I want from the database
      stSQL = "INSERT INTO Orders (OrderNumber, OrderDate) " & _
              "Values ('" & orderNum & "', '" & orderDate & "')"

      Set rs = cn.Execute(stSQL)


      'Looping through the records I pulled and inserting the data into the comboBox

      cn.Close
      Set rs = Nothing
      Set cn = Nothing

    End Sub

    Private Sub btnAdd_Click()

      AddProduct
      AddDatabaseEntry

    End Sub
4

1 回答 1

3

我怀疑您的数据类型错误:

tSQL = "INSERT INTO Orders (OrderNumber, OrderDate) " & _
          "Values (" & orderNum & ", #" & orderDate & "#)"

我认为您的订单号可能是数字,因此没有引号,并且日期的分隔符是井号 (#),而不是引号 (')。

将日期格式化为明确的格式几乎总是更安全:

"Values (" & orderNum & ", #" & Format(orderDate,"yyyy/mm/dd") & "#)"

您不能将记录集设置为操作查询,因此:

cn.Execute stSQL

最后,可以用参数保存数据类型问题、字符串问题等。

stSQL = "INSERT INTO table1 (id, adate) " & _
          "Values (?, ?)"

cmd.ActiveConnection = cn
cmd.CommandText = stSQL
cmd.CommandType = adCmdText
cmd.Parameters.Append _
      cmd.CreateParameter("p1", adInteger, adParamInput, , OrderNum)
cmd.Parameters.Append _
      cmd.CreateParameter("p2", adDate, adParamInput, , OrderDate)

cmd.Execute

顺便说一句,您可以使用单个查询将一系列数字或工作表插入到 Access 表中:

INSERT INTO Table1 ( ADate ) 
SELECT SomeDate FROM [Excel 8.0;HDR=YES;DATABASE=Z:\Docs\Test.xls].[Sheet1$a1:a4]
于 2012-07-27T13:09:40.023 回答