【VBA】CopyFromRecordsetでデータが貼り付けられない原因と解決方法【SQLite】

CopyFromRecordsetを使用しても
 ・シートにデータが貼り付けられない
ときがあります!
※SQLiteで起きました。

原因は
 ・テーブルの列の型(TYPE)をSQLite標準の型(TEXT等)
にしているためです!

テーブルの列の型(TYPE)
 ・varchar(255)
等にすると解決します

PR

原因

テーブルの列の型(TYPE)がSQLite標準の型(TEXT等)だと、「Rangeオブジェクト」の「CopyFromRecordset」メソッドでデータが貼り付けられません。
※理由は不明です。

列の型は「TEXT」
列の型は「TEXT」
PR

解決方法

テーブルの列の型(TYPE)を「varchar(255)」等にすると貼り付けられるようになります。

列の型は「varchar(255)」
PR

動作確認

以下のVBAコードにより
 ・CopyFromRecordsetでSQLiteのデータをシートへ貼り付ける
ことができました(27行目)。

Option Explicit

Sub sample()
    
    Dim ws As Worksheet
    Dim dbName As String
    Dim conStr As String
    Dim sql As String
    Dim con As Object
    Dim rs As Object
    
    'シート
    Set ws = Worksheets("sample")
    'DB名(SQLiteのファイル名)
    dbName = "C:\Users\user\Desktop\sampleDB.db"
    '接続文字列
    conStr = "DRIVER=SQLite3 ODBC Driver;Database=" & dbName
    'SELECT文
    sql = "select id,name,sex,section from employee"
    
    'DB接続
    Set con = CreateObject("ADODB.Connection")
    con.Open conStr
    
    'SQL実行
    Set rs = con.Execute(sql)
    
    '結果(取得したレコード)をシートに貼付け
    ws.Range("B2").CopyFromRecordset rs

    '接続を閉じる
    rs.Close
    con.Close
    Set rs = Nothing
    Set con = Nothing

End Sub
実行結果
実行結果
PR

備考

SQLiteの場合、テーブルの列の型(TYPE)によって挙動が変わってしまうため、「Rangeオブジェクト」の「CopyFromRecordset」メソッドの使用は避けた方がよいと思います。

タイトルとURLをコピーしました