Ver Mensaje Individual
  #1  
Antiguo 07-06-2010
el-otro el-otro is offline
Miembro
 
Registrado: sep 2004
Posts: 13
Reputación: 0
el-otro Va por buen camino
XML a ClientDataSet

Buenos días:

Ante todo agradeceros el tiempo que podais dedicar a resolver esta duda que me tiene totalmente bloqueado.

Estoy desarrollando una aplicación en la que cada vez que se accede se modifican determinados parametros en función de un fichero XML que se genera en un servicio web.

Para esto llamo a un servicio web, que me devuelve un string con el contenido del xml, y despues de pasarlo por un TStringList lo guardo como un fichero XML.

Este fichero XML siempre tiene la misma estructura, aunque cambia de contenido cada vez que se descarga. Por tanto, he creado con el XML Mapper unos fichero xrt para dar la estructura a un TXMLTransformProvider.

Como el fichero se borra y se escribe en el inicio de la aplicación, lo que hago es crear en tiempo de ejecución un TXMLTransformProvider y TClientDataSet
Código Delphi [-]
Transformador := TXMLTransformProvider.Create(Self);
Transformador.XMLDataFile := 'C:\usuario.xml';
Transformador.TransformRead.TransformationFile := C:\usuario.xrt';
Transformador.TransformWrite.TransformationFile := C:\usuarioToXML.xrt';

DatosUsu := TClientDataSet.Create(nil);
DatosUsu.ProviderName := 'Transformador';
DatosUsu.PacketRecords := -1;
DatosUsu.StoreDefs := True;
DatosUsu.FieldDefs.Add('Codigo',ftInteger,0,True);
DatosUsu.FieldDefs.Add('Clase',ftString,80,False);
DatosUsu.FieldDefs.Add('Valor1',ftString,100,False);
DatosUsu.FieldDefs.Add('Valor2',ftString,100,False);
DatosUsu.FieldDefs.Add('Valor3',ftString,100,False);
DatosUsu.FieldDefs.Add('Valor4',ftString,100,False);
DatosUsu.IndexDefs.Add('','Codigo',[ixUnique]);
Datosusu.CreateDataSet;
DatosUsu.Active;

El sistema parece funcionar ya que no da errores, sin embargo, cuando me trato de ver el contenido de DatosUsu, o cuando trato de llenar una grilla con sus datos, me lo muestra como vacio, tiene estructura creada pero no contiene datos.

Como he probado 100 cosas (el refresh, el applyupdate, etc.), he detectado que si no borro el fichero XML el ClientDataSet se carga, pero se carga con los datos del fichero XML antiguo, es decir, el que existe antes de crearlo, como si no se actualizase. Esto quiere decir que el cliente siempre trabajaría con una versión anterior del XML, además de que en la primera ocasión no trabajaría, ya que no existe el XML.

He leido documentación en este foro, en cien sitios más y en todos se supone que debe funcionar bien, y sin embargo yo no lo consigo. Se admiten todo tipo de ideas y sugerencias, y se agradecen por anticipado.

Un saludo.
Responder Con Cita