Skip to content

Commit 9b204e4

Browse files
govert_cpgovert_cp
authored andcommitted
SQLiteForExcel Version 0.5 - 6 August 2010 (with SQLite3.dll Version 3.6.23)
1 parent 2e29424 commit 9b204e4

9 files changed

Lines changed: 210 additions & 46 deletions

File tree

Distribution/SQLite3_StdCall.dll

512 Bytes
Binary file not shown.

Distribution/SQLiteForExcel.xls

22 KB
Binary file not shown.

Distribution/sqlite3.dll

8.6 KB
Binary file not shown.

Source/SQLite3VBAModules/Sqlite3.bas

Lines changed: 73 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -49,24 +49,24 @@ Public Const SQLITE_ROW As Long = 100 ' sqlite3_step() has another row r
4949
Public Const SQLITE_DONE As Long = 101 ' sqlite3_step() has finished executing
5050

5151
' Extended error codes
52-
'#define SQLITE_IOERR_READ (SQLITE_IOERR | (1<<8))
53-
'#define SQLITE_IOERR_SHORT_READ (SQLITE_IOERR | (2<<8))
54-
'#define SQLITE_IOERR_WRITE (SQLITE_IOERR | (3<<8))
55-
'#define SQLITE_IOERR_FSYNC (SQLITE_IOERR | (4<<8))
56-
'#define SQLITE_IOERR_DIR_FSYNC (SQLITE_IOERR | (5<<8))
57-
'#define SQLITE_IOERR_TRUNCATE (SQLITE_IOERR | (6<<8))
58-
'#define SQLITE_IOERR_FSTAT (SQLITE_IOERR | (7<<8))
59-
'#define SQLITE_IOERR_UNLOCK (SQLITE_IOERR | (8<<8))
60-
'#define SQLITE_IOERR_RDLOCK (SQLITE_IOERR | (9<<8))
61-
'#define SQLITE_IOERR_DELETE (SQLITE_IOERR | (10<<8))
62-
'#define SQLITE_IOERR_BLOCKED (SQLITE_IOERR | (11<<8))
63-
'#define SQLITE_IOERR_NOMEM (SQLITE_IOERR | (12<<8))
64-
'#define SQLITE_IOERR_ACCESS (SQLITE_IOERR | (13<<8))
65-
'#define SQLITE_IOERR_CHECKRESERVEDLOCK (SQLITE_IOERR | (14<<8))
66-
'#define SQLITE_IOERR_LOCK (SQLITE_IOERR | (15<<8))
67-
'#define SQLITE_IOERR_CLOSE (SQLITE_IOERR | (16<<8))
68-
'#define SQLITE_IOERR_DIR_CLOSE (SQLITE_IOERR | (17<<8))
69-
'#define SQLITE_LOCKED_SHAREDCACHE (SQLITE_LOCKED | (1<<8) )
52+
Public Const SQLITE_IOERR_READ As Long = 266 ' (SQLITE_IOERR | (1<<8))
53+
Public Const SQLITE_IOERR_SHORT_READ As Long = 522 '(SQLITE_IOERR | (2<<8))
54+
Public Const SQLITE_IOERR_WRITE As Long = 778 '(SQLITE_IOERR | (3<<8))
55+
Public Const SQLITE_IOERR_FSYNC As Long = 1034 '(SQLITE_IOERR | (4<<8))
56+
Public Const SQLITE_IOERR_DIR_FSYNC As Long = 1290 '(SQLITE_IOERR | (5<<8))
57+
Public Const SQLITE_IOERR_TRUNCATE As Long = 1546 '(SQLITE_IOERR | (6<<8))
58+
Public Const SQLITE_IOERR_FSTAT As Long = 1802 '(SQLITE_IOERR | (7<<8))
59+
Public Const SQLITE_IOERR_UNLOCK As Long = 2058 '(SQLITE_IOERR | (8<<8))
60+
Public Const SQLITE_IOERR_RDLOCK As Long = 2314 '(SQLITE_IOERR | (9<<8))
61+
Public Const SQLITE_IOERR_DELETE As Long = 2570 '(SQLITE_IOERR | (10<<8))
62+
Public Const SQLITE_IOERR_BLOCKED As Long = 2826 '(SQLITE_IOERR | (11<<8))
63+
Public Const SQLITE_IOERR_NOMEM As Long = 3082 '(SQLITE_IOERR | (12<<8))
64+
Public Const SQLITE_IOERR_ACCESS As Long = 3338 '(SQLITE_IOERR | (13<<8))
65+
Public Const SQLITE_IOERR_CHECKRESERVEDLOCK As Long = 3594 '(SQLITE_IOERR | (14<<8))
66+
Public Const SQLITE_IOERR_LOCK As Long = 3850 '(SQLITE_IOERR | (15<<8))
67+
Public Const SQLITE_IOERR_CLOSE As Long = 4106 '(SQLITE_IOERR | (16<<8))
68+
Public Const SQLITE_IOERR_DIR_CLOSE As Long = 4362 '(SQLITE_IOERR | (17<<8))
69+
Public Const SQLITE_LOCKED_SHAREDCACHE As Long = 265 '(SQLITE_LOCKED | (1<<8) )
7070

