Italian stringa sql errata

Discussion in 'Italian Forum' started by 3394509365, May 4, 2015.

  1. 3394509365

    3394509365 Active Member Licensed User

    qualcuno mi dice perchè è sbagliato, mi da questo log ma io non vedo errori.

    SELECT ID As [ID], Prog As [Prog], Titolo As [Titolo], Altro As [Altro] FROM [Birrino ]
    ExecuteHtml: SELECT ID As [ID], Prog As [Prog], Titolo As [Titolo], Altro As [Altro] FROM [Birrino ] WHERE Titolo = 'Amore che prendi amore che dai'
    Error occurred on line: 153 (gestionetbl)
    android.database.sqlite.SQLiteException: near "WHERE": syntax error (code 1): , while compiling: SELECT ID FROM [Birrino ] ORDER BY Titolo ASC WHERE Titolo = 'Amore che prendi amore che dai'
    at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
    at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:892)
    at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:503)
    at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:726)
    at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:58)
    at android.database.sqlite.SQLiteQuery.<init>(SQLiteQuery.java:37)
    at android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:44)
    at android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1415)
    at android.database.sqlite.SQLiteDatabase.rawQuery(SQLiteDatabase.java:1354)
    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:515)
    at anywheresoftware.b4a.shell.Shell.runMethod(Shell.java:485)
    at anywheresoftware.b4a.shell.Shell.raiseEventImpl(Shell.java:229)
    at anywheresoftware.b4a.shell.Shell.raiseEvent(Shell.java:174)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:515)
    at anywheresoftware.b4a.ShellBA.raiseEvent2(ShellBA.java:93)
    at anywheresoftware.b4a.BA.raiseEvent(BA.java:157)
    at StageList.DB.gestionetbl$ResumeMessage.run(gestionetbl.java:254)
    at android.os.Handler.handleCallback(Handler.java:733)
    at android.os.Handler.dispatchMessage(Handler.java:95)
    at android.os.Looper.loop(Looper.java:136)
    at android.app.ActivityThread.main(ActivityThread.java:5103)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:515)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:790)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:606)
    at dalvik.system.NativeStart.main(Native Method)
    ** Activity (main) Resume **
    ** Activity (main) Pause, UserClosed = false **
     
  2. LucaMs

    LucaMs Expert Licensed User

    metti la ORDER BY alla fine della query.

    SELECT ID FROM [Birrino ] WHERE Titolo = 'Amore che prendi amore che dai' ORDER BY Titolo ASC

    (il nome della tabella, Birrino, contiene uno spazio in fondo?!?)
     
    3394509365 likes this.
  3. 3394509365

    3394509365 Active Member Licensed User

    Si lo spazio c' è. Vedo se il problema è l' ordine grazie
     
  4. 3394509365

    3394509365 Active Member Licensed User

    si effettivamente il problema era quello, sembrerebbe che l' order by vada alla fine dopo il where

    adesso mi da questo errore quando cerco un titolo che nel testo ha l' apice '

    android.database.sqlite.SQLiteException: near "ordine": syntax error (code 1): , while compiling: SELECT ID As [ID], Prog As [Prog], Titolo As [Titolo], Altro As [Altro] FROM [Lista Nomadi] WHERE Titolo = 'L' ordine dall' alto'

    mi pare di aver visto da qualche parte che non sono l' unico ad avere questo problema

    qualcuno ha idea ?
     
  5. LucaMs

    LucaMs Expert Licensed User


    E' molto più comodo usare le "versioni 2" dei comandi, in questo caso ExecQuery2
    Code:
    Dim Query As String
    Query = 
    "SELECT ID As [ID], Prog As [Prog], Titolo As [Titolo], Altro As [Altro] FROM [Lista Nomadi] WHERE Titolo = ?"
    DB.ExecQuery2(Query, 
    Array As String("L' ordine dall' alto"))

    In pratica, passi alcuni parametri in un Array stringa, i quali andranno a sostituire i punti interrogativi. Questo dovrebbe scongiurare il problema degli apici.
    (Ovviamente puoi scrivere tutto su una riga ma a me non piace :))
     
    3394509365 and maxware like this.
  6. 3394509365

    3394509365 Active Member Licensed User

    a, è vero si, forse qualche volta l' avevo usata.

    grazie tante
     
  7. LucaMs

    LucaMs Expert Licensed User

    Prego.

    Ricordati che c'è il Like, che devo inseguire DonManfred (oramai irraggiungibile :p)
     
    3394509365 likes this.
  8. maxware

    maxware Well-Known Member Licensed User

    messo io
    Mamo
     
    LucaMs likes this.
  9. sirjo66

    sirjo66 Well-Known Member Licensed User

    Gli apici devono essere raddoppiati, quindi devi trovarti con:
    SELECT ID As [ID], Prog As [Prog], Titolo As [Titolo], Altro As [Altro] FROM [Lista Nomadi] WHERE Titolo = 'L''ordine dall''alto'

    Quando vai a costruire la tua stringa devi eseguire un Replace e dirgli che se trova gli apici deve metterli doppi, ora non ho sottomano B4A ma una cosa del genere:

    Code:
    stringadiricerca = "L'ordine dall'alto"
    SQLcomando = 
    "SELECT ID As [ID], Prog As [Prog], Titolo As [Titolo], Altro As [Altro] FROM [Lista Nomadi] WHERE Titolo = '" & stringadiricerca.Replace("'","''") & "'"
    Ciao
    Sergio
     
  10. LucaMs

    LucaMs Expert Licensed User

    Grazie Mamo :)
     
  11. FabioRome

    FabioRome Member Licensed User

    per ovviare la gestione degli apici nelle stringhe SQL usa la funzione encodeUrl:

    Code:
    Dim su As StringUtils
    Dim encodeUrl As String

    tmpQuery = su.encodeUrl (tmpQuery, 
    "UTF8")
     
Loading...
  1. This site uses cookies to help personalise content, tailor your experience and to keep you logged in if you register.
    By continuing to use this site, you are consenting to our use of cookies.
    Dismiss Notice