Ver Mensaje Individual
  #1  
Antiguo 20-11-2014
MLROJO MLROJO is offline
Miembro
 
Registrado: jul 2004
Ubicación: Granada
Posts: 26
Reputación: 0
MLROJO Va por buen camino
Importar/Exportar registros a XML

Hola,

Estoy creando de nuevo una aplicación, con las mismas funcionalidades que tenía en una aplicación antigua. Me encuentro la necesidad de desarrollar una funcionalidad que me permita en un principio varias cosas:

- Exportar registros de un tabla a XML.
- Importar registros del XML a la tabla.

Antes en la aplicación antigua, recorria los registros que queria exportar, los guardaba en un fichero (no XML) y con otro proceso leia estos ficheros y los importaba.

Ya que estoy intentando migrar y a la vez mejorar las funcionalidades de la aplicación antigua, he pensado en crear un fichero XML (me valdía cualquier otro formato similar, JSON por ejemplo), para ello y desde el desconocimiento, se me había ocurrido hacer lo siguiente:

Componentes para exportar/importar los registros a XML:

- Crear un TClientDataSet
- Crear un TDataSetProvider
- Crear un FDTable

Componentes para conectar a mi base de datos:

- FDConnection
- Varios FDTables...
- Creamos los diferentes DataSources, FDPhysqlitedriverlink, FDGuixWaitCursor... necesarios.

Lógica a relacionar:

- Al FDTable asignarle mi tabla que quiero importar/exportar.
- TDataSetProvider asignarle como DataSet FDTable.
- Al TClientDataSet asignarle el TDataSetProvider.

Llamar al método SaveToFile del TClientDataSet para generar el xml con los registros de la tabla. Posteriormente modifico los valores del XML y los cargo en el TClientDataSet mediante LoadFromFile, posteriormente usar el método ApplyUpdates de TClientDataSet para realizar los cambios en el FDTable (asociado al TDataSetProvider que a su vez está al TClientDataSet).

Con esta lógica me funciona en cierta medida.

Los problemas que me encuentro son:

- Despues de realizar el LoadFromFile (muestro el TClientDataSet en un grid), necesito modificar los valores de los registros para importarlos. Si no hago algún cambio en ese registro, el ApplyUpdate no interpreta el campo como modificado y no lo actualiza.
- El ApplyUpdate solo funciona para registros existentes en las dos tablas, es decir, en el TClientDataSet y en el FDQuery, si no existe no los crea.

Supongo que habrá opciones mucho más fáciles y que funcionan mejor, pero no se me ocurría otra forma y todo funcionaría relativamente si solventase los dos grandes problemas que comento arriba.

De esta forma, me gusta bastante, ya que puedo visualizar mis registros a importar/exportar en otro grid, cargar/modificar desde XML y con apenas unas líneas de código.

¿Como lo hacéis vosotros?¿se os ocurre como solucionar alguno de los 2 problemas que comento?

Espero haberme explicado medianamente bien.

Gracias,

Saludos
Responder Con Cita