Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Oracle
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 02-06-2006
cacuna cacuna is offline
Miembro
 
Registrado: sep 2003
Posts: 54
Poder: 21
cacuna Va por buen camino
Como se si el Update se llevo a cabo

Que tal...un saludo.

Pues eso.Utilizo Delphi 7, Oracle 9.
Dentro de un SP llevo a cabo una sentencia UPDATE sobre X tabla, la cual no se esta llevando a cabo -la actualizacion-.

Como puedo saber si mi sentencia Update se ha realizado exitosamente.
Cabe mencionar que lo hago dentro de un Query Dinamico -creo que asi se llama- y verifico, si es que se llevo a cabo el update con un Sql%RowCount, pero al parecer no funciona o no aplica para el Execute Immediate.Ej.

Código SQL [-]
      -- Actualiza el Detalle de la Orden de Compra
      Execute Immediate ' Update AT_OrdenCompraDet
                             Set Saldo_OC = Saldo_OC - :vCantidad,
                                 CtaContable_OC  = :vCuenta  ,
                                 CveProrrateo_OC = :vCveProrrateo
                           Where OrdenCompra_OC  = :vOrdenCompra
                                 and ID_OC =:vID  '
      Using pCantidad, vCuenta, vCveProrrateo ,vOrdenCompra, vID;

      if SQL%RowCount <= 0 then
         pMensaje := ' No se pudo actualizar el Saldo de la O.C. !';        
         raise errError;
      end if;

Agradeceria algun comentario o tip.

Saludos,
cacuna.
Responder Con Cita
  #2  
Antiguo 02-06-2006
Avatar de Paoti
Paoti Paoti is offline
Miembro
 
Registrado: may 2003
Ubicación: Monterrey. N.L., México
Posts: 612
Poder: 21
Paoti Va por buen camino
commit;

Lamentablemente no puedo decirte, como obtener el número de registros modificados,



pero ahi te va un tip:

cuando uses

EXECUTE INMEDIATE

debes de hacer un COMMIT explicito.

es decir:


EXECUTE INMEDIATE <sSentencia>
COMMIT;

Siempre y cuando sSentencia sea, INSERT, UPDATE, DELETE.


te envio un link en ingles, donde viene otra forma de ejecutar sentencias dinámicas, en la cual, te devuelve el número de filas afectadas.

http://www.psoug.org/reference/dbms_sql.html
__________________
Estudia y anda en la calle.... que asi serás el doble de listo que los demás...

análisis de información
análisis y diseño de sistemas

Paoti Rios Reséndiz
Responder Con Cita
  #3  
Antiguo 02-06-2006
cacuna cacuna is offline
Miembro
 
Registrado: sep 2003
Posts: 54
Poder: 21
cacuna Va por buen camino
Yo hago el Commit desde Delphi

Gracias por tu ayuda, pero el COMMIT lo hago desde DELPHI y no en el SP, solo en este caso.

Igualmenmte gracias.

Nota: Me gusto el refran.
Responder Con Cita
  #4  
Antiguo 02-06-2006
Avatar de Paoti
Paoti Paoti is offline
Miembro
 
Registrado: may 2003
Ubicación: Monterrey. N.L., México
Posts: 612
Poder: 21
Paoti Va por buen camino
hola cacuna


prueba a hacerlo, con la forma como lo planeta el link....


si fucniona, prque tengo varios procedimientos que te devuelven el número de registros afectado,

está casi al final de la página mencionada arriba
__________________
Estudia y anda en la calle.... que asi serás el doble de listo que los demás...

análisis de información
análisis y diseño de sistemas

Paoti Rios Reséndiz
Responder Con Cita
  #5  
Antiguo 02-06-2006
Avatar de lucasarts_18
lucasarts_18 lucasarts_18 is offline
Miembro
 
Registrado: mar 2005
Ubicación: Villa Alemana,Chile
Posts: 1.087
Poder: 21
lucasarts_18 Va por buen camino
Hola:

Toda transacción Oracle devuelve el SQLCODE, -1 cuando hay problemas y 0 cuando la operación es exitosa, verifica que los componentes que estás trabajando tiene la propiedad SQLCODE.

Hasta Luego -
__________________
No todo es como parece ser...
Responder Con Cita
  #6  
Antiguo 02-06-2006
Avatar de Paoti
Paoti Paoti is offline
Miembro
 
