|
▼kawata さん:
こんばんは。
昨日、投稿したのですが、どうも気に入らないので、削除してしまいました。
コードでテーブルを構築して「INSERT INTO」にしてみたり・・・。
で、結局、昨日のままのコードを再投稿しました。
では、例題の郵便番号のcsvデータですが、
http://www.post.japanpost.jp/zipcode/dl/kogaki.html
の「読み仮名データの促音・拗音を小書きで表記するもの」の全国一括を
ダウンロードしてください。
何故、例題のCSVを指定するのかと言うと、CSVの各列のデータを規定しなければ
ならないからです(汎用的にするのは、CSVを査定しなければならないかも)。
・解凍した「Ken_all.csv」を適当なフォルダに保存して下さい。
・次に以下の内容のテキストデータを「schema.ini」という名前で「Ken_all.csv」
と同じフォルダに作成して下さい。
[Ken_all.csv]
ColNameHeader=False
CharacterSet=oem
Format=CSVDelimited
Col1=フィールド1 Integer
Col2=フィールド2 Char Width 255
Col3=フィールド3 Char Width 255
Col4=フィールド4 Char Width 255
Col5=フィールド5 Char Width 255
Col6=フィールド6 Char Width 255
Col7=フィールド7 Char Width 255
Col8=フィールド8 Char Width 255
Col9=フィールド9 Char Width 255
Col10=フィールド10 Integer
Col11=フィールド11 Integer
Col12=フィールド12 Integer
Col13=フィールド13 Integer
Col14=フィールド14 Integer
Col15=フィールド15 Integer
↑これが、テーブルを規定するデータです。
これで前準備OK。
では、コードですが、参照設定で
「Microsoft ADO Ext.2.5 for DDL and Security」をチェックして下さい。
コードは、
「D:\EXCELファイル\ADO関連」というフォルダに
「yubinsamp.mdb」というmdbファイルを作成し、
同じ「D:\EXCELファイル\ADO関連」というフォルダにある「Ken_all.csv」というファイルを「schema.ini」を基にインポートし、「郵便番号」というテーブルを「yubinsamp.mdb」に作成します。
標準モジュール(Module1)に、
'==============================================================
Sub main()
Dim dbpath As String
dbpath = "D:\EXCELファイル\ADO関連\yubinsamp.mdb"
Call delete_fl(dbpath)
If create_cat(dbpath) = 0 Then
sqlstr = "SELECT * INTO [郵便番号] FROM [TEXT;DATABASE=d:\EXCELファイル\ADO関連\].Ken_all.csv"
If Exec(sqlstr) = 0 Then
MsgBox "インポート成功"
End If
Call close_cat
End If
End Sub
標準モジュール(Module1)に、
'==============================================================
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
open_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
本当は、作成するテーブル「郵便番号」には先頭にIDというオートナンバーのフィールドを作成しようと思っていたのです。それで、テーブルをコードで作成しようと思っていたんですが、ADOではわかりませんでした。
どなたかご存知の方、教えて下さい。
とりあえず、これでインポートはできました。
確認してみて下さい。
でも、これ、やっぱり、アクセスのTransferText メソッドを使った方が簡単かも?
|
|