7171
' Options for Text and Blob binding
7272
Private Const SQLITE_STATIC As Long = 0
@@ -139,6 +139,14 @@ Private Declare Function sqlite3_stdcall_bind_text16 Lib "SQLite3_StdCall" Alias
139139
Private Declare Function sqlite3_stdcall_bind_value Lib "SQLite3_StdCall" Alias "_sqlite3_stdcall_bind_value@12" (ByVal hStmt As Long, ByVal paramIndex As Long, ByVal pSqlite3Value As Long) As Long
140140
Private Declare Function sqlite3_stdcall_clear_bindings Lib "SQLite3_StdCall" Alias "_sqlite3_stdcall_clear_bindings@4" (ByVal hStmt As Long) As Long
141141

142+
'Backup
143+
Private Declare Function sqlite3_stdcall_sleep Lib "SQLite3_StdCall" Alias "_sqlite3_stdcall_sleep@4" (ByVal msToSleep As Long) As Long
144+
Private Declare Function sqlite3_stdcall_backup_init Lib "SQLite3_StdCall" Alias "_sqlite3_stdcall_backup_init@16" (ByVal hDbDest As Long, ByVal zDestName As Long, ByVal hDbSource As Long, ByVal zSourceName As Long) As Long
145+
Private Declare Function sqlite3_stdcall_backup_step Lib "SQLite3_StdCall" Alias "_sqlite3_stdcall_backup_step@8" (ByVal hBackup As Long, ByVal nPage As Long) As Long
146+
Private Declare Function sqlite3_stdcall_backup_finish Lib "SQLite3_StdCall" Alias "_sqlite3_stdcall_backup_finish@4" (ByVal hBackup As Long) As Long
147+
Private Declare Function sqlite3_stdcall_backup_remaining Lib "SQLite3_StdCall" Alias "_sqlite3_stdcall_backup_remaining@4" (ByVal hBackup As Long) As Long
148+
Private Declare Function sqlite3_stdcall_backup_pagecount Lib "SQLite3_StdCall" Alias "_sqlite3_stdcall_backup_pagecount@4" (ByVal hBackup As Long) As Long
149+
142150
'=====================================================================================
143151
' Initialize - load libraries explicitly
144152
Private hSQLiteLibrary As Long
@@ -188,46 +196,46 @@ End Function
188196
'=====================================================================================
189197
' Database connections
190198

191-
Public Function SQLite3Open(ByVal FileName As String, ByRef DbHandle As Long) As Long
192-
SQLite3Open = sqlite3_stdcall_open16(StrPtr(FileName), DbHandle)
199+
Public Function SQLite3Open(ByVal FileName As String, ByRef dbHandle As Long) As Long
200+
SQLite3Open = sqlite3_stdcall_open16(StrPtr(FileName), dbHandle)
193201
End Function
194202

195-
Public Function SQLite3Close(ByVal DbHandle As Long) As Long
196-
SQLite3Close = sqlite3_stdcall_close(DbHandle)
203+
Public Function SQLite3Close(ByVal dbHandle As Long) As Long
204+
SQLite3Close = sqlite3_stdcall_close(dbHandle)
197205
End Function
198206

