Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 07-11-2019
amadis amadis is offline
Miembro
 
Registrado: may 2005
Ubicación: San José, Colón, Entre Ríos, Argentina
Posts: 315
Poder: 19
amadis Va por buen camino
SQLite error: NEAR "ON" syntax error. (UPSERT) FMX

Que tal compañeros,

Les cuento que estoy incursionando en aplicaciones multiplataforma FMX.

Estoy trabajando con SQLite . (Administrado con SQLiteStudio 3.2.1) Sqlite.dll version 3.24.

Intento actualizar una DB Sqlite que estará en el movil desde datos que tengo en un ClientDataSet.

Eso lo pensaba hacer de la siguiente manera:

Código SQL [-]
INSERT INTO articulos
(id, l1, l2, articulo,iva)
 values (123, 22, 33,'Artic',5)
ON CONFLICT(id)
 DO UPDATE 
SET l1= 22, l2 = 33, iva = 5
 WHERE id = 123

Pero al ejecutarlo, tanto en win32 como Android, obtengo el siguiente error

FireDac[Phys][SQLite]error: NEAR "ON" syntax error

Se me ocurre que puede ser porque por lo que vi la sentencia UPSERT Es soportada desde la version 3.24 de SQLite.

Si ejecuto lo mismo desde SqliteStudio todo funciona correctamente. (El SqliteStudio vino acompañado de la dll 3.24 de Sqlite.
He intentado acompañar mi Exe con la misma dll pero no funciona.

Y menos lo de android.

¿como saber que version Sqlite trae el android? o se puede distribuir de alguna forma el sqlite de android??

¿de que otra forma puedo hacer una actualización de un Id existente, o si no ingresar el nuevo registro

No me convence la idea de hacer una consulta por id, si resulta cero inserto o de lo contrario actualizo, por eso buscaba algo como lo que cité arriba.

Desde ya muchas gracias por su tiempo
Responder Con Cita
  #2  
Antiguo 07-11-2019
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.038
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Insert or replace

http://www.conclase.net/c/sqlite/?litesen=INSERT
Responder Con Cita
  #3  
Antiguo 11-11-2019
amadis amadis is offline
Miembro
 
Registrado: may 2005
Ubicación: San José, Colón, Entre Ríos, Argentina
Posts: 315
Poder: 19
amadis Va por buen camino
Hola Casimiro,

Necesito algo mas parecido al UPSERT ya que necesito usar la clausula WHERE, no sólo para el ID, como en el ejemplo sino para preguntar además fecha y hora del registro para ver si hay que actualizarlo o no (en caso de que exista) o insertarlo si no está.

Y con Insert or Replace no se permite Where.
Responder Con Cita
  #4  
Antiguo 11-11-2019
amadis amadis is offline
Miembro
 
Registrado: may 2005
Ubicación: San José, Colón, Entre Ríos, Argentina
Posts: 315
Poder: 19
amadis Va por buen camino
Creo que solución sería algo como intentar un Update ( si corresponde where fecha < arametro).
Y si fracasa (no existe el registro) insertarlo
Responder Con Cita
  #5  
Antiguo 11-11-2019
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.038
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Un insert que fallará si ya existe y entonces haces update.
Código Delphi [-]
try
  insert into ...   ;  // Si ya existe el id, fallará.
except
  update ... where id=123;  
end;
Responder Con Cita
  #6  
Antiguo 11-11-2019
Avatar de mamcx
mamcx mamcx is offline
Moderador
 
Registrado: sep 2004
Ubicación: Medellín - Colombia
Posts: 3.911
Poder: 25
mamcx Tiene un aura espectacularmamcx Tiene un aura espectacularmamcx Tiene un aura espectacular
Cita:
Empezado por amadis Ver Mensaje
Se me ocurre que puede ser porque por lo que vi la sentencia UPSERT Es soportada desde la version 3.24 de SQLite.
Debes compilar sqlite3 para no usar la version que tengas por defecto.

Parece que para firedac:

https://stackoverflow.com/questions/...firedac-sqlite
__________________
El malabarista.
Responder Con Cita
  #7  
Antiguo 11-11-2019
amadis amadis is offline
Miembro
 
Registrado: may 2005
Ubicación: San José, Colón, Entre Ríos, Argentina
Posts: 315
Poder: 19
amadis Va por buen camino
Chequearé eso de compilar con la ultima versión que parece muy interesante.

Por ahora la solución era tan simple que no me daba cuenta de hacer lo que sugirió Casimiro
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Como crear un "Cryptographic Message Syntax" en Delphi? old_martinez Varios 3 09-12-2016 15:41:59
Error "Error while trying to open file" al conectar Server Centos 6.4 64 bits lavtaro Firebird e Interbase 25 26-01-2014 09:48:19
Porque sale este error "Error al copiar archivo o carpeta"? JuanErasmo API de Windows 1 18-11-2009 17:24:49
"Error en la prueba de conexión al inicializar el proveedor. Error catastrófico" yanelisroque Conexión con bases de datos 1 18-11-2005 21:09:02
Error en previsualización:"Error raised exception class..." SGL Impresión 1 22-06-2005 12:28:16


La franja horaria es GMT +2. Ahora son las 05:53:21.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi