Android Question SQLite resultset error on Android 7.0

Kevin Hartin

Active Member
Licensed User
I have an app I have developed on a fairly new Samsun S8plus with Android 9.0 on it. When I put the App on an Android 7.0 phone for testing I get an error that a field in the resultset cannot be found. Error is as follows;

<code>
SELECT b.ID,0 AS ListOrder,b.BookingRef,b.BookingStatus,b.BookingDate,b.CreateDate,b.BookingPrice,b.BookingQuantity,b.BookingName,b.BookingNotes,p.ProductName,p.ProductDescription,p.PriceBasis FROM bookings b JOIN products p ON b.ProductID = p.ID WHERE b.BookingStatus = 'NEW' UNION ALL SELECT b.ID, 1 AS ListOrder,b.BookingRef,b.BookingStatus,b.BookingDate,b.CreateDate,b.BookingPrice,b.BookingQuantity,b.BookingName,b.BookingNotes,p.ProductName,p.ProductDescription,p.PriceBasis FROM bookings b JOIN products p ON b.ProductID = p.ID WHERE b.BookingStatus <> 'NEW' ORDER BY ListOrder ASC,BookingDate ASC
Error occurred on line: 47 (Bookings)
java.lang.IllegalArgumentException: column 'ProductName' does not exist
at android.database.AbstractCursor.getColumnIndexOrThrow(AbstractCursor.java:333)
at anywheresoftware.b4a.sql.SQL$CursorWrapper.GetString(SQL.java:377)
at com.ms.adventuresamoa.bookings._showbookings(bookings.java:1160)
at com.ms.adventuresamoa.bookings$ResumableSub_InitialiseData.resume(bookings.java:1107)
at anywheresoftware.b4a.shell.DebugResumableSub$DelegatableResumableSub.resumeAsUserSub(DebugResumableSub.java:48)
at java.lang.reflect.Method.invoke(Native Method)
at anywheresoftware.b4a.shell.Shell.runMethod(Shell.java:732)
at anywheresoftware.b4a.shell.Shell.raiseEventImpl(Shell.java:351)
at anywheresoftware.b4a.shell.Shell.raiseEvent(Shell.java:255)
at java.lang.reflect.Method.invoke(Native Method)
at anywheresoftware.b4a.ShellBA.raiseEvent2(ShellBA.java:144)
at anywheresoftware.b4a.BA.raiseEvent(BA.java:176)
at anywheresoftware.b4a.shell.DebugResumableSub$DelegatableResumableSub.resume(DebugResumableSub.java:43)
at anywheresoftware.b4a.BA.checkAndRunWaitForEvent(BA.java:250)
at anywheresoftware.b4a.ShellBA.raiseEvent2(ShellBA.java:137)
at anywheresoftware.b4a.BA$2.run(BA.java:370)
at android.os.Handler.handleCallback(Handler.java:836)
at android.os.Handler.dispatchMessage(Handler.java:103)
at android.os.Looper.loop(Looper.java:203)
at android.app.ActivityThread.main(ActivityThread.java:6251)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1063)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:924)
</code>

Code is as follows;

<code>
Query = "SELECT b.ID,0 AS ListOrder,b.BookingRef,b.BookingStatus,b.BookingDate,b.CreateDate,b.BookingPrice,b.BookingQuantity,b.BookingName,b.BookingNotes,p.ProductName,p.ProductDescription,p.PriceBasis FROM bookings b JOIN products p ON b.ProductID = p.ID WHERE b.BookingStatus = 'NEW' UNION ALL SELECT b.ID, 1 AS ListOrder,b.BookingRef,b.BookingStatus,b.BookingDate,b.CreateDate,b.BookingPrice,b.BookingQuantity,b.BookingName,b.BookingNotes,p.ProductName,p.ProductDescription,p.PriceBasis FROM bookings b JOIN products p ON b.ProductID = p.ID WHERE b.BookingStatus <> 'NEW' ORDER BY ListOrder ASC,BookingDate ASC"
Log(Query)
ResultSet1 = Starter.SQL1.ExecQuery(Query)
Do While ResultSet1.NextRow
clvBookings.Add(CreateItem(clvBookings.AsView.Width, ResultSet1.GetString("ProductName"), ResultSet1.GetString("BookingDate"), "Quantity "&ResultSet1.GetString("BookingQuantity")&" Price $"&ResultSet1.GetString("BookingPrice")&" "&ResultSet1.GetString("PriceBasis"), ResultSet1.GetString("BookingName"), ResultSet1.GetString("BookingNotes"), ResultSet1.GetString("BookingRef"), ResultSet1.GetString("BookingStatus"), ResultSet1.GetString("ID")), "")
Loop
</code>

I have copied the DB to a pPC and get the resultset as per normal on the SQL Query.

So it looks like there is some sort of difference between SQLite on Android versions. DB is SQLite Version 3.
 
Top