B4J Question [SOLVED][XLUtils / jPOI 5 & B4XTable] java.sql.SQLException: [SQLITE_ERROR] SQL error or missing database (near ")": syntax error)

Cableguy

Expert
Licensed User
Longtime User
I have tried several approaches, but nothing seems to work...
I am trying to read an excel file, but keep getting the same error, like th database in badly terminated (?)
I am basically tweaking the demo code:

B4X:
Sub CreateTableFromXLSX(Path As String, FileName As String)
    Log("=== CreateTableFromXLSX START ===")
    Log("Path: " & Path)
    Log("File: " & FileName)

    Dim xloutils As XLUtils
    xloutils.Initialize

    Dim xl As XLReader
    xl.Initialize(xloutils)

    Dim result As XLReaderResult = xl.ReadSheetByIndex(Path, FileName, 0)

    Log("Rows: " & (result.BottomRight.Row0Based + 1) & _
        " | Columns: " & (result.BottomRight.Col0Based + 1))

    Dim TableData As List
    TableData.Initialize
    For Row1Based = 1 To result.BottomRight.Row0Based + 1
        Dim col1 As String = result.Get(xloutils.AddressOne("A", Row1Based))
        If col1 = "" Then Exit 'Not really needed in this case, but it is good practice.
        Dim col2 As String = result.Get(xloutils.AddressOne("B", Row1Based))
        TableData.Add(Array(col1,col2))
    Next
    B4XTable1.SetData(TableData)
End Sub

B4X:
Waiting for debugger to connect...
Program started.
Form maximized: true
Call B4XPages.GetManager.LogEvents = True to enable logging B4XPages events.
=== CreateTableFromXLSX START ===
Path: C:\Users\psapg\Downloads\
File: Inventaire_CTR_Bordeaux_en_cours.xlsx
Rows: 99 | Columns: 9
Error occurred on line: 708 (B4XTable)
java.sql.SQLException: [SQLITE_ERROR] SQL error or missing database (near ")": syntax error)
    at org.sqlite.DB.newSQLException(DB.java:383)
    at org.sqlite.DB.newSQLException(DB.java:387)
    at org.sqlite.DB.throwex(DB.java:374)
    at org.sqlite.NativeDB.prepare(Native Method)
    at org.sqlite.DB.prepare(DB.java:123)
    at org.sqlite.Stmt.execute(Stmt.java:113)
    at anywheresoftware.b4j.objects.SQL.ExecNonQuery(SQL.java:161)
    at b4j.example.b4xtable._createtable(b4xtable.java:2244)
    at b4j.example.b4xtable$ResumableSub_SetData.resume(b4xtable.java:216)
    at b4j.example.b4xtable._setdata(b4xtable.java:149)
    at b4j.example.b4xmainpage._createtablefromxlsx(b4xmainpage.java:187)
    at b4j.example.b4xmainpage$ResumableSub_TAB1_FileOpenIcon_MouseClicked.resume(b4xmainpage.java:451)
    at anywheresoftware.b4a.shell.DebugResumableSub$DelegatableResumableSub.resumeAsUserSub(DebugResumableSub.java:47)
    at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104)
    at java.base/java.lang.reflect.Method.invoke(Method.java:578)
    at anywheresoftware.b4a.shell.Shell.runMethod(Shell.java:632)
    at anywheresoftware.b4a.shell.Shell.raiseEventImpl(Shell.java:237)
    at anywheresoftware.b4a.shell.Shell.raiseEvent(Shell.java:167)
    at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104)
    at java.base/java.lang.reflect.Method.invoke(Method.java:578)
    at anywheresoftware.b4a.BA.raiseEvent2(BA.java:117)
    at anywheresoftware.b4a.shell.ShellBA.raiseEvent2(ShellBA.java:100)
    at anywheresoftware.b4a.BA.raiseEvent(BA.java:104)
    at anywheresoftware.b4a.shell.DebugResumableSub$DelegatableResumableSub.resume(DebugResumableSub.java:42)
    at anywheresoftware.b4a.keywords.Common$2$1.run(Common.java:1106)
    at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runLater$10(PlatformImpl.java:457)
    at java.base/java.security.AccessController.doPrivileged(AccessController.java:399)
    at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runLater$11(PlatformImpl.java:456)
    at javafx.graphics/com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:96)
    at javafx.graphics/com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
    at javafx.graphics/com.sun.glass.ui.win.WinApplication.lambda$runLoop$3(WinApplication.java:184)
    at java.base/java.lang.Thread.run(Thread.java:1589)
If I comment out the B4XTable1.SetData(TableData) line, I can log all items in column A

I need help
 
Last edited:

Cableguy

Expert
Licensed User
Longtime User
SOLVED!

Seems like the Table columns MUST be set "manually", as in NOT in the same loop as the data retrieval.
 
Upvote 0
Top