199207
'=====================================================================================
200208
' Error information
201209

202-
Public Function SQLite3ErrMsg(ByVal DbHandle As Long) As String
203-
SQLite3ErrMsg = Utf8PtrToString(sqlite3_stdcall_errmsg(DbHandle))
210+
Public Function SQLite3ErrMsg(ByVal dbHandle As Long) As String
211+
SQLite3ErrMsg = Utf8PtrToString(sqlite3_stdcall_errmsg(dbHandle))
204212
End Function
205213

206-
Public Function SQLite3ErrCode(ByVal DbHandle As Long) As Long
207-
SQLite3ErrCode = Utf8PtrToString(sqlite3_stdcall_errcode(DbHandle))
214+
Public Function SQLite3ErrCode(ByVal dbHandle As Long) As Long
215+
SQLite3ErrCode = sqlite3_stdcall_errcode(dbHandle)
208216
End Function
209217

210-
Public Function SQLite3ExtendedErrCode(ByVal DbHandle As Long) As Long
211-
SQLite3ExtendedErrCode = Utf8PtrToString(sqlite3_stdcall_extended_errcode(DbHandle))
218+
Public Function SQLite3ExtendedErrCode(ByVal dbHandle As Long) As Long
219+
SQLite3ExtendedErrCode = sqlite3_stdcall_extended_errcode(dbHandle)
212220
End Function
213221

214222
'=====================================================================================
215223
' Change Counts
216224

217-
Public Function SQLite3Changes(ByVal DbHandle As Long) As Long
218-
SQLite3Changes = sqlite3_stdcall_changes(DbHandle)
225+
Public Function SQLite3Changes(ByVal dbHandle As Long) As Long
226+
SQLite3Changes = sqlite3_stdcall_changes(dbHandle)
219227
End Function
220228

221-
Public Function SQLite3TotalChanges(ByVal DbHandle As Long) As Long
222-
SQLite3TotalChanges = sqlite3_stdcall_total_changes(DbHandle)
229+
Public Function SQLite3TotalChanges(ByVal dbHandle As Long) As Long
230+
SQLite3TotalChanges = sqlite3_stdcall_total_changes(dbHandle)
223231
End Function
224232

225233
'=====================================================================================
226234
' Statements
227235

228-
Public Function SQLite3PrepareV2(ByVal DbHandle As Long, ByVal Sql As String, ByRef stmtHandle As Long) As Long
236+
Public Function SQLite3PrepareV2(ByVal dbHandle As Long, ByVal sql As String, ByRef stmtHandle As Long) As Long
229237
' Only the first statement (up to ';') is prepared. Currently we don't retrieve the 'tail' pointer.
230-
SQLite3PrepareV2 = sqlite3_stdcall_prepare16_v2(DbHandle, StrPtr(Sql), Len(Sql) * 2, stmtHandle, 0)
238+
SQLite3PrepareV2 = sqlite3_stdcall_prepare16_v2(dbHandle, StrPtr(sql), Len(sql) * 2, stmtHandle, 0)
231239
End Function
232240

233241
Public Function SQLite3Step(ByVal stmtHandle As Long) As Long
@@ -315,6 +323,36 @@ Public Function SQLite3ClearBindings(ByVal stmtHandle As Long) As Long
315323
End Function
316324

317325

