Al final lo resolvi recorriendo la tabla e insertando registro por registro en el ClientDataSet, al principio dude del rendimiento, pero logre un metodo generico que las recorre y funciona rapido y bien.
Para entender el codigo deberia explicar una serie de cosas, como ser que tengo una clase por tabla y cada campo de la BD relacionado con un campo property de la clase asociada y que todas heredan de la clase en la que expongo el metodo. Pero cualquier cosa que necesiten , les respondere.
Expongo mi codigo:
Código Delphi
[-]
procedure TClaseTablas.ExportarArchivoXML;
var ClientDataSet : TClientDataSet ;
I, CantidadProp, Count : Integer;
PropList: PPropList ;
ValoresCampos: array of variant ;
Campos, Parametros: TStrings ;
SQL: String ;
q: TDataSet ;
begin
try
CantidadProp := GetPropList(Self, PropList);
Count := 0;
Campos := TStringList.Create ;
Parametros := TStringList.Create ;
ClientDataSet := TClientDataSet.Create(nil);
for I := 0 to CantidadProp -1 do
begin
if (PropList[i].PropType^.Kind = tkClass) then
Continue;
if (PropList[i].Name='Estado') or (PropList[i].Name='NombreTabla') or
(PropList[i].Name='NombreTabla') or (PropList[i].Name='NombreCampoClave')
or (PropList[i].Name='ClavePrimaria') or (PropList[i].Name='Titulo')then
Continue ; ClientDataSet.FieldDefs.Add(PropList[i].Name,ftString ,250,false);
End;
ClientDataSet.CreateDataSet ;
q := fDatos.AbrirQuery('Select * From '+NombreTabla ,[]);
while not q.Eof do
Begin
ClientDataSet.Append ;
for I := 0 to CantidadProp -1 do
begin
if (PropList[i].PropType^.Kind = tkClass) then
Continue;
if (PropList[i].Name='Estado') or (PropList[i].Name='NombreTabla') or
(PropList[i].Name='NombreTabla') or (PropList[i].Name='NombreCampoClave')
or (PropList[i].Name='ClavePrimaria') or (PropList[i].Name='Titulo')then
Continue ; ClientDataSet.FieldByName(PropList[i].Name).Value := q.FieldByName (PropList[i].Name).AsString ;
End;
q.Next ;
ClientDataSet.Post ;
End;
ClientDataSet.SaveToFile('C:\Sistema\'+NombreTabla+'.xml',dfXML );
Finally
FreeAndNil ( ClientDataSet ) ;FreeAndNil ( Campos) ; FreeAndNil ( Parametros);
End;
end;
muchas gracias al amigo poliburro quien se contacto personalmente por MSN y me ayudo a entender el asunto.
Perdon si el codigo esta confuso por que no se entiende el contexto y gracias por su tiempo.