Ir al contenido


Foto

Sqlite + DBGrid


  • Por favor identifícate para responder
15 respuestas en este tema

#1 jesconsa45

jesconsa45

    Member

  • Miembros
  • PipPip
  • 26 mensajes

Escrito 04 marzo 2014 - 09:05

Hola.  Antes que nada agradeceros el que compartais vuestra experiencia con los demas. Estoy tratando de hacer una aplicacion con Delphi XE5 + Firedac + SQlite y la pregunta ya manida de como editar el DBGrid y que se refleje dicho cambio en el DataSource y por ende en la base de datos vuelve al candelero. Hay mucho post sobre esto pero en ninguno veo nada que me funcione.....He probado con la VCL de Jedi, con las TMS,..Hago el cambio en el grid, capturo el evento de OnEnter o alguno parecido para hacer un Refresh/Applyupdates/CommitRetaining....cierro la aplicacion la vuelvo a ejecutar para que lea el query y ahi no se ha cambiado nada de nada,,...aparecen los mismos datos en la misma tabla....Que estoy haciendo mal?????... Muchas gracias de antemano. Saludos
Jesus

  • 0

#2 Rolphy Reyes

Rolphy Reyes

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.092 mensajes
  • LocationRepública Dominicana

Escrito 05 marzo 2014 - 06:07

Saludos.

¿Qué componentes usas de FireDAC? Usualmente con un TFDQuery es más que suficiente, simplemente le indicas cual es el campo de la clave primaria.

A modo de ejemplo, enlaza un TDBNavigator y podrás observar el estado del DataSet a medida que le das uso.

En caso de que esto no funcione, muéstranos tu código.
  • 0

#3 jesconsa45

jesconsa45

    Member

  • Miembros
  • PipPip
  • 26 mensajes

Escrito 05 marzo 2014 - 01:17

Hola Rolphy, gracias por responder. Utilizo un FDConnection, un FDQuery, Un Datasource, un FDPhysSQliteDriverLink y un DBGrid. Como hago eso que dices?, con que propiedad del FDQuery?. Gracias. Saludos. Jesus
  • 0

#4 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.448 mensajes
  • LocationMéxico

Escrito 05 marzo 2014 - 02:26

Hola Rolphy, gracias por responder. Utilizo un FDConnection, un FDQuery, Un Datasource, un FDPhysSQliteDriverLink y un DBGrid. Como hago eso que dices?, con que propiedad del FDQuery?. Gracias. Saludos. Jesus


Aunque no he usado aún los FireDac (me ha dado últimamente el mal del puerco :D :D :D, chiste local, perdón :)) me parece que podrías usar otro componente en lugar del FDQuery, no se si exista FDDataSet o algo así.

Saludos
  • 0

#5 FerCastro

FerCastro

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 636 mensajes
  • LocationCiudad de México

Escrito 05 marzo 2014 - 02:45

jesconsa45

Manejo sqlite y uso un datasource para actualizar directamente sobre el grid. No es de mi agrado, pero pudieras usar un dbnavigator, para poder hacer el post directo.

Saludos!!

.. Ah pos esto ya te lo escribió Rolphi. Un db navigator es la solución supongo.

Eliseo, cuiiiiiiiiiiiii!!!! cuiiiiiiiiiiiiiiiiiii!!! chale con el mal del E-Go

Saludos!!


  • 0

#6 jesconsa45

jesconsa45

    Member

  • Miembros
  • PipPip
  • 26 mensajes

Escrito 05 marzo 2014 - 03:30

Hola,
Egostar, Fercastro, gracias por las sugerencias. No hay FDDataset Egostar,..hay otras componentes que me suenan de haberlas visto aqui y alla por Internet para hacer esto que digo que son el FDTransaction y el FDUpdateSQL. FerCastro,...como haces tu el Post directo?,..te importaria poner aqui el codigo?....Hice lo que me dijo Rolphy..pongo el FDNavigator  y veo como varia el DBGrid, pero nada mas,.....como utilizo el Navigator para hacer el Post?...tengo que ir haciendo los Insert/Update registro a registro?,..hay alguna propiedad del FDQuery/FDNavigator/Datasource/FDConnection que lo haga directamente?....

Muchas gracias
Saludos

Jesus

  • 0

#7 Rolphy Reyes

Rolphy Reyes

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.092 mensajes
  • LocationRepública Dominicana

Escrito 06 marzo 2014 - 06:05

Saludos

Esta sería la combinación:
TFDConnection -> TFDQuery
TDataSource -> TFDQuery
TDBGrid -> TDataSource
TDBNavigator -> TDataSource

En el evento OnCreate u OnShow del Formulario activas tu conexión (TFDConnection.Connected) y también el DataSet (TFDQuery.Open); con esos pasos deberías poder manipular todo a través del Navigator para ver trabajar el DataSet.

De hecho, por lo menos cuando era AnyDAC, estos componentes tienen unos ejemplos y dentro de ellos una carpeta Getting Start.
  • 0

#8 jesconsa45

jesconsa45

    Member

  • Miembros
  • PipPip
  • 26 mensajes

Escrito 06 marzo 2014 - 08:01

Hola Rolphy...El Dataset lo veo trabajar sin problema, pero cuando hago un cambio en una celda y en el navigator hago el Post, este cambio no se graba en la base de datos (fichero .s3db)..Si reinicio la aplicacion no veo ningun cambio en el dbgrid....He mirado permisos de la carpeta donde esta el proyecto pero nada.....en la aplicacion Getting Started no me permite hacer cambios porque me dice que es una base read-only (pero con la base de datos de ese Getting Started...lo cual me parece raro....).....