326+
'=====================================================================================
327+
' Backup
328+
Public Function SQLite3Sleep(ByVal timeToSleepInMs As Long) As Long
329+
SQLite3Sleep = sqlite3_stdcall_sleep(timeToSleepInMs)
330+
End Function
331+
332+
Public Function SQLite3BackupInit(ByVal dbHandleDestination As Long, ByVal destinationName As String, ByVal dbHandleSource As Long, ByVal sourceName As String) As Long
333+
Dim bufDestinationName() As Byte
334+
Dim bufSourceName() As Byte
335+
bufDestinationName = StringToUtf8Bytes(destinationName)
336+
bufSourceName = StringToUtf8Bytes(sourceName)
337+
SQLite3BackupInit = sqlite3_stdcall_backup_init(dbHandleDestination, VarPtr(bufDestinationName(0)), dbHandleSource, VarPtr(bufSourceName(0)))
338+
End Function
339+
340+
Public Function SQLite3BackupFinish(ByVal backupHandle As Long) As Long
341+
SQLite3BackupFinish = sqlite3_stdcall_backup_finish(backupHandle)
342+
End Function
343+
344+
Public Function SQLite3BackupStep(ByVal backupHandle As Long, ByVal numberOfPages) As Long
345+
SQLite3BackupStep = sqlite3_stdcall_backup_step(backupHandle, numberOfPages)
346+
End Function
347+
348+
Public Function SQLite3BackupPageCount(ByVal backupHandle As Long) As Long
349+
SQLite3BackupPageCount = sqlite3_stdcall_backup_pagecount(backupHandle)
350+
End Function
351+
352+
Public Function SQLite3BackupRemaining(ByVal backupHandle As Long) As Long
353+
SQLite3BackupRemaining = sqlite3_stdcall_backup_remaining(backupHandle)
354+
End Function
355+
318356
' String Helpers
319357
Function Utf8PtrToString(ByVal pUtf8String As Long) As String
320358
Dim buf As String
@@ -334,7 +372,7 @@ Function Utf8PtrToString(ByVal pUtf8String As Long) As String
334372
End If
335373
End Function
336374

337-
Function StringToUtf8Bytes(ByVal str As String) As Byte()
375+
Function StringToUtf8Bytes(ByVal str As String) As Variant
338376
Dim bSize As Long
339377
Dim RetVal As Long
340378
Dim buf() As Byte

Source/SQLite3VBAModules/Sqlite3Demo.bas

Lines changed: 98 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,8 @@ Public Sub AllTests()
1616
TestInsert
1717
TestSelect
1818
TestBinding
19-
TestDates
19+
'TestDates
20+
TestBackup
2021

2122
SQLite3Free ' Quite optional
2223
End Sub
@@ -592,20 +593,20 @@ Public Sub TestBindingMore()
592593
' Create the table
593594
' ================
594595
' (O've got no error checking here...)
595-
SQLite3ExecuteNonQuery myDbHandle, "CREATE TABLE MyBigTable (TheId INTEGER, TheDate REAL, TheText TEXT, TheValue REAL)", myStmtHandle
596+
SQLite3ExecuteNonQuery myDbHandle, "CREATE TABLE MyBigTable (TheId INTEGER, TheDate REAL, TheText TEXT, TheValue REAL)"
596597

597598
'---------------------------
598599
' Add an index
599600
' ================
600-
SQLite3ExecuteNonQuery myDbHandle, "CREATE INDEX idx_MyBigTable_Id_Date ON MyBigTable (TheId, TheDate)", myStmtHandle
601+
SQLite3ExecuteNonQuery myDbHandle, "CREATE INDEX idx_MyBigTable_Id_Date ON MyBigTable (TheId, TheDate)"
601602

602603
' START Insert Time
603604
testStart = Now()
604605

605606
'-------------------
606607
' Begin transaction
607608
'==================
608-
SQLite3ExecuteNonQuery myDbHandle, "BEGIN TRANSACTION", myStmtHandle
609+
SQLite3ExecuteNonQuery myDbHandle, "BEGIN TRANSACTION"
609610

610611
'-------------------------
611612
' Prepare an insert statement with parameters
@@ -670,7 +671,7 @@ Public Sub TestBindingMore()
670671
'-------------------
671672
' Commit transaction
672673
'==================
673-
SQLite3ExecuteNonQuery myDbHandle, "COMMIT TRANSACTION", myStmtHandle
674+
SQLite3ExecuteNonQuery myDbHandle, "COMMIT TRANSACTION"
674675

675676
' STOP Insert Time
676677
Debug.Print "Insert Elapsed: " & Format(Now() - testStart, "HH:mm:ss")
@@ -702,10 +703,10 @@ Public Sub TestBindingMore()
702703

703704
startDate = DateValue("1 Jan 2000")
704705

