- ベストアンサー
ACCESS97で作成したmdbファイルに書き込む為の記述
ADOを使用してExcelで作成したデータをACCESS97で作成したmdbファイルに書き込む処理を行いたいと思います。 書籍を見ながらコードを記述しているのですが、1,2,の項目については問題なく処理ができるのですが、最後のmdbファイルへの書き込み処理がどうしてもうまくいきません。 主に出力されるエラーは「現在のプロバイダはIndex機能に必要なインターフェイスをサポートしていません。」というものです。いろいろ試行錯誤したのですが解決できませんでした。 やはりACCESS97で作成したmdbファイルだからダメなのでしょうか? 原因と対処方法を教えていただければ幸いです。よろしくお願いします。以下はmdbファイルへの書き込みのサンプルコードです。 Dim myFile As String Dim myTbl As String Dim myRng As Range Dim myCon As New ADODB.Connection Dim myRS As New ADODB.Recordset Dim i As Integer myFile = ThisWorkbook.Path & "\sampleDB.mdb" myTbl = "社員" Set myRng = ThisWorkbook.Worksheets(1).Range("A1").CurrentRegion With myCon .Provider = "Microsoft.Jet.OLEDB.4.0" 'Access(Jet)用のOLE DBプロバイダを使用 .Open myFile End With myRS.Open myTbl, myCon, adOpenStatic, adLockPessimistic, adCmdTableDirect myRS.Index = "社員ID" For i = 2 To myRng.Rows.Count myRS.Seek myRng(i, 1).Value If myRS.EOF Then myRS.AddNew For j = 1 To myRng.Columns.Count myRS.Fields(myRng(1, j).Value).Value = myRng(i, j).Value Next Next myRS.Update myRS.Close Set myRS = Nothing myCon.Close Set myCon = Nothing
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
全く、うろ覚えのまま書きなぐったものでバグ含みの可能性大です。 しかし、質問者のコードを整理する上では役に立つかも知れません。 少し、風通しがよくなったと思います。 Private Sub CommandButton2_Click() Dim I As Integer Dim J As Integer Dim M As Integer Dim N As Integer Dim myRng As Range Dim dbsCurrent As DAO.Database Dim rstEmployee As DAO.Recordset Const conMDB = ThisWorkbook.Path & "\sampleDB.mdb" Const conTABLE = "社員" Const conINDEX = "社員ID" Set myRng = ThisWorkbook.Worksheets(1).Range("A1").CurrentRegion Set dbsCurrent = DBEngine.Workspaces(0).OpenDatabase(conMDB) Set rstEmployee = dbsCurrent.OpenRecordset(conTABLE) With rstEmployee .Index = conINDEX M = myRng.Rows.Count For I = 2 To M .Seek myRng(I, 1).Value If .NoMatch Then .AddNew N = myRng.Columns.Count - 1 For J = 0 To N .Fields(J).Value = myRng(I, J).Value Next J .Update End If Next I .Close End With dbsCurrent.Close End Sub ※未検証ですので、あくまでも参考程度に!
その他の回答 (3)
s_husky です。 早速のバグ修正です。 For J = 0 To N .Fields(J).Value = myRng(I, J + 1).Value Next J
- dee_honda
- ベストアンサー率53% (26/49)
Microsoft.Jet.OLEDB.4.0プロバイダでしたら、 通常はJet3.5(Access97)形式のMDBファイルに問題なく書き込めます。 開発環境やそのテーブルがリンクテーブルなのか不明ですが、 http://support.microsoft.com/default.aspx?scid=kb;ja;290060 >やはりACCESS97で作成したmdbファイルだからダメなのでしょうか? http://www.accessclub.jp/bbs6/0006/das1276.html などを参考にしてみてください。 '個人的には、Seekメソッドをお使いならば、DAOをお薦めします。
- nicotinism
- ベストアンサー率70% (1019/1452)
試したわけではないので・・ Acc97の頃にはADO接続は無かったので、 Acc2000以降のファイルへ変換するか DAOで接続するか、だと思います。