Spanish SOLUCIONADO - Valores Nulos en SQL

Espinosa4

Active Member
Licensed User
Longtime User
Hola a tod@s

Tengo una duda y no sé como resolverla con los campos NULL

Cuando voy a actualizar un registro es posible que los valores de s.linea1 y s.linea2 sean o Null o tengan un valor tipo String
Si Las variables las pongo en la setencia SQL y no es null no hay problema pero si son null, o bien se almacena la palabra Null como string o si no lo pongo entre comillas al no ser valores numéricos también da error.

No sé si me explico..

Ejemplo 1 SQL.ExecNonQuery("UPDATE Texto SET Linea1 = "&s.Linea1&",Servicio = "&s.linea2&)

Ejemplo 2 SQL.ExecNonQuery("UPDATE Simulacion_Lineas SET Linea = '"&servicio.Linea&"',Servicio = '"&servicio.Servicio&"'")


Estoy pensando en poner todos los valores Null de todas las tablas que tengo en "" (string vacío).


Un saludo.
 

drgottjr

Expert
Licensed User
Longtime User
no veo por que te salen errores. para mi, esto funciona sin error (si comprendo bien la duda):
B4X:
    SQL.ExecNonQuery("CREATE TABLE test (col1 TEXT , col2 TEXT)")
    SQL.ExecNonQuery2("INSERT INTO test VALUES(?, ?)", Array ("saludo",Null))
    SQL.ExecNonQuery2("INSERT INTO test VALUES(?, ?)", Array (Null,"adios"))
    SQL.ExecNonQuery2("INSERT INTO test VALUES(?, ?)", Array (Null,""))
    SQL.ExecNonQuery2("INSERT INTO test VALUES(?, ?)", Array ("",""))
    SQL.ExecNonQuery2("INSERT INTO test VALUES(?, ?)", Array (Null,Null))
    SQL.ExecNonQuery2("INSERT INTO test VALUES(?, ?)", Array (1,2))

    rs = SQL.ExecQuery("select * from test")
    Do While rs.NextRow
        Log( rs.GetString("col1") & " " & rs.GetString("col2"))
    Loop    

    SQL.Close

sqlite acepta un string normal, un string vacio, valores numericos, y Null (que no es lo mismo que "null", aunque se escribe igual).
de todas formas, mas vale usar execnonquery2() que execnonquery(). se lee mas facil.
 

Attachments

  • sqlite.png
    sqlite.png
    22.1 KB · Views: 55

Espinosa4

Active Member
Licensed User
Longtime User
Buenas noches @drgottjr

Muchísimas gracias por responder.
El problema que tengo es que construyo la sentencia con '&valor&' por que si no pongo las comillas me da error. Entonces los Null me los guarda como 'null'. Si le quito las comillas me aparece un error y no puedo actualizar los registros.

El problema no lo tengo en Insert lo tengo en Update.

Un saludo.
Probaré lo que me comentas del execnonquery2
 

josejad

Expert
Licensed User
Longtime User
SET Linea1 = "&s.Linea1&",Servicio = "&s.linea2&
Mira el tip numero 5

 

drgottjr

Expert
Licensed User
Longtime User
o sea:
B4X:
    SQL.ExecNonQuery2("update test set col1 = ?, col2 = ?",Array("ningun error", Null))

    rs = SQL.ExecQuery("select * from test")
    Do While rs.NextRow
        Log( rs.GetString("col1") & " " & rs.GetString("col2"))
    Loop
 

Attachments

  • sqlite.png
    sqlite.png
    31.8 KB · Views: 48

Espinosa4

Active Member
Licensed User
Longtime User
Mira el tip numero 5

Ahora acabo de ver los incovenientes de la forma en lo que lo hacía. Lo estaba haciendo bastante mal 😅

Gracias por el enlace.
 
Last edited:

Espinosa4

Active Member
Licensed User
Longtime User
o sea:
B4X:
    SQL.ExecNonQuery2("update test set col1 = ?, col2 = ?",Array("ningun error", Null))

    rs = SQL.ExecQuery("select * from test")
    Do While rs.NextRow
        Log( rs.GetString("col1") & " " & rs.GetString("col2"))
    Loop
Así sí que me funciona!
Muchísimas gracias @drgottjr !


Gracias a todos por vuestros consejos y ayuda.
 
Top