Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


70457 / 76738 ←次へ | 前へ→

【10787】Re:CSVから直接MDBを作成したい
回答  ichinose  - 04/2/13(金) 21:23 -

引用なし
パスワード
   ▼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 メソッドを使った方が簡単かも?

1 hits

【10759】CSVから直接MDBを作成したい kawata 04/2/12(木) 15:10 質問
【10787】Re:CSVから直接MDBを作成したい ichinose 04/2/13(金) 21:23 回答
【10789】Re:CSVから直接MDBを作成したい kawata 04/2/13(金) 23:32 お礼
【10835】Re:CSVから直接MDBを作成したい 別解 ichinose 04/2/15(日) 23:29 回答
【10836】訂正と追伸 ichinose 04/2/15(日) 23:38 発言
【10842】Re:訂正と追伸 kawata 04/2/16(月) 10:23 お礼
【10844】Re:訂正と追伸 ichinose 04/2/16(月) 11:01 発言
【10845】Re:訂正と追伸 kawata 04/2/16(月) 11:13 お礼
【10857】Re:訂正と追伸 kawata 04/2/16(月) 15:04 お礼
【10837】Re:CSVから直接MDBを作成したい 別解 kawata 04/2/16(月) 8:29 お礼
【10843】Re:CSVから直接MDBを作成したい 別解 kawata 04/2/16(月) 10:56 回答

70457 / 76738 ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free