Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   C++ Builder (https://www.clubdelphi.com/foros/forumdisplay.php?f=13)
-   -   Argumentos incorrectos fuera del intervalo permitido o en conflicto con otros (https://www.clubdelphi.com/foros/showthread.php?t=92376)

arturoio 12-10-2017 18:05:47

Argumentos incorrectos fuera del intervalo permitido o en conflicto con otros
 
Buen día, me arroja este error en c++ builder cuando intento hacer un consulta a la Base de datos (Maria DB) con esta francción de código

Código:

DM->ADOQuery->Close();
DM->ADOQuery->SQL->Clear();
DM->ADOQuery->SQL->Add("call loadPaciente(:cadena, 'Paciente_Identificador')" );     
DM->ADOQuery->Parameters->ParamByName("cadena")->Value = Clave;
DM->ADOQuery->Prepared;
DM->ADOQuery->Open();

Anteriormente estaba intentando realizar esta consulta sin el procedimiento almacenado pero me arroja el mismo error.
He visto otros hilos con este tema pero ningun ha sido de ayuda
De antemano muchas gracias

roman 12-10-2017 18:49:15

Pon la definición del procedimiento almacenado para que podamos examinar qué pasa.

LineComment Saludos

arturoio 12-10-2017 18:52:02

Aqui esta el procedimiento almacenado

Código SQL [-]
Delimiter $$
Drop procedure if exists loadPaciente;
create procedure loadPaciente (cadena varchar(70), filtro varchar(25))
BEGIN
  select cl00_Identificador, cl00_Nombre, cl00_ApellidoPaterno, TIMESTAMPDIFF(year, cl00_FechaNacimiento, CURDATE()), cl00_Telefono, cl00_Celular
  from cl00
  WHERE filtro like CONCAT('%', cadena, '%')
  ORDER BY filtro;
END $$

Filtro = nombre de la columna que debe consultar
cadena = texto para hacer el filtro

roman 12-10-2017 18:57:04

Cita:

Empezado por arturoio (Mensaje 521709)
Anteriormente estaba intentando realizar esta consulta sin el procedimiento almacenado pero me arroja el mismo error.

¡Ah! Disculpa, no había visto esta parte. O sea que el error no está en la llamada al procedimiento. ¿Podrías poner el código que usabas antes de hacerlo con un procedimiento?

LineComment Saludos

arturoio 12-10-2017 19:07:38

Código:

DM->ADOQuery->Close();
DM->ADOQuery->SQL->Clear();
DM->ADOQuery->SQL->Add( "SELECT cl00_Identificador, cl00_Nombre, cl00_ApellidoPaterno,"
                        "TIMESTAMPDIFF(year, cl00_FechaNacimiento, CURDATE()),"
                        "cl00_Telefono, cl00_Celular FROM cl00 ");
//Lo agrego en lineas diferentes porque aqui se toma una desición con un SWITCH para saber cual tabla va a consultar
DM->ADOQuery->SQL->Add("WHERE cl00_Identificador like :cadena "
                                "ORDER BY cl00_Identificador;" );

DM->ADOQuery->Parameters->ParamByName("cadena")->Value = Clave + '%';
DM->ADOQuery->Prepared;
DM->ADOQuery->Open();

Este código me arrojaba el mismo error. Por eso había intentado con un SP porque creí que me solucionaria el problema
Saludos

roman 12-10-2017 20:29:35

¿Qué pasa si antes de asignar valor al parámetro pones:

Código:

DM->ADOQuery->Parameters->ParamByName("cadena")->DataType = ftString;
?

LineComment Saludos

arturoio 12-10-2017 20:51:11

Cita:

Empezado por roman (Mensaje 521715)
¿Qué pasa si antes de asignar valor al parámetro pones:

Código:

DM->ADOQuery->Parameters->ParamByName("cadena")->DataType = ftString;
?

LineComment Saludos


Sigue mostrando el mismo error.

Roman eh encontrado el error aunque no se como solucionarlo.

Hice una prueba de la siguiente forma:

Código:

DM->ADOQuery->SQL->Add("call loadPaciente( 'ma' , 'cl00_ApellidoPaterno') " );
En esta ocación en lugar de tener el parametro ":cadena", lo sustitui por el cadena tal cual y funciono. Asi que el problema es que no logro que el parametro ":cadena" me tome las comillas simples para enviarlas al SP

arturoio 12-10-2017 22:42:47

Solucion
 
Ya pude solucionar el problema.
Hice uso del componente ADOStoredProcedures
El cual me permite enviar los parametros de la siguiente forma:

Código:

DM->ADOStoredProcedure->Parameters->ParamByName("cadena")->Value = filtro;
DM->ADOStoredProcedure->Parameters->ParamByName("filtro")->Value = "Paciente_ApellidoPaterno";

filtro = Es el primer parametro de mi SP
"cadena" = nombre del parametro en el SP
"filtro" = nombre del segundo parametro en el SP

Muchas gracias por tu apoyo Roman
Saludos

roman 13-10-2017 16:42:02

Cita:

Empezado por arturoio (Mensaje 521717)
Muchas gracias por tu apoyo Roman

Pues, literalmente, no hay de qué ;) Estuve tentado a a mencionar el componente que ahora usas pero, aunque es el más adecuado, en teoría de la otra forma debía servir. Y habría que ver porqué la consulta directa sin el procedimiento almacenado no funcionaba. Pero lo bueno es que ya lo has solucionado.

LineComment Saludos


La franja horaria es GMT +2. Ahora son las 12:53:20.

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