| 
    
     |  | ▼kawata さん: こんばんは。
 オートナンバーの設定方法がやっとわかったので、訂正します。
 前準備までは、前回投稿したとおりに作成してください。
 
 以下のコードで、
 「D:\EXCELファイル\ADO関連」というフォルダに
 「yubinsamp.mdb」というmdbファイルを作成し、
 同じ「D:\EXCELファイル\ADO関連」というフォルダにある「Ken_all.csv」というファイルを「schema.ini」を基にインポートし、「郵便番号」というテーブルを「yubinsamp.mdb」に作成します。
 但し、テーブル「郵便番号」には、idというフィールドが新たに作成され型はオートナンバーでこれが主キーになります。
 標準モジュール(Module1)に
 '===============================================================
 Sub main()
 Dim dbpath As String
 Dim nm(0 To 15)
 Dim tp
 Dim att
 nm(0) = "id"
 For idx = 1 To 15
 nm(idx) = "フィールド" & idx
 Next
 tp = Array(3, 3, 202, 202, 202, 202, 202, 202, 202, 202, 3, 3, 3, 3, 3, 3)
 att = Array(True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False)
 '↑テーブルの構成を定義
 dbpath = "D:\EXCELファイル\ADO関連\yubinsamp.mdb"
 Call delete_fl(dbpath)
 If create_cat(dbpath) = 0 Then
 If create_tbl("郵便番号", nm(), tp, att) = 0 Then
 sqlstr = "insert into [郵便番号] SELECT * FROM [Text;DATABASE=D:\EXCELファイル\ADO関連\].Ken_all.csv"
 If Exec(sqlstr) = 0 Then
 MsgBox "インポート成功"
 End If
 End If
 Call close_cat
 End If
 End Sub
 
 標準モジュール(module2)に(前回の投稿ではmodule1になっていましたね、module2です、訂正)、
 '===============================================================
 Private cat As ADOX.Catalog
 Function create_cat(flnm As String) As Long
 On Error Resume Next
 Set cat = New ADOX.Catalog
 cat.Create "Provider=Microsoft.Jet.OLEDB.4.0;" & _
 "Data Source=" & flnm
 create_cat = Err.Number
 On Error GoTo 0
 End Function
 '===============================================================
 Sub close_cat()
 cat.ActiveConnection.Close
 Set cat = Nothing
 End Sub
 '===============================================================
 Function Exec(sql_str) As Long
 On Error Resume Next
 Exec = 0
 cat.ActiveConnection.Execute sql_str
 If Err.Number <> 0 Then
 Exec = Err.Number
 End If
 On Error GoTo 0
 End Function
 '===============================================================
 Sub delete_fl(flnm)
 On Error Resume Next
 Kill flnm
 On Error GoTo 0
 End Sub
 '===============================================================
 Function create_tbl(tblnm As String, nmarray, tparray, attarray) As Long
 'tblnmというテーブルを作成し、最初の列に主キーを設定する
 'Input:tblnm----テーブル名
 '   nmarray----列の名前の配列
 '   tparray----列のタイプの配列
 '   attarray---列のオートナンバーか否かの配列 Trueオートナンバー、falseオートナンバーでない
 On Error GoTo err_create_tbl
 Dim RS As ADODB.Recordset
 Dim tbl As ADOX.Table
 Dim col As ADOX.Column
 Dim kky As ADOX.Key
 create_tbl = 0
 Set tbl = New ADOX.Table
 tbl.name = tblnm
 jdx = 0
 For idx = LBound(nmarray) To UBound(nmarray)
 Set col = New ADOX.Column
 With col
 .name = nmarray(idx)
 .type = tparray(idx)
 Set .ParentCatalog = cat
 .Properties("AutoIncrement") = attarray(idx)
 .DefinedSize = 100
 End With
 tbl.Columns.Append col
 Set col = Nothing
 Next idx
 cat.Tables.Append tbl
 Set kky = New ADOX.Key
 cat.Tables(tblnm).Keys.Append nmarray(LBound(nmarray)), adKeyPrimary, nmarray(LBound(nmarray))
 Set tbl = Nothing
 Set col = Nothing
 On Error GoTo 0
 ret_create_tbl:
 Exit Function
 err_create_tbl:
 MsgBox Error(Err.Number)
 create_tbl = Err.Number
 Resume ret_create_tbl
 End Function
 
 前回の投稿と合わせて確認してみて下さい。
 私の環境では、30秒未満程で処理が終わりました。
 
 それと私は、他のDBにつなぐこともあるので、ADOを使っていますが、
 mdbファイル特別な設定などは、調べるのが大変です(私は、テーブルの作成などは
 アクセスで大抵やってしまうので、あまり不便は感じませんが)。
 勉強にはなりますが、
 DAOを使えば、今回のようなオートナンバーの設定などは簡単です。
 お聞きした限り、Accessのない環境だということですが、
 mdbファイルを操作するという限りでは、DAOの方が便利そうですよ。
 
 
 |  |