![]() |
Problema con Procedimiento almacenado
hola, quisiera saber si me pueden ayudar en esto. Uso Delphi7, FB2, MDO e IBExpert. Lo que quiero lograr es que en el momento de dar de alta un cliente me verifique por medio del SP EXIST_CLIENTE si ya existe un cliente con un campo dicose (que es la clave) igual en la tabla. Entonces ejecuto el SP y luego pregunto si el SP es vacio, entonces no existe el cliente, si no esta vacio ya existe el cliente. La verdad no se si se puede hacerlo de esta forma, ya que yo hacia esto en Paradox pero usando uan query.
El SP CLIENTES_ALTAS funciona bien, lo para que vean todo el proceso. El problema es que me deja entrar la misma clave 2 veces y por supuesto me da error en la clave primaria. Desde ya muchas gracias. Código:
Código:
|
No sería mas fácil controlar ese error y nada mas... a sabiendas de que se va a producir cuando hay un duplicado, así te ahorras el procedure SP_EXIST_CLIENTE.
Tampoco tengo muy claro para que utilizas un procedure SP_CLIENTES_ALTAS, si únicamente es para dar un alta, sin más... me parece un abuso de procedures innecesarios. |
Es que acaso lo procedimientos almacenados no deben usarse para realizar solo altas, bajas o modificaciones ?
|
Cita:
Yo cuando camino, trato de hacerlo hacia adelante, evito ir de lado o de espaldas... A tu pregunta inicial, repito que los procedimientos que utilizas los considero superfluos siempre u cuando no haya algún otro punto que no comentes.. La forma de dar insertar un muevo registro desde Delphi, no lo puedo explicar. Lee algo sobre los métodos insert o append de los componentes dateset y la manera de controlar los errores y excepciones también podrás encontrar mucha literatura. |
Hola foro,
Muy respetable tu forma de trabajar pero te recomendaria que utilizaras los procedimientos almacenados para realizar consultas a la base de datos que no son posibles directamente con la clausula select, para hacer calculos y operaciones donde intervienen muchas tablas, para informes cross-tab (donde se trasponen las filas por las columnas) y en general para casos muy especiales. Voy acolocar un ejemplo, en un sistema que efectua liquidaciones a 10.000 clientes, si lo hiciera en codigo de Delphi, los datos de todos ellos tendrian que viajar por la red hasta el equipo que esta ejecutando el programa, con un procedimiento almacenado no tiene que viajar datos a ninguna parte y se hace la liquidacion directamente en el equipo (servidor) que contien la base de datos, esta es una de las caracteristicas de las tecnologias cliente/servidor. Otra cosa, si dicose es la llave primaria pues atrapa el error enviado por el motor en caso de presentarse vioalcion de la llave y listo. Pero volviendo al origen de tu pregunta, el codigo pasa "derecho" y no hace lo que quieres porque tu segmento de codigo
siempre dara verdadero, esto debido a que el procedimiento almacenado SP_EXIST_CLIENTE retorna en el parametro de salida dicose un valor (nullo o no), lo que debes es preguntar por el contenido del parametro de salida. Cambia la linea anterior por
Muchos exitos |
Gracias por sus respuestas, ahora me funciona bien.
En cuanto a la forma de trabajo, prefiero usar definitivamente SP sobre consultas, he leido que no hay que abusar de los SP, bueno supongo que con la practica me dare cuenta. |
Resp
Compadre usa un trigger y listo
Anstes de insertar o actes de modificar(pono como debe ir ) Eso soluciona tu pregunta segun lo que entendi. Nota: "Msg" es un aexception en este caso vacia y le concateno el mensaje valido de firebird 1.5 en adelante (creo que es desde 1.5 bueno eso no es problema sino le pones el mensaje de uan vez) |
La franja horaria es GMT +2. Ahora son las 06:46:55. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi