Ver Mensaje Individual
  #1  
Antiguo 01-07-2008
xjre xjre is offline
Miembro
 
Registrado: feb 2008
Posts: 13
Reputación: 0
xjre Va por buen camino
Smile Xml + Sql + Delphi

Buenas!

Estuve dandole muchas vueltas ya al asunto y revisando tanto el foro como google y no encontre solución a este problema.

El tema es asi: yo solía en su momento trabajando en otra plataforma (C#, muchos meses atras ya) mandar a un store de sql una tabla con datos en formato xml (DataSet.GetXml para los entendidos) que luego el store procesaria en un cursor y haría lo que correspondiera. Hasta hoy en día en Delphi lo "ate con alambre" y utilice tablas temporales de sql (cosa muy fea a mi gusto). Entonces decidí tratar de traducir eso que hacía a delphi, epro me encontre con el problema del parámetro tipo "text".

1) Delphi lo toma como memo (lógico), y por lo tanto cuando asigno el parametro debo hacerlo asi:

Código Delphi [-]
    SPAgrupar.Close;
    SPAgrupar.ParamByName('@Xml').AsMemo:= Xml;
    SPAgrupar.Open;

Siendo Xml la tabla transformada en xml con sus respectivos datos.
Al store le hago un open porque devuelve un select al final de todo el desmadre que hace. Ahora bien, cuando lo ejecuto, tira el famoso error de "error opening cursor handle". Me fijo con el analizador de sqñ qué me esta tirando el programa al ejecutar y me encuentro con esto:

Código Delphi [-]
     EXEC "GenerarGrupos;1" ''

que me llamó la atención porque no corresponde a lo normal que manda delphi cuando ejecuta un store (exec nombredelstore param1, param2, ...). Ademas al copiar esto y meterlo en el query analizer, me tira error ("no se reconoce el store GenerarGrupos;1").

2) Lo próximo que pensé fue mandarlo como .AsString y setear el parameter size del objeto store en 2147483647. Sin embargo, cuando pongo:


Código Delphi [-]
    SPAgrupar.Close;
    SPAgrupar.ParamByName('@Xml').AsString:= Xml;
    SPAgrupar.Open;

me lo termina truncando de todas formas. Si la tabla tiene pocas filas, larga el store de maravilla. Ahora bien, si la tabla es muy grande, me lo trunca y al ejecutar el store el sql encuentra algo asi como "error de lógica de xml: no cerraste el xml bobo".

Lo probé utilizando ADO y sucede lo mismo.

¿Alguien sabe como solucionar esto?

Gracias por la ayuda!

Saludos
Responder Con Cita