tAdoStoredProc, manejo de parametros
Estoy trabajando con Este elemento de un procedimiento almacenado que me realiza una inserción. Trabajando desde el gestor de BD no tengo ningun problema el SP realiza su trabajo.
Pero al hacerlo desde c++ builder me estan generando conflicto los parametros, ya que le esta dando valores que no le corresponden a un atributo en especifico. Asigno los valores de la siguiente forma: Código:
DM1->ADOSP1->Close(); Código:
nombre = txNombre->Text.Trim(); Cita:
De antemano muchas gracias |
¿Y la sentencia sql insert?
|
Como comentaba es un procedimiento almacenado. Por eso uso el TAdoStoredProc y así solo le envio los parametros y desde el inspector de propiedades le indico a cual procedimiento almacedo de la BD corresponde
|
Bien, pues el procedimiento almacenado ;)
|
Este es el SP. Desde el gestor de la Base de datos funciona sin problemas |
Solo por ensayar, cambia la sentencia insert del procedimiento almacenado y coloca de forma explicita las columnas a afectar:
|
Muchas gracias orodriguezca. Ya lo intente y aun nada.
Lo que me parece aun más extraño es que ya intente modificar y eliminar desde este mismo proyecto y lo realiza sin ningun problema :( Alguna otra idea? |
Sigue paso a paso el código, y mira los valores que reciben los parámetros, al igual que el orden de ellos.
Es algo trivial, pero hay que tener mucha paciencia. |
Cita:
|
Para empezar pon un breakpoint en tu código, justo en el momento que llama al SP, y mira los valores que tengan los parámetros.
|
Verifica que el orden de los parámetros en DM1->ADOSP1 sea realmente el orden y cantidad de parámetros esperado por el procedimiento almacenado insertaPaciente. Hay que tener en cuenta que en SQL Server a todo procedimiento almacenado le adiciona un primer parámetro en la posición cero de tipo ptResult y nombre Result; quizás falta ese parámetro en la definición de DM1->ADOSP1.
|
Cita:
|
No se porque razón asumí que el motor de bases de datos era SQL SERVER. En MariaDB esto no debería ocurrir, pues solo tiene parámetros IN, OUT y INOUT.
Probemos un par de ideas diferentes: - Colocar DM1->ADOSP1->Prepared antes de asignarle valores a los parámetros. No creo que ese sea el problema pero... - En vez de utilizar DM1->ADOSP1->Open() utiliza DM1->ADOSP1->ExceProc(). Ya que el procedimiento almacenado no está devolviendo un conjunto de resultados no tiene sentido usar el método Open(); lo correcto, en este caso, es usar el método ExecProc. |
Cita:
|
Solucion
Por si a alguien le hace falta en el futuro.
No pude encontrar la causa de el error que mencionaba, incluso volví a hacer otro proyecto y me daba el mismo error, lo curioso es que en otro proyecto que realice utilizando SP me funciono sin problemas, no se si tiene que ver el número de parametros. En fin lo que hice para que funcionara fue utilizar el elemento TADOQuery, e hice una llamada a mi SP " call nombreStoreProc(Parametros) " y fue de esta manera en que solucione este problema Gracias a todos los que colaborarón con sus opiniones :D |
La franja horaria es GMT +2. Ahora son las 02:14:22. |
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