Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 29-10-2008
noob noob is offline
Miembro
 
Registrado: sep 2008
Posts: 212
Poder: 16
noob Va por buen camino
Insertar o modificar dependiendo de una condición

Me gustaría saber si se puede hacer esto.

Digamos que tengo una tabla Tabla1 con dos campos: Codigo y Cantidad y tengo los siguientes registros:

+--+--+
|1 |23|
|2 |12|
+--+--+


ahora sumo seis unidades a la cantidad del registro cuyo codigo es dos:

Código:
update Tabla1 set Cantidad = Cantidad + 6 where Codigo = 2;
+--+--+
|1 |23|
|2 |18|
+--+--+


pero si ese registro no existiera, por ejemplo:

+--+--+
|1 |23|
|3 |12|
+--+--+


y hago:

Código:
update Tabla1 set Cantidad = Cantidad + 6 where Codigo = 2;
me daría error. Lo que debería de hacer sería:

Código:
insert into Tabla1 values (2, 6);
Yo quiero generar una sentencia genérica que me sirva tanto si existe ese registro como si no. Algo así como:

Código:
if existe registro then
  update Tabla1 set Cantidad = Cantidad + 6 where Codigo = 2
else
  insert into Tabla1 values (2, 6);
Quiero saber si todo esto se puede hacer bajo código MySQL sin ayudarnos de código Delphi claro.

¿Es posible?

Última edición por noob fecha: 29-10-2008 a las 22:03:21.
Responder Con Cita
  #2  
Antiguo 29-10-2008
Avatar de jhonny
jhonny jhonny is offline
Jhonny Suárez
 
Registrado: may 2003
Ubicación: Colombia
Posts: 7.058
Poder: 30
jhonny Va camino a la famajhonny Va camino a la fama
Con Firebird se puede hacer utiizando la sentencia "Update or Insert", no conozco muy bien MySQL, por lo que solo podria decirte que tal vez tambien tenga dicha sentencia.
__________________
Lecciones de mi Madre. Tema: modificación del comportamiento, "Pará de actuar como tu padre!"

http://www.purodelphi.com/
http://www.nosolodelphi.com/
Responder Con Cita
  #3  
Antiguo 29-10-2008
Avatar de rgstuamigo
rgstuamigo rgstuamigo is offline
Miembro
 
Registrado: jul 2008
Ubicación: Santa Cruz de la Sierra-Bolivia
Posts: 1.646
Poder: 17
rgstuamigo Va por buen camino
Thumbs up

Claro que se puede:

Código SQL [-]
DELIMITER $$

DROP PROCEDURE IF EXISTS `MIBaseDeDatos`.`Insertar` $$
CREATE PROCEDURE `MIBaseDeDatos`.`Insertar` (cod int,cant int)
BEGIN
   if exists(select Cod from Tabla1 t where t.Cod=cod)then
         update Tabla1 t set Cantidad = Cantidad + cant where t.Cod =cod;
      else
           insert into Tabla1 values (cod, cant);
    end if;
END $$

DELIMITER ;
__________________
"Pedid, y se os dará; buscad, y hallaréis; llamad, y se os abrirá." Mt.7:7

Última edición por rgstuamigo fecha: 29-10-2008 a las 23:50:12.
Responder Con Cita
  #4  
Antiguo 29-10-2008
noob noob is offline
Miembro
 
Registrado: sep 2008
Posts: 212
Poder: 16
noob Va por buen camino
¡Mil gracias!
Responder Con Cita
  #5  
Antiguo 03-11-2008
noob noob is offline
Miembro
 
Registrado: sep 2008
Posts: 212
Poder: 16
noob Va por buen camino
Si creo el procedimiento me funciona pero yo quiero prescindir de crear un procedimiento. Hago esto pero me dice que hay un error de sintaxis:

Código SQL [-]
if exists (select * from Tabla1 t where t.Cod=2) then
  update Tabla1 t set Cantidad = 3 where t.Cod = 2;
else
  insert into Tabla1 t values (2, 3);
end if;

¿No es posible usar una sentencia IF THEN ELSE fuera de una subrutina?

Última edición por noob fecha: 03-11-2008 a las 02:20:45.
Responder Con Cita
  #6  
Antiguo 03-11-2008
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 29
Lepe Va por buen camino
No sé si en los componentes que usas tienes uno llamado Script. Viene a funcionar igual que el Script window de IBExpert.

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
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
Insertar y modificar al mismo tiempo ! hecospina Firebird e Interbase 4 17-09-2008 13:40:28
Insertar y/o modificar un campo con decimales rafita Varios 5 30-07-2007 10:41:28
Como insertar, eliminar y modificar en c#? danytorres .NET 2 09-05-2006 22:29:47
lentitud al Modificar/Insertar kukinn Conexión con bases de datos 3 23-03-2004 09:37:57
Problema el insertar/modificar registro ing_alsaac Conexión con bases de datos 0 29-02-2004 09:18:15


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


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