Registrado: may 2003
Ubicación: Monterrey. N.L., México
Posts: 612
Poder: 21
Paoti Va por buen camino
Hola, lucas, esto suena inetresante, y directamente desde ORACLE como se aplica....



para el caso de nuestro compañero cacuna, le inetresa saber las filas afectadas... que creoq eu no es el caso....



sin quitarnos del tema del hilo que se planteo, nos podrias poner un ejemplo del SQL_CODE, que a mi me vendría muy bien


Gracias.


Saludos desde Guadalajara.
__________________
Estudia y anda en la calle.... que asi serás el doble de listo que los demás...

análisis de información
análisis y diseño de sistemas

Paoti Rios Reséndiz
Responder Con Cita
  #7  
Antiguo 02-06-2006
cacuna cacuna is offline
Miembro
 
Registrado: sep 2003
Posts: 54
Poder: 21
cacuna Va por buen camino
Me sirve lo del SQLCODE..pero como se aplica

Gracias por sus respuestas.

Como menciona anteriormente, el COMMIT lo hago desde DELPHI pero si revisan el codigo que inserte, la verificacion de si actualizo N registros o no, la hago desde un SP en la BD de Oracle, para asi lanzar una Excepcion-desde el SP-.

Realmente no me interesa cuantos registros se actualizaron, mas bien, si la actualizacion se llevo a cabo o no.

De igual manera aqui no intervienen que componentes que utilizo -ODAC- por que todo es dentro del SP.

Creo que la solucion va por el SQLCODE que menciona Lucas, pero...como se usa?

Mil Gracias de nuevo.
Responder Con Cita
  #8  
Antiguo 03-06-2006
Avatar de lucasarts_18
lucasarts_18 lucasarts_18 is offline
Miembro
 
Registrado: mar 2005
Ubicación: Villa Alemana,Chile
Posts: 1.087
Poder: 21
lucasarts_18 Va por buen camino
Hola amigos:

Lamentablemente no trabajo con Delphi - Oracle, pero daré un ejemplo de PowerBuilder, que es el otro ambiente de desarrollo que manejo:

Para saber si una operación tuvo éxito yo aplico:

Código:
if SQLCA.SQLCODE = 0 then
   go_f.uf_mensaje (1, 'Operación exitosa')
else
   go_f.uf_mensaje (3, 'Se ha producido el siguiente error' + string(SQLCA.SQLERRTEXT))
   return
end if
Ahora bien esto es PowerBuilder y el Objeto SQLCA es un objeto que representa todo lo que implica la conexión con un determinado motor de base de datos. Sin embargo esto también debe tenerlo delphi (Estoy convencido que lo tiene ) a través de algún componente de conexión de base de datos que tenga algún método sobre SQLCODE (este valor es devuelto por oracle) para determinar los estados de las transacciones (Inset - Delete - Update).

Bueno espero que haya servido de guía, básicamente es tomar las variables propias que tiene Oracle ó un determinado motor de base de datos para capturarlo desde un lenguaje de programación, ah !!! casi lo olvidé, en el procedimiento almacenado debe existir una handle exceptión (manejador de excepción) con el fin de levantar dicho error, en caso contrario el error puede pasar totalmente desapercibido ante nuestros ojos (por lo menos en PowerBuilder me sucede esto)

Hasta la próxima.....
__________________
No todo es como parece ser...
Responder Con Cita
  #9  
Antiguo 14-06-2006
ramiretor ramiretor is offline
Miembro
 
Registrado: may 2003
Ubicación: México
Posts: 196
Poder: 21
ramiretor Va por buen camino
Hola:
¿Necesitas lanzar la sentencia dinamicamente o vas a actualizar la misma tabla siempre?

Saludos
__________________
Ernesto R.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
¿Se puede hacer un update en delphi?¿Como? nachobic Conexión con bases de datos 1 30-04-2006 17:38:37
OLD y NEW en UPDATE micayael Firebird e Interbase 3 20-10-2005 15:50:14
Como crear una sentencia SQL (Insert, update y delete) sitrico Conexión con bases de datos 1 14-10-2004 00:02:42
Como llevo de un txt a una tabla de forma atomatica? danytorres Varios 2 27-09-2003 19:28:42
¿Como realizar bien un UPDATE? judoboy SQL 11 13-05-2003 14:02:38


La franja horaria es GMT +2. Ahora son las 11:24: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
Copyright 1996-2007 Club Delphi