MYSQL CSV データ 取り込み-OBDC-VBA

VB Tips And Sample(HOME)(VB.NET Sample インデックス)

MYSQL CSV データ 取り込み-OBDC-VBA

さて、MYSQLで開発するかと言う事になって、では肝心の
MYSQLへデータをインポートする方法は、ということで調べると
  • phpmyadminで、UTF-8 DOM無しをインポート(一番簡単だが、データ量の制限が少なすぎる点が難。)
  • MYSQLのコマンドで、CSVをインポート(コマンドラインで行うので、面倒。エラー内容がわかりにくい。高速。バイナリデータは無理?)
  • AcccessからODBC経由でエクスポート(ODBCタイムオーバーなどがあり、タイムオーバ無制限にする等の処置「クエリ内で設定」が必要。融通は利かないが簡単。)
  • ADO.NTEで入れ込む。(画像などバイナリもINSERTできる万能選手。ゴリ!とPGを書かなければならない。件数が多い、画像がある場合など。)
などが考えられる。
それぞれの特性を使い分けて、迅速に行いたいものです。

サンプルデータは郵政省の郵便番号CSVを使用。

AccessからUTF-8形式CSV出力

で、以下のコードは、AccessからUTF-8形式、DOM無しでエクスポートするVBAのソースサンプル。
ネット内の情報をいろいろ参考にさせていただきました。(DOM無しにしないと、MYSQLのコマンドでこけます。)後はほとんど考えなくてもできそうです。

Option Compare Database

Sub CreateText_UTF8()

    Const cnsFilePath As String = "C:\Users\admin\Documents\郵便番号ken_all\UTF8.txt"

    Dim bin() As Byte
    'http://hpcgi1.nifty.com/MADIA/VBBBS2/wwwlng.cgi?print+200702/07020055.txt
    'BOM除去方法

    '[ツール」-[参照設定]でMicrosoft ActiveX Data Objects 2.8 library
    With CreateObject("ADODB.Stream")
        .Type = adTypeText
        .Charset = "UTF-8"
        .Open
        
        Dim cn As ADODB.Connection
        Dim rs As ADODB.Recordset
        Set cn = CurrentProject.Connection
        Set rs = New ADODB.Recordset
        
        rs.Open "select * from KEN_ALL", cn
        
        Dim i As Double
        Dim x As Double
        Dim none_line As String
        
        
        Do Until rs.EOF = True
        
            '内容出力
                For i = 0 To rs.Fields.Count - 1
                    If i = 0 Then
                        none_line = """" & rs.Fields(i).Value
                    Else
                    'フィールドタイプで処理を分ける場合はselect caseで分岐
                        none_line = none_line & """,""" & rs.Fields(i).Value
                    End If
                Next
                
                .WriteText none_line & """" & vbCrLf
                
                none_line = ""


                rs.MoveNext

            x = x + 1
            Debug.Print x
            DoEvents

       Loop
        
        
        rs.Close: Set rs = Nothing
        cn.Close: Set cn = Nothing

        'BOMを除去
        .Position = 0
        .Type = adTypeBinary
        .Position = 3
        bin = .Read
        
        .Close
        
        .Open
        .Write bin

        .SaveToFile cnsFilePath, 2 '1:ファイル有り時上書きしない、2:上書きする
        .Close
    End With

    MsgBox "終了"
End Sub


後はコマンドラインでインポートしてみてください。参考サイト

ODBCでエクスポート(インポート)

次に、ODBCですが、
MySQL ConnectorsからODBCをダウンロード・インストール
ODBCインストール

で、ODBCを作る前に、MYSQL側でリモートユーザを作成する。
でないと接続できない。
ここでは、ユーザ:vbuser 、パスワード:sa
mysql ユーザ作成

で、ユーザPCでODBCを呼び出して設定する。
システムでもODBCは設定できたが、Access2007からだと「管理者特権を持たないアカウントでログインしています。・・・」で参照できなかった。調べるのも面倒なのでユーザで作った。(WIN7-64bit access2007の環境)
パスワードなど設定 ユーザDSN
で、Accessからエクスポート。
簡単だ。
が、My-ISAMになってしまうので、InnoDBに直さなければならない。
日本語フィールド名でもエクスポートはできたが、将来的に問題が発生しそうなので半角英数に変更。
Access側で英数にしておけば良いだけですね。

ADO.NETでエクスポート

これは次回にまわそう
酔いがそろそろ回ってきた・・・・
VB Tips And Sample(HOME)(VB.NET Sample インデックス)