【问题标题】:Insert Userform data into Access table using excel vba使用 excel vba 将 Userform 数据插入 Access 表
【发布时间】:2012-07-26 03:58:40
【问题描述】:

我目前正在使用 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

【问题讨论】:

    标签: sql ms-access excel vba


    【解决方案1】:

    我怀疑你的数据类型有误:

    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]
    

    【讨论】:

    • 我有一个需要评估 MS Access Db 的项目,最终必须使用它。我检查了几个可靠的地方,讨论了是否使用 ADO 或 DAO 用于 MS Excel 到/从 ACCESS DB连接。我仍然不完全相信。而是进退两难。而且我一直在使用 DAO。感谢您是否可以提供任何您认为最合适的方向:) 如果我使用 C#、VB.Net,我一定会使用 ADO.Net 连接到 Access DB。然而,说到 Excel,主要是 DAO……不是吗?
    • @bonCodigo 您会发现 ADO for Excel 随处可见,但使用 Access,无论您在哪里编码,使用 DAO 几乎总是更好。 DAO 通常要快得多。此外,即使使用 Excel,使用 DAO 也不太可能发生内存泄漏。
    • @bonCodigo 速度参考stackoverflow.com/questions/2986831/… ;内存泄漏参考support.microsoft.com/kb/319998stackoverflow.com/questions/13068022/… 如果您需要,我还有更多参考。顺便说一句,即使在 C# 和 VB.Net DAO 中也是一个更好的选择。
    猜你喜欢
    • 2012-07-11
    • 1970-01-01
    • 2013-01-02
    • 1970-01-01
    • 2021-02-25
    • 2011-11-16
    • 2013-04-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多