Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   Como obtengo los datos con un procedimiento almacenado (https://www.clubdelphi.com/foros/showthread.php?t=43792)

David 20-05-2007 20:54:21

Como obtengo los datos con un procedimiento almacenado
 
Hola

He realizado un procedimiento almancenado , que funciona dentro de interbase .
es un procedimiento de selección , es decir , recibe dos datos : fecha y almacen y devuelve el articulo y la cantidad .

Estoy con interbase , he puesto un compenente TIBStoredProc , llamado SPStock , ligado a la base de datos , al transaction y en la propiedad StoredProcName he encontrado el procedimiento almancenado .

Luego pongo un botón y pongo lo siguiente

Código Delphi [-]
SPStock.Prepare;
SPStock.ParamByName('fecha').AsDateTime := fechainput;
SPStock.ParamByName('almacen').AsDateTime := almaceninput;
SPStock.ExecProc;

El caso es que ligo un datasource con el TIBStoredProc , pero no hace nada , además el procedimiento tenia que tardar un rato en ejecutarse y lo hace muy rapido sin hacer nada .

Me gustaria con que componentes de la paleta de interbase y se hace funcionar un procedimiento de selección , para que salgan los datos en un DBGrid.

Un saludo

Lepe 21-05-2007 11:23:16

Usa un Query en lugar del TIBStoredProc. la sql igual que si fuera una tabla pero con parámetros:
Código SQL [-]
select * from MiSP(:fecha, :almacen);

Saludos

defcon1_es 21-05-2007 11:23:18

Si es un procedimiento de selección, lo más sencillo es usar un tIBQuery en vez del componente tIBStoredProc.
Tendrás que asociarle el tIBQuery a un datasource enlazado con un dbgrid para ver los datos.

En la propiedad SQL del tIBQuery, le pones la sentencia SELECT que necesites, le pasas los parámetros encesarios (igual que haces con el tIBStoredProc) y la abres con el método ExecSQL.
Por ejemplo:
Código Delphi [-]
....
QStock.ParamByName('fecha').AsDateTime := fechainput;
QStock.ParamByName('almacen').AsDateTime := almaceninput;
QStock.ExecSQL;
....

David 21-05-2007 11:57:44

Hola

Ya me sale , ahora lo que pasa es que quiero sacar un informe con el fastreport y el problema es que el procedimiento almacenado es rápido (1'20 segundos ) tiene muchos campos que recorrer , pero el problema es que para sacar el informe tarda casi 6 minutos y el informe es de sólo 10 páginas .

No entiendo como tarda tanto . El caso es que quiero enlazar el TIBQuery del procedimiento almacenado a un TClientDataSet , para que salga el informe antes .

Lo que hago es unir el Provider al TIBQuery y el ClientDataSet al provider . Después de abrir el Query , pues abro el ClientDataSet , pero se queda colgado y no hace nada .

Es cierto que el procedimiento almacenado hace muchas operaciones , recorre muchos campos , pero el resultado que saca , tampoco es tan grande , no más de 800 articulos , un informe como he dicho de 10 páginas , así pues creo que el informe deberia de ser rápido después de hacer el procedimiento almacenado .

Sabeis a que puede ser debido esto ?

Un saludo

David 21-05-2007 12:05:27

Rectifico con el ClientDataSet no se queda colgado nada . Lo que pasa es que si lo pongo como he dicho el informe tarda en salirme 14 minutos , un tiempo excesivo , sin el ClientDataSet , con el Query que llama el procedimiento almacenado tarda 6 minutos en salirme el informe .

1:20 en hacer el procedimiento almacenado . Un tiempo que veo razonable , pero en preparar el informe con el FastReport que son 10 hojas , tarda hasta completar 6 minutos , un tiempo que me parece excesivo.


La franja horaria es GMT +2. Ahora son las 18:22:10.

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