Hi
Maybe I misunderstand the function but I do not get the SQLite_Exec_Callback function to work.
It returns only the first column name with value even if there are more columns in the table.
Accompany modified code with a table of 4 kolummer from 'sqllite execute' example.
regards
Eddy
' ########################################################################################
' Microsoft Windows
' File: CSQLITE_Exec.bas
' Contents: CSQLite class example
' Connects to a database and reads records.
' Copyright (c) 2012 José Roca. Freeware. Use at your own risk.
' Portions Copyright (c) Microsoft Corporation. All Rights Reserved.
' THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER
' EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
' MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR PURPOSE.
' ########################################################################################
#COMPILE EXE
#DIM ALL
#INCLUDE ONCE "CSQLite.INC"
' ========================================================================================
' Main
' ========================================================================================
FUNCTION PBMAIN
' // Create an instance of the class
LOCAL pSQL AS ISQLite
pSQL = CLASS "CSQLite"
IF ISNOTHING(pSQL) THEN EXIT FUNCTION
' // Create a connection object
LOCAL pDbc AS ISQLiteConnection
pDbc = pSQL.Connection
IF ISNOTHING(pDbc) THEN EXIT FUNCTION
TRY
' // Delete our test database if it exists
IF ISFILE(EXE.PATH$ & "TestA.sdb") THEN KILL EXE.PATH$ & "TestA.sdb"
' // Create a new database
pDbc.OpenDatabase(EXE.PATH$ & "TestA.sdb")
' // Create a table
LOCAL sql AS STRING
Sql = "CREATE TABLE t (xyz text,A text ,B text, C text)"
pDbc.Exec(sql)
' // Prepare the statement
sql = "INSERT INTO t (xyz,A,B,C) VALUES ('fruit','A1','B1','C1')" 'Add more colums
LOCAL pStmt AS ISQLiteStatement
pStmt = pDbc.Prepare(sql)
' // Bind the text
' pStmt.BindText(1, "Cfruit")
pStmt.Step
? "Row id was" & STR$(pDbc.LastInsertRowId)
' // Delete the prepared statement
pStmt = NOTHING
' // Close the database
pDbc.CloseDatabase
' // Open existing database for reading
pDbc.OpenDatabase2(EXE.PATH$ & "TestA.sdb", %SQLITE_OPEN_READONLY)
' // Create a table
Sql = "SELECT * FROM t"
pDbc.Exec(sql, CODEPTR(SQLite_Exec_Callback))
CATCH
' // Display error information
? pSql.OleErrorInfo
END TRY
' // Cleanup
pDbc = NOTHING ' // Closes the database
pSQL = NOTHING
#IF %DEF(%PB_CC32)
WAITKEY$
#ENDIF
END FUNCTION
' ========================================================================================
' ========================================================================================
' Callback function for the Exec method.
' Return value:
' If returns non-zero, the Exec method returns SQLITE_ABORT without invoking the callback
' again and without running any subsequent SQL statements.
' ========================================================================================
FUNCTION SQLite_Exec_Callback CDECL(BYVAL pData AS DWORD, BYVAL numCols AS LONG, BYVAL pszColValues AS ASCIIZ PTR, BYVAL pszColNames AS ASCIIZ PTR) AS LONG
LOCAL i AS LONG
FOR i = 0 TO numCols - 1
? "Column name: " & @@pszColNames[i]
? "Column value: " & @@pszColValues[i]
NEXT
? "Number of col: "str$(numCols) & " <----------------"
END FUNCTION
Then use:
' ========================================================================================
' Callback function for the Exec method.
' Return value:
' If returns non-zero, the Exec method returns SQLITE_ABORT without invoking the callback
' again and without running any subsequent SQL statements.
' ========================================================================================
FUNCTION SQLite_Exec_Callback CDECL(BYVAL pData AS DWORD, BYVAL numCols AS LONG, BYVAL pszColValues AS ASCIIZ PTR, BYVAL pszColNames AS ASCIIZ PTR) AS LONG
LOCAL i AS LONG
REDIM ColValues (0 TO numCols) AS ASCIIZ PTR AT pszColValues
REDIM ColNames (0 TO numCols) AS ASCIIZ PTR AT pszColNames
FOR i = 0 TO numCols - 1
? "Column name: " & @ColNames(i)
? "Column value: " & @ColValues(i)
NEXT
END FUNCTION
' ========================================================================================
Thanks for the code. It works fine.
Regards
Eddy