705-
For i = 1 To 100000
706-
offset = i Mod 10000
706+
For i = 1 To 10000
707+
offset = i Mod 1000
707708
' Bind the parameters
708-
RetVal = SQLite3BindInt32(myStmtHandle, paramIndexId, 42000 + 500 + offset)
709+
RetVal = SQLite3BindInt32(myStmtHandle, paramIndexId, 4200 + 500 + offset)
709710
If RetVal <> SQLITE_OK Then
710711
Debug.Print "SQLite3Bind returned " & RetVal, SQLite3ErrMsg(myDbHandle)
711712
Beep
@@ -837,13 +838,99 @@ Public Sub TestDates()
837838
Debug.Print "----- TestDates End -----"
838839
End Sub
839840

841+
Public Sub TestBackup()
842+
Dim testFile As String
843+
Dim testFileBackup As String
844+
845+
Dim myDbHandle As Long
846+
Dim myDbBackupHandle As Long
847+
Dim myBackupHandle As Long
848+
849+
Dim RetVal As Long
850+
Dim i As Long
851+
852+
Debug.Print "----- TestBackup Start -----"
853+
854+
' Open the database - getting a DbHandle back
855+
testFile = "C:\TestSqlite3ForExcel.db3"
856+
RetVal = SQLite3Open(testFile, myDbHandle)
857+
Debug.Print "SQLite3Open returned " & RetVal
858+
859+
SQLite3ExecuteNonQuery myDbHandle, "CREATE TABLE MyTestTable (Key INT PRIMARY KEY, Value TEXT)"
860+
SQLite3ExecuteNonQuery myDbHandle, "INSERT INTO MyTestTable VALUES (1, 'First')"
861+
SQLite3ExecuteNonQuery myDbHandle, "INSERT INTO MyTestTable VALUES (2, 'Second')"
862+
SQLite3ExecuteQuery myDbHandle, "SELECT * FROM MyTestTable"
863+
864+
' Now do a backup
865+
testFileBackup = "C:\TestSqlite3ForExcel_Backup.db3"
866+
RetVal = SQLite3Open(testFileBackup, myDbBackupHandle)
867+
Debug.Print "SQLite3Open returned " & RetVal
868+
869+
myBackupHandle = SQLite3BackupInit(myDbBackupHandle, "main", myDbHandle, "main")
870+
If myBackupHandle <> 0 Then
871+
RetVal = SQLite3BackupStep(myBackupHandle, -1)
872+
Debug.Print "SQLite3BackupStep returned " & RetVal
873+
RetVal = SQLite3BackupFinish(myBackupHandle)
874+
Debug.Print "SQLite3BackupFinish returned " & RetVal
875+
End If
876+
RetVal = SQLite3ErrCode(myDbBackupHandle)
877+
Debug.Print "Backup result " & RetVal
878+
Debug.Print "Selecting from backup:"
879+
SQLite3ExecuteQuery myDbBackupHandle, "SELECT * FROM MyTestTable"
880+
881+
RetVal = SQLite3Close(myDbHandle)
882+
RetVal = SQLite3Close(myDbBackupHandle)
883+
884+
Kill testFile
885+
Kill testFileBackup
886+
887+
Debug.Print "----- TestBackup End -----"
888+
End Sub
889+
840890
' SQLite3 Helper Functions
841-
Public Function SQLite3ExecuteNonQuery(ByVal DbHandle As Long, ByVal SqlCommand As String) As Long
891+
Public Function SQLite3ExecuteNonQuery(ByVal dbHandle As Long, ByVal SqlCommand As String) As Long
842892
Dim stmtHandle As Long
843893

844-
SQLite3PrepareV2 DbHandle, SqlCommand, stmtHandle
894+
SQLite3PrepareV2 dbHandle, SqlCommand, stmtHandle
845895
SQLite3Step stmtHandle
846896
SQLite3Finalize stmtHandle
847897

