Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Firebird e Interbase (https://www.clubdelphi.com/foros/forumdisplay.php?f=19)
-   -   Ejecucion de Procedimiento Almacenado (https://www.clubdelphi.com/foros/showthread.php?t=73118)

DasGrun 01-04-2011 18:27:18

Ejecucion de Procedimiento Almacenado
 
Hola!!!

Tengo la siguiente Duda, yo quiero crear un procedimiento donde la consulta(query) me funciona correctamente pero cuando creo el procedimiento el mensaje del resultado me dice que actualizo correctamente pero cuando verifico en la tabla no se dan los resultados.

esta es la consulta y me funciona correctamente
Código SQL [-]
 UPDATE
  MA_CHEQUE
SET
  MA_CHEQUE.CANTIDAD_LETRAS =  'DIEZ DOLARES CON 15/100'
WHERE
  MA_CHEQUE.CHEQUE_ID = 2

Ahora este es el procedimiento almacenado que he creado y no actualiza los datos.

Código SQL [-]
CREATE PROCEDURE SP_INSERTAR_CANTLETRAS(
  CHEQUE_ID BIGINT DEFAULT NULL,
  CANTIDAD_LETRAS VARCHAR(250) CHARACTER SET ISO8859_1 DEFAULT NULL)
AS
BEGIN
  /* Procedure body */
 UPDATE
  MA_CHEQUE
SET
  MA_CHEQUE.CANTIDAD_LETRAS =  :CANTIDAD_LETRAS
WHERE
  MA_CHEQUE.CHEQUE_ID = :CHEQUE_ID;
END;
realizo las pruebas desde EMS Manager 2005.

espero su ayuda pronto.

de ante mano muchas gracias

oscarac 01-04-2011 18:35:23

y como invocas al procedimiento almacenado?

DasGrun 01-04-2011 18:45:31

Gracias por Recibir, por medio de INPUT

oscarac 01-04-2011 18:50:29

ok
me referia a que coloques las instrucciones para verificar si estas pasando los 2 parametros (letras y el numero de cheque)

guillotmarc 01-04-2011 19:06:47

Seguramente es solo que no tienes en cuenta las transacciones involucradas.

Tienes que confirmar la transacción que ejecuta el procedimiento almacenado, y después tienes que abrir una nueva transacción para observar su resultado (si ya tenías una transacción abierta, no verás esas modificaciones hasta que no la cierres y la vuelvas a abrir).

Saludos.

DasGrun 01-04-2011 19:21:03

oscarac, si lo estoy pasando correctamente y me dice el mensaje "1 record(s) was(were) updated in MA_CHEQUE" Pero cuando verifico la tabla no esta actualizada desconecto la BD y la conecto y aun asi no esta actualizada;

guillotmarc, si esta confirmada y me funciona correctamente desde una consulta pero cuando utilizo el SP no me actualiza la informacion.


gracias,

Casimiro Noteví 01-04-2011 19:49:57

Cita:

Empezado por guillotmarc (Mensaje 395445)
Seguramente es solo que no tienes en cuenta las transacciones involucradas.
Tienes que confirmar la transacción que ejecuta el procedimiento almacenado, y después tienes que abrir una nueva transacción para observar su resultado (si ya tenías una transacción abierta, no verás esas modificaciones hasta que no la cierres y la vuelvas a abrir).
Saludos.

Voto por eso :)

DasGrun 01-04-2011 23:25:45

Gracias Compas!!!

Como asi--Guillotmarc

crees que me podes ayudar como puedo ver las transacciones involucradas...disculpa la ignarancia soy nuevo en esto!!1


gracias.

Casimiro Noteví 01-04-2011 23:57:40

Cita:

Empezado por DasGrun (Mensaje 395517)
Gracias Compas!!!
Como asi--Guillotmarc
crees que me podes ayudar como puedo ver las transacciones involucradas...disculpa la ignarancia soy nuevo en esto!!1
gracias.

Para eso sería conveniente y necesario que contestaras esto:

Cita:

Empezado por oscarac (Mensaje 395432)
y como invocas al procedimiento almacenado?


DasGrun 02-04-2011 00:14:34

Casi....lo invoco con EXECUTE, a eso se refieren...

!!!lo invoco desde el Sql Manager 2005 for Firebird!!!

saludos!!!

oscarac 02-04-2011 00:19:29

coloca la instruccion de como lo estas invocando...
codigo...

Casimiro Noteví 02-04-2011 00:32:23

Cita:

Empezado por DasGrun (Mensaje 395527)
Casi....lo invoco con EXECUTE, a eso se refieren...
!!!lo invoco desde el Sql Manager 2005 for Firebird!!!
saludos!!!

Cita:

Empezado por oscarac (Mensaje 395528)
coloca la instruccion de como lo estas invocando...
codigo...


¿Entonces no hay código desde delphi?

DasGrun 02-04-2011 01:01:16

No hay Codigo desde el Delphi, primero lo realizo por medio del EMS Manager Sql 2005, y no me actualiza la tabla con el prototipo utilizado.

si seria desde el delphi seria de la siguiente forma:

Cita:

ISP_INSERTAR_CANTLETRAS.Close;
ISP_INSERTAR_CANTLETRAS.Params[0].Value := sChequeID;
ISP_INSERTAR_CANTLETRAS.Params[1].Value := sCantidadCheque;
ISP_INSERTAR_CANTLETRAS.Open;

Casimiro Noteví 02-04-2011 01:32:15

Cita:

Empezado por DasGrun (Mensaje 395535)
No hay Codigo desde el Delphi, primero lo realizo por medio del EMS Manager Sql 2005, y no me actualiza la tabla con el prototipo utilizado.
si seria desde el delphi seria de la siguiente forma:

¿No te actualiza?, ¿qué quiéres decir?, ¿que no hace lo esperado, que hace otra cosa, que sale un error, que no hace nada...?


¿Se supone que haces commit también?

DasGrun 02-04-2011 01:44:03

si hace commit, y me presenta el mensaje "Executed OK, 0 rows affected (47 ms)
1 record(s) was(were) updated in MA_CHEQUE"
pero cuando verifico en la tabla los cambios que se supone no esta lo esperado. mas sin embargo si lo ejecuto con una consulta por medio de query builder Lo Hace correctamente.

espero que hayan comprendido!!!

Casimiro Noteví 02-04-2011 01:53:24

Pues como no pongas el código exacto que usas... difícil será ayudarte.
Porque lo de que usas execute no nos sirve para nada, lo único que haces entonces es crear el procedimiento.
Así que falta información que no nos has dado... ;)

