Italian Query ricorsiva

marcellissimo

Member
Licensed User
Longtime User
Salve a tutti
Ho un problema con una query ricorsiva che nell'editor di sqlLiteStudio funziona ma quando la passo da b4a va in errore



Code: Copy
Sub popolaListaCatGroup
    Dim dbCursor As Cursor
    Dim q As String ="WITH RECURSIVE " &  _
    " cat_group(id_macro, desc, id,seq, level, abilitato) As ( " & _
    " VALUES("""","""", '-1',0, """", """") "  & _
    " UNION ALL " & _
    " Select categorie_menu.macro_cat, categorie_menu.descrizione, " & _
    " categorie_menu.id_Cat,categorie_menu.sequenza, cat_group.level+1, " & _
    "    categorie_menu.abilitato " & _
    "    FROM categorie_menu JOIN cat_group ON categorie_menu.macro_cat=cat_group.id " & _
    "    ORDER BY  5 desc, 4 Asc    ) " & _
    " Select * FROM cat_group "
    dbCursor= cnSql.dbsql.ExecQuery(q)
   
   
    For i = 0 To dbCursor.RowCount - 1
        DoEvents
        dbCursor.Position=i
        Dim cat_group As cat_group
       
        cat_group.id_macro=dbCursor.GetInt("id_macro")
        cat_group.desc=dbCursor.GetString("desc")
        cat_group.id=dbCursor.GetInt("id")



L'errore è questo

Code: Copy
Error occurred on line: 133 (ClsMenu)
android.database.sqlite.SQLiteException: near "WITH": syntax error: , while compiling: WITH RECURSIVE  cat_group(id_macro, desc, id,seq, level, abilitato) As (  VALUES("","", '-1',0, "", "")  UNION ALL  Select categorie_menu.macro_cat, categorie_menu.descrizione,  categorie_menu.id_Cat,categorie_menu.sequenza, cat_group.level+1,     categorie_menu.abilitato     FROM categorie_menu JOIN cat_group ON categorie_menu.macro_cat=cat_group.id     ORDER BY  5 desc, 4 Asc    )  Select * FROM cat_group
    at android.database.sqlite.SQLiteCompiledSql.native_compile(Native Method)
    at android.database.sqlite.SQLiteCompiledSql.compile(SQLiteCompiledSql.java:92)
    at android.database.sqlite.SQLiteCompiledSql.<init>(SQLiteCompiledSql.java:65)
    at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:73)
    at android.database.sqlite.SQLiteQuery.<init>(SQLiteQuery.java:49)
    at android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:42)
    at android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1502)
    at android.database.sqlite.SQLiteDatabase.rawQuery(SQLiteDatabase.java:1470)
    at anywheresoftware.b4a.sql.SQL.ExecQuery2(SQL.java:167)
    at anywheresoftware.b4a.sql.SQL.ExecQuery(SQL.java:155)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:507)
    at anywheresoftware.b4a.shell.Shell.runMethod(Shell.java:710)
    at anywheresoftware.b4a.shell.Shell.raiseEventImpl(Shell.java:339)
    at anywheresoftware.b4a.shell.Shell.raiseEvent(Shell.java:249)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:507)
    at anywheresoftware.b4a.ShellBA.raiseEvent2(ShellBA.java:134)

Qualche anima pia può aiutarmi ?
 
oppure:
Code: Copy
$"WITH RECURSIVE 
    cat_group(id_macro, desc, id,seq, level, abilitato) As ( 
    VALUES("""","""", '-1',0, """", """") 
     UNION ALL
     Select categorie_menu.macro_cat, categorie_menu.descrizione,
     categorie_menu.id_Cat,categorie_menu.sequenza, cat_group.level+1,
        categorie_menu.abilitato
        FROM categorie_menu JOIN cat_group ON categorie_menu.macro_cat=cat_group.id
        ORDER BY  5 desc, 4 Asc    )
     Select * FROM cat_group "$
 
Grazie ad entrambi
ho fatto un po di prove usando i vostri suggerimenti ma non passa ugualmente.
proverò ad ottenere lo stesso risultato della query da codice anche se non mi piace.
 
ok... ho risolto creando una view direttamente sul db e da b4a la userò come una normale tabella.
grazie ancora

----
Rettifico, nemmeno così funziona, il motivo per il quale funziona sull'editor di sqlitemanager è perchè uso l'ultima versione di sqlite ...
I device che sto usando per prova hanno le versioni 3.7.11 e 3.7.2 ;
la clausola "WITH" non è supportata sino alla versione 3.8.3...
Per concludere il problema non credo sia risolvibile mantenendo la compatibilità con vecchi device .
Pace
 
Last edited:
Back
Top