Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 07-06-2010
el-otro el-otro is offline
Miembro
 
Registrado: sep 2004
Posts: 13
Poder: 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
  #2  
Antiguo 09-06-2010
manuc manuc is offline
Miembro
 
Registrado: abr 2010
Posts: 165
Poder: 15
manuc Va por buen camino
Hola el-otro,

Te dejo este ejecutable: asXMLtoClientDataset
Prueba a ver si puedes abrir tu XML.

Está basado en un componente de cosecha propia.

Si te funciona, te envío el componente y un ejemplo de cómo utilizarlo.

un saludo.
Responder Con Cita
  #3  
Antiguo 23-08-2010
Avatar de Wbarrantes
Wbarrantes Wbarrantes is offline
Miembro
 
Registrado: ago 2010
Posts: 119
Poder: 14
Wbarrantes Va por buen camino
buenas tardes

me gustaria de ser posibleque me envies una copia de tu componente para XML, ademas decualquier informacion adicional que pudieras tener sobre eso, ocmo un manual o ejemplos...

es que actualamente estoy dessarrollando sobre el temay necesito un poco de orientacion en cuanto a XML...

te explico un poco lo que ocupo...

1. cargar un script, parametros de conexion usuario y tabla, etc, para ejecutar el script que recibo y guardar el resultado en un XML de salida...

2. ejecutar el paso 1 cuantas veces sea necesario, segun el contenido del XML que recibi inicailmente.

ambos pasos ya estan completamente elaborados, pero ahora necesito modificar para ejecutar de manera diferente, el xml de entrada tiene el siguiente formato:

___________________________________________________________
<?xml version="1.0" standalone="yes"?>
<DATAPACKET Version="2.0">
<METADATA>
<FIELDS>
<FIELD attrname="Server" fieldtype="string" required="true" SUBTYPE="FixedChar" WIDTH="50"/>
<FIELD attrname="Database" fieldtype="string" required="true" SUBTYPE="FixedChar" WIDTH="50"/>
<FIELD attrname="Script" fieldtype="string" required="true" SUBTYPE="FixedChar" WIDTH="50"/>
<FIELD attrname="Username" fieldtype="string" required="true" SUBTYPE="FixedChar" WIDTH="50"/>
<FIELD attrname="Password" fieldtype="string" required="true" SUBTYPE="FixedChar" WIDTH="50"/>
<FIELD attrname="Save_Path" fieldtype="string" required="true" SUBTYPE="FixedChar" WIDTH="50"/>
</FIELDS>
<PARAMS LCID="0"/>
</METADATA>
<ROWDATA>
<ROW
Server = "XXX\SQL2005"
Database = "XXX"
Script = "exec sp_who"
Username = "XX"
Password = "XX"
Save_Path = "c:\Prueba\Users.XML"
/>
<ROW
Server = "XXX\SQL2005"
Database = "Prueba"
Script = "select * from dbo.Persona"
Username = "XX"
Password = "XX"
Save_Path = "c:\Prueba\persona.XML"
/>

</ROWDATA>

</DATAPACKET>
_________________________________________________________

ahora bien que es lo que necesito?

1. para cada script que me ejecute, verificar si desea 1 o mas copias y en caso de mas copias, poder tener diferentes Save_Path donde guardarlos...

pero no deseo tener que modificar el resto de parametros o ejecutar N cantidad de veces un mismo script y una misma conexion, solo para guardar en archivos variados el resultado...

2. el procedimiento es para correr de manera automatica sin la supervision de un usuario, por lo que no deseo que estos Save_Path sean ingresados por un usuario mediante la aplicacion...



si pudiese ayudarme con esto te agradeceria mucho
Responder Con Cita
  #4  
Antiguo 23-08-2010
manuc manuc is offline
Miembro
 
Registrado: abr 2010
Posts: 165
Poder: 15
manuc Va por buen camino
Hola Wbarrantes,

Lo analizo un poco y te comento algo en breve.

Un saludo.
Responder Con Cita
  #5  
Antiguo 23-08-2010
Avatar de Wbarrantes
Wbarrantes Wbarrantes is offline
Miembro
 
Registrado: ago 2010
Posts: 119
Poder: 14
Wbarrantes Va por buen camino
gracias por la prontitud...

la idea inicial es crear un XML que me permitatener una seccion dentro de otra... no se si eso es posible, pero la idea seria algo asi como:
_____________________________
Server = "XXX\SQL2005"
Database = "XXX"
Script = "exec sp_who"
Username = "XX"
Password = "XX"
_____________________________

tuviese una sub categoria de Paths... donde pueda tener uno o mas datos ligados algo asi como:

Server = "XXX\SQL2005"
Database = "XXX"
Script = "exec sp_who"
Username = "XX"
Password = "XX"
SAVE_PATHS = <path1,path2... path N>,

de la misma manera que puedo tener en el XML N configuraciones de conexion y scripts para ejecutar, si seria posible tener N sub_PATHS_SAVES...

no se si me explico...

y gracias de antemano por tu ayuda...
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
Between y ClientDataSet d2nemi Firebird e Interbase 10 26-02-2008 09:21:00
ClientDataSet y XML gsilvei Conexión con bases de datos 0 03-10-2007 22:59:18
Clientdataset+ galmacland Conexión con bases de datos 3 11-11-2004 15:17:37
ClientDataSet narvaez.om Conexión con bases de datos 2 19-05-2004 18:58:21


La franja horaria es GMT +2. Ahora son las 00:22:42.


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