DasGrun 02-04-2011 02:07:05

el problema es el Procedimiento Almacenado no hay necesidad de invocarlo desde el Delphi, si se hace desde el delphi presentara el mismo resultado oh No.

esto esta raro porque si me presenta el mensaje de que los datos esta actualizado correctamente debe de dar los cambios en el resultado y este no lo presenta.

me imagino yo que con el codigo del create procedimiento me pueden ayudar?

Gracias.

Casimiro Noteví 02-04-2011 15:39:01

Te vuelvo a repetir lo mismo, escribe aquí exactamente qué estás haciendo, no somos adivinos ;)

DasGrun 02-04-2011 16:55:55

OK..

Lo que quiero Hacer es crear un Procedimiento Almacenado que inserte un campo a un registro (cantidad_letras) y que tome como referencia al compo primario(chke_id)?

luego en el Delphi le dare los parametros?

Saludos.

Casimiro Noteví 02-04-2011 17:10:28

De verdad que no se entiende EXACTAMENTE qué estás haciendo, ni cómo... ni cómo lo quieres hacer. Ni has puesto ningún código.

Explícate largo y tendido con todo detalle, que no cobramos ;)

DasGrun 02-04-2011 18:23:36

Ok Gracias Casimiro por tu paciencia!!!!!

Luego le explico todo la aplicación...

Se creo una aplicación de creación de cheques donde use ATexto que me sirve para convertir de Numeros a Letras por ejemplo se digita un campo en Numero(2,354.40) y este lo convierte a otro en Letras(dos mil tresciento y cicuenta cuatro con 40/100) donde el campo de numero se almaceno en un campo de la tabla y el campo letras se almaceno como campo calculado utilizado en delphi.

Ahora lo que quiero hacer es almacenar este campo letras(DBEDIT) a un campo de la tabla(Cant_Letras).

