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)
-   -   problemas con Update. (https://www.clubdelphi.com/foros/showthread.php?t=57306)

sargento elias 11-06-2008 11:59:01

problemas con Update.
 
Buenos diass!!

A ver si podeis ayudarme, tengo dos tablas, clientes y repartidores , y necesito hacer un update en un campo de la tabla clientes cuando se cumpla la condición que clientes.cod = repartidores.cod.

El problema viene cuando quiero darle el valor a pelo, no el de un campo de la tabla, sino haría un select sobre el campo y le daría el valor.

update clientes set valor = (select valor form clientes..) where condición.

El problema es cuando el valor quiero darselo yo, no que lo saque de un campo de la tabla.
update clientes set valor ='S' where condición.

Entonces al ser una condición de dos tablas diferentes no me deja. A ver si le encontrais solución.

Lo quiero ejecutar en Firebird 2.0

Gracias

RolphyReyes 11-06-2008 14:51:28

Saludos.

Para esa operación puedes hacer un StoredProcedure que contenga las dos sentencias y dependiendo de un valor que le mandes al Procedure ejecute una de ellas.

Me refiero:

Código SQL [-]
CREATE PROCEDURE PRUEBA(CONDICION : VARCHAR; VALOR : VARCHAR)
BEGIN
 IF CONDICION = 'S' THEN
UPDATE TABLA1 SET CAMPO1 = 'S' WHERE CAMPO2 = 1;
ELSE
UPDATE TABLA1 SET CAMPO1 = (SELECT CAMPO1 FROM TABLA2);
END;

Es solo una idea, ese código no es que te vaya a funcionar sino que es la esencia de lo que quiero expresarte.

Hasta luego.

rastafarey 11-06-2008 15:03:02

Código SQL [-]
Update t1 set c1 = (select 
case t1 
   when 1 then c2
   when 2 then c3
   when 3 then c4
   else c5
end
from t2 where condicion)

sargento elias 11-06-2008 17:52:10

Lo del procedimiento almacenado, ya lo tenía, gracias, solo me interesaba saber si podía hacer esto en otra sentencia Update.

UPDATE CLIENTES SET clientes.CAMPO = 'S'
WHERE CLIENTES.COD = REPARTIDORES.COD

No he entendido el segundo post, si puedes explicarmelo..

celades1 11-06-2008 19:47:38

Hola


Código SQL [-]
UPDATE CLIENTES SET clientes.CAMPO = 'S'
WHERE exists(select null from repartidores 
where CLIENTES.COD = REPARTIDORES.COD)





Saludos

rastafarey 11-06-2008 20:41:36

[quote=rastafarey;292774]
Código SQL [-]
Update t1 set c1 = (select 
case t1 
   when 1 then c2
   when 2 then c3
   when 3 then c4
   else c5
end
from t2 where condicion)
Código SQL [-]
Update t1 set c1 = (select 
case t1 
   when 1 then c2
   when 2 then c3
   when 3 then c4
   else 'S'
end
from t2 where condicion)
Creo que puedes interpretar la sentencia y usarla a tu manera.

sargento elias 12-06-2008 09:33:14

celades
 
Por lo que entendido tiene que estar el campo vacío?

El clientes.campo ya tiene valores 'N' y 'S' tu consulta no me da errores, pero no me hace el update. No quiero cambiar todos los 'N' solo los que cumplan la condición.

celades1 12-06-2008 14:31:32

Hola

no hagas caso del null simplemente lo que hace el exists es que se updatee siempre que la subconsulta devuelva uno o varios registros o sea que sea cierta.

El
Código SQL [-]
UPDATE CLIENTES cl SET cl.CAMPO = 'S'WHERE exists(select null from repartidores r where cl.COD = r.COD)

El update creo que esta bien a no ser que no te haya entendido bien

Saludos

rastafarey 12-06-2008 14:51:56

Resp
 
Compadre Dame la estructuras de las tablas y escribe la cosulta mas o menos como la quieres para escribirte la consult acomo la necesitas.

sargento elias 12-06-2008 16:35:20

no tira
 
Celades, la consulta no me da error pero no me modifica nada.

rasta

A ver tengo clientes(cod,trec(tipo Si/NO)
y tengo repartidores(cod)

Entre ellas no hay relación ninguna. Los campos de clientes.trc son igual a 'N'
y quiero hacer un Update en ese campo de clientes al valor 'S' cuando el cod de clientes sea igual al de repartidores.
No me importa como sea la consulta si funciona. Y me ahorro el procedimiento almacenado que creo no es necesario.

firebird 2.0

rastafarey 12-06-2008 18:36:01

Resp
 
Aqui estan las tabla
Código SQL [-]
CREATE TABLE "Clientes" (
    "Cod"  VARCHAR(20) NOT NULL,
    "Trc"  CHAR(1) NOT NULL
);


CREATE TABLE "Repartidores" (
    "Cod"  VARCHAR(20) NOT NULL
);
Y Aqui esta el sql
Código SQL [-]
update "Clientes" C Set C."Trc" = 'S' Where C."Cod" In ( select "Cod" from "Repartidores")
Adapta las cosultas con los campo que tienes.

Si entendi bien la pregunta esa es la respuesta.

Espero te sirva.

rastafarey 12-06-2008 18:51:06

Cita:

Empezado por celades1 (Mensaje 292862)
Hola


Código SQL [-]
UPDATE CLIENTES SET clientes.CAMPO = 'S'
WHERE exists(select null from repartidores 
where CLIENTES.COD = REPARTIDORES.COD)





Saludos

Aunque esta se ejecuta mas rapido.

sargento elias 12-06-2008 19:06:31

Error
 
Este es el error que me da en vuestras dos consultas.

Insert failed because a column definition includes validation constraints. Validation error for column trc, value 'S'.

rastafarey 12-06-2008 19:18:10

Tu crees que aqui somos adivinos o algo por el estilo.

Pon el script de tus tablas. script script script script

No se si me explique. Lo que aui necesitamos para poderte ayudar.

sargento elias 12-06-2008 19:30:16

Vale lo tengo, funciona perfectamente.las dos consultas.Muchisimas gracias y perdonad las molestias.


La franja horaria es GMT +2. Ahora son las 02:58:15.

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