PDA

Ver la Versión Completa : Procedimiento almacenado


LucianoRey
19-08-2005, 00:33:20
Hola,espero me puedan ayudar, tengo el siguiente problema:

me conecto a mi base de datos (MSQLServer) por medio de Ado, mando ejecutar un procedimiento almacenado, al que le mando parametros que recoge de mi pantalla, este me genera un archivo.
Despues de esto mando ejecutar un query sobre este archivo generado, y con este mando un reporte, pero la siguiente vez que lo mando parece como si no me respetara los nuevos parametros, sin embargo voy a las tablas del servidor y el archivo generado esta bien.

Mi query esta condicionado a que el procedimiento me regrese un valor cero en su parametro de retorno, pero aun asi, el reporte me pinta la consulta anterior, entonces lo que entiendo es que el procedimiento en su parametro de retorno me indica eso, que si llego al servidor, pero no, que ya termino, pues el query se ejecuta cuando todavia no termina el procedimiento.

Quisiera entonces , si alguien puede decirme como saber cuando el procedimiento termino su ejecucion, para asi poder condicionar mi query a que se realize solo cuando haya terminado el procedimiento, pongo aqui el codigo para que, si tengo algun error me puedan corregir, saludos y gracias.


DataModule1.ADOQuery1.Active:=(0=1);
DataModule1.ADOStoredProc5.Active:=(0=1);
DataModule1.ADOStoredProc5.Parameters.ParamByName('@vmesI').Value:=DBLookupComboBox7.KeyValue;
DataModule1.ADOStoredProc5.Parameters.ParamByName('@vmesF').Value:=DBLookupComboBox8.KeyValue;
DataModule1.ADOStoredProc5.Parameters.ParamByName('@vArea').Value:=DBLookupComboBox3.KeyValue;
DataModule1.ADOStoredProc5.Parameters.ParamByName('@vCentro').Value:=DBLookupComboBox4.KeyValue;
DataModule1.ADOStoredProc5.Parameters.ParamByName('@vEntidad').Value:=DBLookupComboBox5.KeyValue;
DataModule1.ADOStoredProc5.Parameters.ParamByName('@vBenef').Value:=DBLookupComboBox6.KeyValue;
nNumero:=1;
DataModule1.ADOQuery1.Active:=(0=1);
DataModule1.ADOStoredProc5.Active:=(0=1);
DataModule1.ADOStoredProc5.Parameters.ParamByName('@vmesI').Value:=DBLookupComboBox7.KeyValue;
DataModule1.ADOStoredProc5.Parameters.ParamByName('@vmesF').Value:=DBLookupComboBox8.KeyValue;
DataModule1.ADOStoredProc5.Parameters.ParamByName('@vArea').Value:=DBLookupComboBox3.KeyValue;
DataModule1.ADOStoredProc5.Parameters.ParamByName('@vCentro').Value:=DBLookupComboBox4.KeyValue;
DataModule1.ADOStoredProc5.Parameters.ParamByName('@vEntidad').Value:=DBLookupComboBox5.KeyValue;
DataModule1.ADOStoredProc5.Parameters.ParamByName('@vBenef').Value:=DBLookupComboBox6.KeyValue;
nNumero:=1;
while (DataModule1.ADOStoredProc5.Parameters.ParamByName('@RETURN_VALUE').Value=Null) do
begin
DataModule1.ADOStoredProc5.ExecProc;
end;
nNumero :=DataModule1.ADOStoredProc5.Parameters.ParamByName('@RETURN_VALUE').Value;
if nNumero = 0 then
begin
DataModule1.ADOQuery1.Active:=(0=0);
QuickRep1.DataSet:=DataModule1.ADOQuery1;
QuickRep1.Preview;
end;

__hector
19-08-2005, 04:52:11
Tres sugerencias:

- Elimina las declaraciones obvias que devuelven true o false siempre (las comparaciones) y evitate un ciclo mas de cpu (eso de 0=0 o 0=1, pon directamente true o false)

- Utiliza la clausula With para encerrar bloques de codigo que siempre hacen llamadas a metodos o propiedades de un mismo objeto

- Elimina los valores de la coleccion de parametros antes de realizar una nueva consulta. Mira a ver si tienen un metodo Clear o algun similar, porque es posible que sea la causa de por que, en distintas llamadas, te traiga exactamente los mismos resultados.

LucianoRey
23-08-2005, 00:37:06
Gracias por los consejos, sabes, ya vi donde esta mi error, en el reporte que envio tengo labels, para mostrar mis totales por grupos, y cuando reenvio el reporte con otros valores me deja los labels anteriores.

Sera cosa de limpiarlos y listo, lo hice con labels porque no supe usar algun componente que me guardara mis totales por grupo e imprimirlos al final.,
Lo que hice fue, en el programa, crear registros para esos totales por grupo y al finalizar el reporte, los asigno a los labels.

Gracias nuevamente.