|
Página 1 de 1
|
Error Con Gambas3 Y Sqlite3
Autor |
Mensaje |
vr_rv
Usuario
Registrado: Junio 2016
Mensajes: 27
Edad: 30 Ubicación:
|
Error Con Gambas3 Y Sqlite3
Buenas tardes a todos,
estoy realizando un pequeño sistema que me permita guardar las compras que realizo en el supermercado, utilizo sqlite3 como gestor de base de datos, la base de datos la diseñe con sqlitebrowser; el programa consta de solo tres tablas: Productos, Compras, DetalleCompras, donde DetalleCompras tiene campos relacionadas con Productos(IdProducto) y Compras(IdCompra).
el problema que surge es el siguiente: al ejecutar la siguiente instruccion con sqlitebrowser " insert into DetalleCompras( IdCompra,IdProducto,Cantidad,Monto) values( 10,11,3,3000)".
me arroja el siguiente error "FOREIGN KEY constraint failed: insert into DetalleCompras( IdCompra,IdProducto,Cantidad,Monto) values( 10,11,3,3000)"
lo cual es correcto por que los valores "10" y "11" no existen el las tablas Compras y Productos Respectivamente.
En cambio si la misma instrucción la ejecuto desde la aplicación en gambas, se ejecuta correctamente y llega a guardar todos los datos, lo cual no debería ser posible.
He realizado la conexión a través del asistente y mediante código obteniendo el mismo resultado.
Alguien sabe a que se debe este error?
|
#1 Miercoles, 15 Junio 2016, 22:41 |
|
|
v3ctor
Analista Programador
Registrado: May 2013
Mensajes: 1786
Edad: 44 Ubicación: Uruguay
|
Re: Error Con Gambas3 Y Sqlite3
no se la respuesta a tu pregunta. pero yo no usaría el código de sqlitebrowser, salvo para pruebas y tener una idea de las sentencias sql en el propio sql de gambas.
ejecuta las creaciones de tablas y relaciones desde el propio sql de gambas.
no se una sugerencia nomas.
=================== Software libre, programación libre, vida libre es la Public function Libertad()as Invendible
Proyectos: VisorRV1960,Taller2015,Tanteador
https://sourceforge.net/u/v3ctor-full/profile/
Blog: http://novatocodegambas.blogspot.com.uy/
|
#2 Jueves, 16 Junio 2016, 00:20 |
|
|
shordi
Analista Programador
Registrado: Septiembre 2009
Mensajes: 4982
Edad: 64 Ubicación: Albacete
|
Re: Error Con Gambas3 Y Sqlite3
gambas no activa por defecto el pragma foreign key de sqlite. Actívalo tú justo después de abrir la base de datos y todo te funcionará ok.
Ya nos cuentas.
Saludos
=================== No podemos regresar
|
#3 Jueves, 16 Junio 2016, 00:33 |
|
|
vr_rv
Usuario
Registrado: Junio 2016
Mensajes: 27
Edad: 30 Ubicación:
|
Re: Error Con Gambas3 Y Sqlite3
Gambas no activa por defecto el pragma foreign key de sqlite. Actívalo tú justo después de abrir la base de datos y todo te funcionará ok.
Saludos
y como activo eso?
|
#4 Jueves, 16 Junio 2016, 00:40 |
|
|
Shell
Analista Programador
Registrado: Marzo 2010
Mensajes: 5278
Edad: 53 Ubicación: Al otro lado de la pantalla
|
Re: Error Con Gambas3 Y Sqlite3
Shordi:
¿ Una vez creada la tabla se puede hacer eso en sqlite ?. Vale, que la tabla tenga que existir a la que se hace referencia.
¿ Se puede cambiar de la forma ALTER TABLE.. ?
Saludos
=================== Gambas Básico
"No es un bug, es una característica no documentada"
|
#5 Jueves, 16 Junio 2016, 07:46 |
|
|
shordi
Analista Programador
Registrado: Septiembre 2009
Mensajes: 4982
Edad: 64 Ubicación: Albacete
|
Re: Error Con Gambas3 Y Sqlite3
y como activo eso?
Símplemente ejcutando la consulta que lo activa:
miconexionSqlite.Open()
if not miconexion.sqliteOpened then
...mensajes de erro y demás
endif
miconexionSqlite.Exec("PRAGMA foreign_keys = ON")
A partir de ahí te mantendrá la integridad referencial.
No he investigado a fondo, pero creo que se puede establecer este parámetro por defecto a SQLITE a nivel de configuración del SO. Sin embargo considero que es mejor hacerlo en gambas porque así te funcionará en cualquier máquina que tenga la instalación por defecto de sqlite sin necesidad de configurar nada.
Saludos.
=================== No podemos regresar
|
#6 Jueves, 16 Junio 2016, 09:17 |
|
|
shordi
Analista Programador
Registrado: Septiembre 2009
Mensajes: 4982
Edad: 64 Ubicación: Albacete
|
Re: Error Con Gambas3 Y Sqlite3
Shordi:
¿ Una vez creada la tabla se puede hacer eso en sqlite ?. Vale, que la tabla tenga que existir a la que se hace referencia.
¿ Se puede cambiar de la forma ALTER TABLE.. ?
Saludos
Tienes que distinguir entre la integridad referencial a nivel sintáctico - que quiere decir que las palabras reservadas y construcciones de constraints las reconoce en las sentencias de creación y manipulación, pero no las ejecuta- y la integridad referencial a nivel funcional- que quiere decir que las tiene operativas.
Una base de datos puede tener la primera y no la segunda (por ejemplo, in illo tempore Oracle 6.0, allá por los noventa.
Si quieres un ejemplo más actual, con MySQL con InnoDB, cuando haces una restauración puedes desactivar la segunda temporalmente para crear (sintáctica) y cargar (funcional) las tablas sin que te canten las restricciones.
No lo he probado, pero creo que si creas una tabla en MySQL con declaración de foreign_keys y demás, pero le asignas un motor MyIsam, te permite crearla (sintáctica) pero el motor MyIsam no tiene capacidades de integridad referencial, con lo que nunca funcionaría...
Saludos
=================== No podemos regresar
última edición por shordi el Jueves, 16 Junio 2016, 09:24; editado 1 vez
|
#7 Jueves, 16 Junio 2016, 09:22 |
|
|
Shell
Analista Programador
Registrado: Marzo 2010
Mensajes: 5278
Edad: 53 Ubicación: Al otro lado de la pantalla
|
Re: Error Con Gambas3 Y Sqlite3
Hasta el día 29 no me llega el libro de sql. Parece que lo han pedido a Marte.
Sera cosa de los "eseculianos".
=================== Gambas Básico
"No es un bug, es una característica no documentada"
|
#8 Jueves, 16 Junio 2016, 10:42 |
|
|
vr_rv
Usuario
Registrado: Junio 2016
Mensajes: 27
Edad: 30 Ubicación:
|
Re: Error Con Gambas3 Y Sqlite3
Ha funcionado perfecto, muchas gracias Shordi.
|
#9 Jueves, 16 Junio 2016, 12:10 |
|
|
|
Temas parecidos
Temas parecidos
|
Página 1 de 1
|
Usuarios navegando en este tema: 0 registrados, 0 ocultos y 1 invitado Usuarios registrados conectados: Ninguno
|
No puede crear mensajes No puede responder temas No puede editar sus mensajes No puede borrar sus mensajes No puede votar en encuestas No puede adjuntar archivos Puede descargar archivos No puede publicar eventos en el calendario
|
|
|
|
|