2017-08-02 14 views
0

私は次のコードを持っています.Fields ...は実行されません。ループはテーブルにレコードを追加せずに直接接続を閉じています。ExcelのVBAアクセス

コード:

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のデータは、データベースに定義されたデータ型と一致する必要があります –

答えて

1

は、私は、この接続文字列を使用して動作するようにコードを取得することができた示唆してください:

「プロバイダ= Microsoft.ACE.OLEDB.12.0。データソース= C:\ Users \ best buy \ Desktop \ test.accdb;セキュリティ情報を保持する= False;

データの不一致エラーは、接続を閉じる前に3219実行時エラー操作をスローするため、除外できます。

enter image description here

Range("A3", Range("A2").End(xlDown))は、おそらく二つの理由Range("A2", Range("A" & Rows.Count).End(xlup))を変更する必要があります:それは、行2を超えたデータがない場合は、1048575件の空のレコードを追加します行2

  • をスキップ

    1. (どのように掲載していません私は知っている)

    大きなデータセットをお持ちの場合は、.Updateと私たちをコメントアウトする必要がありますe .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/)を使用します。 –

    +0

    ニース。私はそれを前に見たことがありますが、それがどのように行われたのか分かりませんでした。ありがとう – Zac

    関連する問題