lo he estado pensado hacer por medio de un Procedimiento Almacenado que es tema del que estamos hablando. este SP lo unico que hara es cargar parametros(Numero(2354.40) y el DBEDIT(dos mil tresciento cicuenta y cuatro con 40/100) campo calculado desde delphi.

este es el SP.
Código SQL [-]
CREATE PROCEDURE SP_INSERTAR_CANTLETRAS(
  CHEQUE_ID BIGINT DEFAULT NULL,
  CANTIDAD_LETRAS VARCHAR(250) CHARACTER SET ISO8859_1 DEFAULT NULL)
AS
BEGIN
  /* Procedure body */
 UPDATE
  MA_CHEQUE
SET
  MA_CHEQUE.CANTIDAD_LETRAS =  :CANTIDAD_LETRAS
WHERE
  MA_CHEQUE.CHEQUE_ID = :CHEQUE_ID;
END;

Mi Logica esta Bien, pero este Sp no esta funcionando, no esta dando los resultados.

como guardaria un campo calculado a un campo de la tabla usando DBEDIT?

Gracias por ayuda-

Casimiro Noteví 02-04-2011 19:46:35

Cita:

Empezado por DasGrun;395586[..
Mi Logica esta Bien, pero este Sp no esta funcionando, no esta dando los resultados.

Estamos igual, amigo, pero ¿dónde está el código que usas?
Además que "no está funcionando" ¿qué quiere decir?, lo pregunté antes.
En fin, la cosa es simple, se supone entonces que desde tu programa delphi llamas al procedimiento almacenado para crear el registro, bueno, por lo que veo no es así, no lo creas, lo que haces es actualizarlo, así que si no existe... entonces no hace nada!!!.

Código SQL [-]
UPDATE MA_CHEQUE
SET MA_CHEQUE.CANTIDAD_LETRAS =  :CANTIDAD_LETRAS
WHERE MA_CHEQUE.CHEQUE_ID = :CHEQUE_ID;

Si el valor que pasas al parámetro :cheque_id no existe entonces no tiene ningún registro que actualizar, ni tampoco creará ningún registro, evidentemente.
De esto entonces surgen varias preguntas más, principalmente: ¿qué quiéres hacer, actualizar o crear?, dices que quieres crear, pero "update" no es crear, deberías usar "insert" no "update", otras preguntas que se me ocurren no vale la pena ni que las exponga aquí porque estaría volviendo a lo que comenté antes, a recurrir a técnicas adivinatorias de lo que quieres hacer ;)

DasGrun 04-04-2011 16:21:39

Cheque_id existe Casimiro!!!

R: quiero actualizar.

gracias.

Casimiro Noteví 04-04-2011 16:38:45

Amigo, vuelvo a recordarte que la bola de cristal no funciona, que tampoco somos adivinos, así que pon el código completo de todo lo que haces.

IVAND 06-04-2011 22:23:35

Solo por curiosidad

Ejecutas el Sp algo como asi

Execute procedure SP_INSERTAR_CANTLETRAS('Tres mil',12)

luego haces algo asi

commit;

Claro esto es de la consola de tu manejador de base de datos EMS

Select * from MA_CHEQUE WHERE MA_CHEQUE.CHEQUE_ID = :CHEQUE_ID;

De seguro veras los cambios echos
:)

DasGrun 07-04-2011 01:52:38

Bueno Amigo aqui he creado un Video del Problema que tengo del SP, espero que comprendan el Probema. y de ante mano muchas gracias por su ayuda.



espero que hayan entendido....si no...
se hace otro video con mas tiempo...jajajaja soy inexplicable!!!1

Casimiro Noteví 07-04-2011 11:39:43

El problema es lo que ya hemos comentado antes, no haces commit, debes confirmar los cambios.



El motivo de que veas el cambio la primera vez es porque ese programa que estás usando mantendrá una caché o algo y cuando desconectas y conectas realmente no estará haciéndolo, pero seguro que si en lugar de eso cierras el programa y lo vuelves a abrir tampoco verás los cambios.

Así que ya sabes, confirmar cambios, commit.

DasGrun 07-04-2011 16:27:17

GRACIAS A TODOS, ahora tengo que programarlo desde el Delphi, ahi les cuento como me va..


GRACIAS.


La franja horaria es GMT +2. Ahora son las 14:26:55.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi