Excel VBA Access

Excel VBA Access

问题描述:

我有以下代码,其中.Fields ...没有得到执行。循环直接关闭连接而不将记录添加到表中。Excel VBA Access

代码:

Sub insertIntoTable() 

    Dim moviesConn As ADODB.Connection 
    Dim moviesData As ADODB.Recordset 
    Dim moviesField As ADODB.Fields 
    Dim r As Range 

    Set moviesConn = New ADODB.Connection 
    Set moviesData = New ADODB.Recordset 

    moviesConn.ConnectionString = conStrAccess 
    moviesConn.Open 

    On Error GoTo closeConnection 

    With moviesData 
     .ActiveConnection = moviesConn 
     .Source = "tblFilmDetails" 
     .LockType = adLockOptimistic 
     .CursorType = adOpenForwardOnly 
     .Open 

    On Error GoTo closeRecordset 
     For Each r In Range("A3", Range("A2").End(xlDown)) 
      .AddNew 
      .Fields("Title").Value = r.Offset(0, 1).Value 
      .Fields("Release_Date").Value = r.Offset(0, 2).Value 
      .Fields("Length").Value = r.Offset(0, 3).Value 
      .Fields("Genere").Value = r.Offset(0, 4).Value 
      .Update 
     Next r 
    End With 

    closeRecordset: 
    moviesData.Close 

    closeConnection: 
    moviesConn.Close 

End Sub 

请建议

+0

如果您将'On Error Goto'注释掉会发生什么? –

+0

它会抛出一些错误并关闭记录集和连接 – SagarDixit

+0

字段名称是否正确?此外,Excel中的数据应该与数据库中定义的数据类型匹配 –

我能得到你的代码中使用此连接字符串的工作:

“供应商= Microsoft.ACE.OLEDB.12.0; Data Source = C:\ Users \ best buy \ Desktop \ test.accdb; Persist Security Info = False;“

我们可以排除数据不匹配错误,因为它在关闭连接之前会抛出3219运行时错误操作。

enter image description here

Range("A3", Range("A2").End(xlDown))可能应该有两个原因改变Range("A2", Range("A" & Rows.Count).End(xlup))

  1. 它跳过第2行
  2. 如果没有超出第2行中没有数据,您将添加1048575条空记录(向我怎么样我知道)

如果你有一个大的数据集,你应该注释.Update和我们在添加完所有记录后,输入.UpdateBatch。这将大大提高性能。

For Each r In Range("A3", Range("A2").End(xlDown)) 
     .AddNew 
     .Fields("Title").Value = r.Offset(0, 1).Value 
     .Fields("Release_Date").Value = r.Offset(0, 2).Value 
     .Fields("Length").Value = r.Offset(0, 3).Value 
     .Fields("Genere").Value = r.Offset(0, 4).Value 
     '.Update 
    Next r 
    .UpdateBatch 

​​ 注意:如果您有打开表同时加入了记录,那么你必须按F5 刷新表并查看新的数据。

+0

好帖子。快速问题,你是如何制作视频的? – Zac

+0

@Zac我使用[ScreenToGif](http://www.screentogif.com/)。 – 2017-08-02 09:06:57

+0

不错。我以前见过它,但只是不知道它是如何完成的。谢谢 – Zac