Gracias
Saludos
Jesus


  • 0

#9 Rolphy Reyes

Rolphy Reyes

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.092 mensajes
  • LocationRepública Dominicana

Escrito 06 marzo 2014 - 08:05

Saludos.

Así sin mostrarnos parte de tu código de ejemplo es complicado ayudarte.

Fuera de eso, se me ocurre tal vez que la propiedad CacheUpdates esta activa.
  • 0

#10 jesconsa45

jesconsa45

    Member

  • Miembros
  • PipPip
  • 26 mensajes

Escrito 06 marzo 2014 - 09:02

Hola Rolphy,
  Ahora mismo el codigo es un batiburrillo de cosas en plan prueba y error,..cuando consiga algo lo pondre. CacheUpdate debe estar a False?

Gracias
Saludos

Jesus

  • 0

#11 Rolphy Reyes

Rolphy Reyes

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.092 mensajes
  • LocationRepública Dominicana

Escrito 06 marzo 2014 - 09:04

Saludos.

Para esta prueba que andas haciendo CacheUpdate debe tener valor False.

Cuando conozcas mejor el uso del componente como tal entonces te recomiendo que te leas la ayuda sobre la propiedad CacheUpdate.
  • 0

#12 jesconsa45

jesconsa45

    Member

  • Miembros
  • PipPip
  • 26 mensajes

Escrito 06 marzo 2014 - 03:18

Hola Rolphy, aun poniendo esta propiedad a False sigue sin funcionar......ya estoy empezando a pensar en utilizar otra base de datos que no sea SQlite,..cual me recomendais para hacer lo que quiero (editar en DBgrid y que estos cambios se actualicen automaticamente en la base de datos) sin estos problemas?..

Gracias
Jesus
  • 0

#13 jesconsa45

jesconsa45

    Member

  • Miembros
  • PipPip
  • 26 mensajes

Escrito 07 marzo 2014 - 05:51

Hola,
  Gracias a todos,..deje por imposible hacerlo con SQlite y lo he hecho con MsAccess sin problemas, como la seda.....No debera ir muy fino Firedac con Sqlite, no se....En fin, resuelto. Gracias otra vez.

Saludos
Jesus
  • 0

#14 Rolphy Reyes

Rolphy Reyes

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.092 mensajes
  • LocationRepública Dominicana

Escrito 07 marzo 2014 - 05:56

Hola,
  Gracias a todos,..deje por imposible hacerlo con SQlite y lo he hecho con MsAccess sin problemas, como la seda.....No debera ir muy fino Firedac con Sqlite, no se....En fin, resuelto. Gracias otra vez.

Saludos
Jesus


Saludos.

Si quieres seguir intentando visita el foro de AnyDAC, he visto que varias personas han logrado hacerlo andar.

Suerte!!
  • 0

#15 FerCastro

FerCastro

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 636 mensajes
  • LocationCiudad de México

Escrito 07 marzo 2014 - 09:52

Hola,
  Gracias a todos,..deje por imposible hacerlo con SQlite y lo he hecho con MsAccess sin problemas, como la seda.....No debera ir muy fino Firedac con Sqlite, no se....En fin, resuelto. Gracias otra vez.

Saludos
Jesus


Hola

Perdon por no haber revisado en tiempo estos mensaes, pero no logro expulsar la hueva.

Primero, no se si voy a preguntar algo obvio, pero pues lo pregunto antes de sacar conclusiones. La conexión hacia los datos la haces:

TABLA <----> oQUERY <----> DATASOURCE <----> GRID

O Bien:

TABLA <----> oTABLE <----> DATASOURCE <----> GRID

Porque existen varias diferencias para el manejo de tus datos cuando tu dataset es un query/stored procedure o un objeto TTable. Teno entendido (por favor si estoy diciendo incoherencias diganme) que cuando manejas query o stored procedure no puedes hacer un manejo de datos directo a través del grid. Esto solo lo haces cuando usas un objeto TTable como dataset.

Ahora bien, si tu dataset es un objeto TTable, con un simple DBNavigator podrás modificar los datos de tu tabla de manera directa desde el grid. Pero si tu grid despliega datos desde un dataset que hace referencia a un cursor de un query o un stored procedure entonces vas a tener que programar el update/post/delete para los registros de tu grid.

No se si he sido claro, la verdad es que no es mucha ciencia, quizá deberías comentar cual es el proceso y los objetos que usas para conectar tus datos al grid.

Saludos!! y estamos en contacto

- SQLite
- Delphi XE
- Devart UNIDAC

Si te sirve:

http://gfernando.blo...search?q=sqlite
  • 0

#16 jesconsa45

jesconsa45

    Member

  • Miembros
  • PipPip
  • 26 mensajes

Escrito 08 marzo 2014 - 05:47

Gracias FerCastro. Efectivamente utilizo un query y no un table como Dataset. Si fuera como dices tampoco funcionaria con MsAccess, pero no es asi, funciona perfectamente desde el DBGrid asociado a un query. ...O eso o hice algo mal con SQlite que necesite algo que no necesita MsAccess (por ejemplo)...

Gracias
Saludos

Jesus


  • 0




IP.Board spam blocked by CleanTalk.