質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

解決済

1回答

5280閲覧

ExcelでSQLite3を使うModuleのエラーの対処方法を教えて下さい。

jkjksan

総合スコア19

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

2クリップ

投稿2019/05/25 12:46

編集2019/05/26 13:36

前提・実現したいこと

前提:
Excelで簡単にSQLiteを使用できるということで、これらのリンクを参考にしました。

ExcelからODBCなしでSQLiteを操作する(設定編)
ExcelからSQLite3を操作する方法(1.使用準備)
ExcelからSQLiteを使う方法
Excel VBAからSQLite3のデータベースを触ってみたところ、それなりにハマったのでメモ。
SQLite for Excel

SQLite For Excel Version 1.0にあるSQLiteForExcel_64.xlsmを起動し、AllTestsプロシージャを実行します。
特に何も設定せずとも動くものと理解しています。

VBA

1 2'\Sqlite3Demo.bas 3Option Explicit 4 5Dim TestFile As String 6 7Public Sub AllTests() 8 ' Check that this location can be written to 9 ' Note that this file will be deleted after the tests complete! 10 TestFile = Environ("TEMP") & "\TestSqlite3ForExcel.db3" 11 12 Dim InitReturn As Long 13 #If Win64 Then 14 ' I put the 64-bit version of SQLite.dll under a subdirectory called x64 15 InitReturn = SQLite3Initialize(ThisWorkbook.Path + "\x64") 16 #Else 17 InitReturn = SQLite3Initialize ' Default path is ThisWorkbook.Path but can specify other path where the .dlls reside. 18 #End If 19 If InitReturn <> SQLITE_INIT_OK Then 20 Debug.Print "Error Initializing SQLite. Error: " & Err.LastDllError 21 Exit Sub 22 End If 23 24 TestVersion 25 TestOpenClose 26 TestOpenCloseV2 27 TestError 28 TestInsert 29 TestSelect 30 TestBinding 31 TestDates 32 TestStrings 33 TestBackup ------------------ここで落ちます。--------------------- 34 TestBlob 35 TestWriteReadOnly 36 SQLite3Free ' Quite optional 37 38 Debug.Print "----- All Tests Complete -----" 39End Sub

再現方法

「SQLite for Excel」 Excel VBAからSQLiteデータベースを使用する SQLポケリ [SQLポケリ]を参考にします。

①Excel2016 64bitをインストールします。

SQLite For Excel Version 1.0をダウンロード、任意のフォルダに展開。

③SQLiteForExcel-1.0\DistributionSQLiteForExcel_64.xlsmを起動

④マクロ→"AllTest"→実行

⑤該当のソースコード部分でエクセルが強制終了します。

発生している問題・エラーメッセージ

Excel

1通常実行時 : 2 エラーメッセージ:無し 3 1:エクセルが落ちます。エラーはありません。 4 2:たまにエクセルが再起動します。

該当のソースコード

VBA

1'//Sqlite3.bas 2 3#If Win64 Then 4Public Function SQLite3BackupStep(ByVal backupHandle As LongPtr, ByVal numberOfPages) As Long 5#Else 6Public Function SQLite3BackupStep(ByVal backupHandle As Long, ByVal numberOfPages) As Long 7#End If 8  ------------------------ここで落ちます。------------------------------ 9 SQLite3BackupStep = sqlite3_backup_step(backupHandle, numberOfPages) 10  -------------------------------------------------------------------- 11End Function

補足情報(FW/ツールのバージョンなど)

Excel2016 64bit
Microsoft???? Excel???? for Office 365 MSO (16.0.11601.20184)64ビット

VBA Ver1088

SQLite For Excel Version 1.0

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

jkjksan

2019/05/27 02:04

Excel2016 32bitと SQLite For Excelの32bit版(.xls)の組み合わせではAllTestが正しく動作する事を確認出来ています。 64bit混在環境での対応は出来ていません。
guest

回答1

0

自己解決

キータのコメントにありました。

@waka-hoihoi

2018-12-26 06:50
今現在(2018/12/26)、サンプルExcelのSQLiteForExcel_64.xlsmのAllTestsはこのままでは失敗します(EXCELが死にます)。以下のsqlite3_backup_init の宣言の関数の戻り値のタイプをLongPtrに変更する必要があるようです。

VBA

1 2'Sqlite3_64.bas 3'もしくは 4'SQLiteForExcel_64.xlsmの標準モジュール"Sqlite3" 5 6'Private Declare PtrSafe Function sqlite3_backup_init Lib "SQLite3" (ByVal hDbDest As LongPtr, ByVal zDestName As LongPtr, ByVal hDbSource As LongPtr, ByVal zSourceName As LongPtr) As Long 7'↓ 8Private Declare PtrSafe Function sqlite3_backup_init Lib "SQLite3" (ByVal hDbDest As LongPtr, ByVal zDestName As LongPtr, ByVal hDbSource As LongPtr, ByVal zSourceName As LongPtr) As LongPtr

投稿2019/05/29 12:52

jkjksan

総合スコア19

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ManabuWatanabe

2020/05/10 07:59

同じ事象で悩んでいたところ、ここのQ&Aに辿り着き、無事解決できました。ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問