848-
SQLite3ExecuteNonQuery = SQLite3Changes(DbHandle)
898+
SQLite3ExecuteNonQuery = SQLite3Changes(dbHandle)
849899
End Function
900+
901+
Public Sub SQLite3ExecuteQuery(ByVal dbHandle As Long, ByVal sqlQuery As String)
902+
' Dumps a query to the debug window. No error checking
903+
904+
Dim stmtHandle As Long
905+
Dim RetVal As Long
906+
907+
RetVal = SQLite3PrepareV2(dbHandle, sqlQuery, stmtHandle)
908+
Debug.Print "SQLite3PrepareV2 returned " & RetVal
909+
910+
' Start running the statement
911+
RetVal = SQLite3Step(stmtHandle)
912+
If RetVal = SQLITE_ROW Then
913+
Debug.Print "SQLite3Step Row Ready"
914+
PrintColumns stmtHandle
915+
Else
916+
Debug.Print "SQLite3Step returned " & RetVal
917+
End If
918+
919+
' Move to next row
920+
RetVal = SQLite3Step(stmtHandle)
921+
Do While RetVal = SQLITE_ROW
922+
Debug.Print "SQLite3Step Row Ready"
923+
PrintColumns stmtHandle
924+
RetVal = SQLite3Step(stmtHandle)
925+
Loop
926+
927+
If RetVal = SQLITE_DONE Then
928+
Debug.Print "SQLite3Step Done"
929+
Else
930+
Debug.Print "SQLite3Step returned " & RetVal
931+
End If
932+
933+
' Finalize (delete) the statement
934+
RetVal = SQLite3Finalize(stmtHandle)
935+
Debug.Print "SQLite3Finalize returned " & RetVal
936+
End Sub

Source/SQLite3_StdCall/SQLite3_StdCall.c

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -230,3 +230,39 @@ SQLITE3_STDCALL_API int __stdcall sqlite3_stdcall_bind_parameter_index(sqlite3_s
230230
return sqlite3_bind_parameter_index(pStmt, zName);
231231
}
232232

233+
SQLITE3_STDCALL_API int __stdcall sqlite3_stdcall_sleep(int msToSleep)
234+
{
235+
return sqlite3_sleep(msToSleep);
236+
}
237+
// Backup API
238+
SQLITE3_STDCALL_API sqlite3_backup* __stdcall sqlite3_stdcall_backup_init(
239+
sqlite3 *pDest, /* Destination database handle */
240+
const char *zDestName, /* Destination database name */
241+
sqlite3 *pSource, /* Source database handle */
242+
const char *zSourceName /* Source database name */
243+
)
244+
{
245+
return sqlite3_backup_init(pDest, zDestName, pSource, zSourceName);
246+
}
247+
248+
SQLITE3_STDCALL_API int __stdcall sqlite3_stdcall_backup_step(sqlite3_backup *p, int nPage)
249+
{
250+
return sqlite3_backup_step(p, nPage);
251+
}
252+
253+
SQLITE3_STDCALL_API int __stdcall sqlite3_stdcall_backup_finish(sqlite3_backup *p)
254+
{
255+
return sqlite3_backup_finish(p);
256+
}
257+
258+
SQLITE3_STDCALL_API int __stdcall sqlite3_stdcall_backup_remaining(sqlite3_backup *p)
259+
{
260+
return sqlite3_backup_remaining(p);
261+
}
262+
263+
SQLITE3_STDCALL_API int __stdcall sqlite3_stdcall_backup_pagecount(sqlite3_backup *p)
264+
{
265+
return sqlite3_backup_pagecount(p);
266+
}
267+
268+

Source/SQLite3_StdCall/sqlite3.def

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,8 @@ sqlite3_column_text16
5353
sqlite3_column_type
5454
sqlite3_column_value
5555
sqlite3_commit_hook
56+
sqlite3_compileoption_get
57+
sqlite3_compileoption_used
5658
sqlite3_complete
5759
sqlite3_complete16
5860
sqlite3_config
@@ -94,6 +96,7 @@ sqlite3_libversion
9496
sqlite3_libversion_number
9597
sqlite3_limit
9698
sqlite3_load_extension
99+
sqlite3_log
97100
sqlite3_malloc
98101
sqlite3_memory_alarm
99102
sqlite3_memory_highwater

Source/SQLite3_StdCall/sqlite3.exp

424 Bytes
Binary file not shown.

Source/SQLite3_StdCall/sqlite3.lib

702 Bytes
Binary file not shown.

0 commit comments

Comments
 (0)