Pregunta acerca de SELECT en SQLite

  1. 10 months ago

    Amigos, agradezco su tiempo antes que nada.

    Tengo el siguiente código en un evento Action de un botón:

    dim v_nombregrupo as string = nombre_grupo_fld.text

    dim grupo_rs as RecordSet=session.db.sqlselect("select * from grupos where NOMBRE='"+v_nombregrupo+"'")

    Usando '"+v_nomregrupo+"' Tengo mi consulta con un dato de tipo STRING.

    La pregunta es, como le hago con otros tipos de datos: Por ejemplo...INTEGER, DATE...

    Gracias !

    Juan Mañón

    Hola Juan, lo que he visto que recomiendan siempre en el foro (los que saben) es aprender sobre Prepared Statement .

    Una vez que revisas la documentación, el ejemplo que viene con Xojo y practicas un poco, te darás cuenta de que es muy conveniente usarlo para: a) evitar inyección no deseada en la base de datos y b) definir cada variable como mejor convenga.

    Tomo parte del ejemplo del documento sobre SQLitePreparedStatement:

    Dim ps As SQLitePreparedStatement = _
      db.Prepare("SELECT * FROM Persons WHERE Name = ? AND Age >= ?")
    
    ps.BindType(0, SQLitePreparedStatement.SQLITE_TEXT)
    ps.BindType(1, SQLitePreparedStatement.SQLITE_INTEGER)
    
    ps.Bind(0, "john")
    ps.Bind(1, 20)
    
    Dim rs As RecordSet = ps.SQLSelect

    El BindType te ayuda a definir si es tipo Texto, Entero, Booleano, etc.

    Puedes cambiar el ps.Bind por campos en el ps.SQLSelect, siguiendo el ejemplo de arriba, quitar los 2 ps.Bind y sería:

    Dim rs As RecordSet = ps.SQLSelect("john",20)

    Espero no confundirte mas. Puedes visitar https://www.aprendexojo.com/2016/05/protege-tus-apps-de-inyecciones-sql/

  2. Alberto D

    8 Aug 2018 Pre-Release Testers Answer

    Hola Juan, lo que he visto que recomiendan siempre en el foro (los que saben) es aprender sobre Prepared Statement .

    Una vez que revisas la documentación, el ejemplo que viene con Xojo y practicas un poco, te darás cuenta de que es muy conveniente usarlo para: a) evitar inyección no deseada en la base de datos y b) definir cada variable como mejor convenga.

    Tomo parte del ejemplo del documento sobre SQLitePreparedStatement:

    Dim ps As SQLitePreparedStatement = _
      db.Prepare("SELECT * FROM Persons WHERE Name = ? AND Age >= ?")
    
    ps.BindType(0, SQLitePreparedStatement.SQLITE_TEXT)
    ps.BindType(1, SQLitePreparedStatement.SQLITE_INTEGER)
    
    ps.Bind(0, "john")
    ps.Bind(1, 20)
    
    Dim rs As RecordSet = ps.SQLSelect

    El BindType te ayuda a definir si es tipo Texto, Entero, Booleano, etc.

    Puedes cambiar el ps.Bind por campos en el ps.SQLSelect, siguiendo el ejemplo de arriba, quitar los 2 ps.Bind y sería:

    Dim rs As RecordSet = ps.SQLSelect("john",20)

    Espero no confundirte mas. Puedes visitar https://www.aprendexojo.com/2016/05/protege-tus-apps-de-inyecciones-sql/

  3. Javier M

    8 Aug 2018 Pre-Release Testers, Xojo Pro AprendeXojo - Europe, Spain

    Hola Juan,

    Igual encuentras interesante estos dos cursos gratuitos sobre SQLite:

    Fundamentos SQLite
    Primeros pasos con SQLiteDatabase y iOSSQLiteDatabase

    Sobre el uso de los PreparedStatements:

    Protege tus apps de inyecciones SQL

    Y tutoriales de iniciación sobre SQLite con Xojo:

    Xojo: Primeros pasos con SQLite
    Primeros pasos con SQLite: Insertar y Borrar registros
    Modificar Registros y OOP en Xojo
    Transacciones en bases de datos
    Bases de datos: Guardar y Recuperar imágenes

    Javier

  4. Alberto, gracias por tu tiempo y paciencia. En este momento estoy dándole una revisada a la documentación. Agradezco nuevamente el apoyo y de igual manera estoy a tus ordenes.

    Javier, agradezco el material que compartes y estoy seguro que me será de mucha ayuda. En estos momentos estoy haciendo algunos ejercicios de práctica y no sabes...parezco niño con juguete nuevo.

or Sign Up to reply!