Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   C++ Builder (https://www.clubdelphi.com/foros/forumdisplay.php?f=13)
-   -   TSQLStoredProc (https://www.clubdelphi.com/foros/showthread.php?t=86379)

JM1985 29-07-2014 19:45:23

TSQLStoredProc
 
Buen día comunidad.
Estoy utilizando el componente TSQLStoredProc que utiliza un procedimiento almacenado que pagina registros. Este procedimiento ademas de devolverme información, me devuelve un parámetro de salida.

El detalle es que la primera vez que se ejecuta esta todo correcto. Recibe los parámetros correctos y devuelve el parámetro de salida.

Pero cuando vuelvo a invocar el Procedimiento almacenado para que me traiga la otra página o me traiga una página con otro tipo de filtrado .
Me marca el error de que tengo que especificar los parámetros, cuando ya está especificado y ya le hice un ExecProc().

Antes de ejecutarlo ya cerré previamente el TClientDataSet, vuelvo a enviarle los parámetros necesarios, y cuando ejecute open al TClientDataSet es cuando me marca ese error y ya se termina el proceso.

Algo en la configuración del TSQLStoredProc no se si esté mal configurado ya llevo un par de horas investigando y no eh dado con el problema.

Gracias.

Saludos.

Casimiro Notevi 29-07-2014 21:17:51

Pon el código para que lo veamos.

Por cierto, para otras ocasiones no olvides poner títulos descriptivos a tus preguntas. Gracias :)

JM1985 30-07-2014 00:20:44

Error al ejecutar TSQLStoredProc
 
Hola de nuevo.. la primera vez cuando lo ejecuto me trae la información pero supongamos que ahora filtrare por otros campos y asigno los parámetros de nuevo.

Cita:

SPListadoDocumentos->ParamByName("RESULT_VALUE")->Value = 0;
SPListadoDocumentos->ParamByName("fechaDesde")->AsString = fechaDesde;
SPListadoDocumentos->ParamByName("fechaHasta")->AsString = fechaHasta;
SPListadoDocumentos->ParamByName("numeroPagina")->AsInteger = numeroPagina;
SPListadoDocumentos->ParamByName("columnaDeOrdenamiento")->AsInteger = columnaDeOrdenamiento;
SPListadoDocumentos->ParamByName("registrosPagina")->AsInteger = ModuloDeDatos->_registrosPorPagina;
SPListadoDocumentos->ParamByName("tipoDocumento")->AsString = tipoDocumento;

SPListadoDocumentos->ParamByName("numeroPaginaOutPut")->AsInteger = _numeroPaginaOutPut;
Pero al ejecutarlo con ExeProc()

me dice que esperaba el parámetro @fechaDesde que no está especificado y es ahí cuando me marca el error.

JM1985 30-07-2014 00:21:41

Como que se pierde la información que tiene el componente. Tendría que volver a crear los parámetros ??

orodriguezca 30-07-2014 00:59:23

Si el motor de bases de datos es SQL SERVER seguramente los parámetros deberían iniciarse dela siguiente manera:

Código Delphi [-]
SPListadoDocumentos->ParamByName("RESULT_VALUE")->Value = 0;
SPListadoDocumentos->ParamByName("@fechaDesde")->AsString = fechaDesde;
SPListadoDocumentos->ParamByName("@fechaHasta")->AsString = fechaHasta;
SPListadoDocumentos->ParamByName("@numeroPagina")->AsInteger = numeroPagina;
SPListadoDocumentos->ParamByName("@columnaDeOrdenamiento")->AsInteger = columnaDeOrdenamiento;
SPListadoDocumentos->ParamByName("@registrosPagina")->AsInteger = ModuloDeDatos->_registrosPorPagina;
SPListadoDocumentos->ParamByName("@tipoDocumento")->AsString = tipoDocumento;

SPListadoDocumentos->ParamByName("@numeroPaginaOutPut")->AsInteger = _numeroPaginaOutPut;

Notese el "@" antecediendo cada parámetro.

JM1985 30-07-2014 15:12:58

Hola.

Eh estado probando con ADO tambien y efectivamente son con @ los parámetros, pero cuando vuelvo a filtrar para traer la segunda página .. es cuando me sale el error que no se encuentra los parámetros y la primera vez me trae la consulta correctamente, tengo que eliminar los parámetros y volverlos a crear en tiempo de ejecución para que los reconozca ??

Gracias.

Saludos.

Casimiro Notevi 30-07-2014 15:29:19

Pon el código fuente, como te comenté antes, justo lo que está antes del código que has puesto :)

JM1985 30-07-2014 15:35:45

Hola buen día,
este es el código.
Cita:

// Se cierra el TClientDataSet
DSDatos->Close();

// Se asignan los valores que se requerirá en le store procedure.
AsignarParametrosStoreProcedure(DateTimeToStr(Fecha), DateTimeToStr(Fecha), _numeroPaginaOutPut, _columnaDeOrdenamiento,
_registrosPagina, _tipoDocumento);

// Se ejecuta el procedimiento almacenado.
SPListadoDocumentos->ExecProc();

// Se abre el TClientDataSet y me arroja el error.
DSDatos->Open();
El método AsignarParametrosStoredProcedure es donde se asignan los valores al TSQLStoredProc.

El error que me marca es El procedimiento o la función ListadoDeDocumentos esperaba el parámetro @fechaDesde, que no se ha especificado.

Esto pasa cuando ejecuto el stored para traer la información de la siguiente página, pero la primera vez que se ejecuta trae correctamente la información.

Casimiro Notevi 30-07-2014 16:33:01

Cita:

Empezado por JM1985 (Mensaje 479526)
El error que me marca es El procedimiento o la función ListadoDeDocumentos esperaba el parámetro @fechaDesde, que no se ha especificado.

¿Y qué tiene ListadoDeDocumentos? ¿No lo cierras antes de asignar los parámetros?
¿Y entonces qué es exactamente DSDatos?

JM1985 30-07-2014 16:40:23

ListadoDeDocumentos es el TSQLStoredProc, si lo cierro al momento de asignar los valores a los parámetros.

DSDatos es el TClientDataSet

El esquema es el siguiente .
Tengo un data source que asu ves está ligado a un dataset, el dataset a un datasetProvider y por ultimo el dataSetProvider al TSQLStoredProc.
Ya que el dataSource es el origen de datos que esta asignado al cxGrid para presentar la información.

JM1985 30-07-2014 16:51:52

Casimiro, orodriguezca

Ya veo la siguiente página.

Casimiro me diste una pista al preguntarme que es ListadoDeDocumentos y te explique como está el escenario,

Datasource -> DataSet ->DataSetProvider ->Stored Procedure. (El stored procedure tiene la conexión a la base de datos.)

Creo que aquí estaba el problema.

Lo que hice ahora es hacerlo directo .

DataSource -> StoredProcedure (El stored procedure tiene la conexión a la base de datos.)


Al hacer todo el procedo de asignar los valores a los parámetros

ejecuto el procedimiento
SPListadoDocumentos->ExecProc();

y después lo abro y listo
SPListadoDocumentos->Open();

y ya me muestra la siguiente página.

Seguiré haciendo pruebas para verificar que este correcto el paginado con los filtros y ordenamientos necesarios y les comento.

Gracias.

Saludos.


La franja horaria es GMT +2. Ahora son las 08:27:47.

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