Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   Update condicional en FIREBIRD 2.5 (https://www.clubdelphi.com/foros/showthread.php?t=93771)

ASEP 22-02-2019 09:30:09

Update condicional en FIREBIRD 2.5
 
Buenas estoy trabajando con Firebird 2.5 y necesito hacer un update condicional a una tabla, quiero modificar algunos campos de la tabla siempre y cuando el usuario haya metido algún dato en el formulario para ese campo,,, Me Explico
Por Ejemplo, imaginaros que tengo una tabla con los siguientes campos DNI, NOMBRE, APELLIDOS, DIRECCION, mediante un formulario pido dichos campos de un DNI en concreto, si me ponen la DIRECCION en el formulario la modifico en la tabla según el DNI pero si la dejan en blanco no la modifico, la dejo con el valor que tuviera.
Esto lo hago de la siguiente manera en un procedure
Update tabla set
DIRECCION = :direccion Where ( :dirección <> ‘’ ) AND ( DNI = :dni ) ;
Update tabla set
NONBRE = :nombre Where ( :nombre <> ‘’ ) AND ( DNI = :dni ) ;
Update tabla set
APELLIDOS = :apellidos Where ( :apellidos <> ‘’ ) AND ( DNI = :dni ) ;
……….

Esto me resuelve el tema pero mi pregunta es…
Habría otra manera más elegante de hacerlo.?????????
Existe alguna manera de decirle a Update que update si el campo contiene datos y si no que no haga nada en ese campo?????


Gracias por adelantado.

Casimiro Notevi 22-02-2019 10:08:13

Es que si tienes los datos en un formulario y no quieres que dejen campos vacíos, deberías controlarlos/verificarlos antes de guardarlos, algo así como:
Código Delphi [-]
if edNombre.Text="" then showmessage('Escriba un nombre')
else if edTelefono.Text="" then showmessage('Escriba un teléfono');
...
Después ya puede guardar todo.
Código SQL [-]
update tbClientes set nombre=:nombre, telefono=:telefono where dni=:dni

ASEP 22-02-2019 10:59:55

Muchas Gracias Casimiro, pero si quiero que puedan dejar los campos vacíos, dejaran los campos vacíos aquellos que no se quieran modificar.....

si por ejemplo se quiere modificar la dirección de un registro no pondrán nada en nombre ni apellidos solo la dirección que quieran modificar.

Casimiro Notevi 22-02-2019 11:11:08

Cuando se muestra un formulario, por ejemplo la ficha de un cliente, se muestran todos sus datos.
Luego el usuario editará alguno, todos o ninguno, pero los datos están ahí.
Me resulta extraño eso de "dejar vacio" lo que no se quiera editar. Si no se quiere editar, simplemente, no se tocan, se dejan como están.
Saludos.

ASEP 22-02-2019 12:15:49

Cita:

Empezado por Casimiro Notevi (Mensaje 530810)
Cuando se muestra un formulario, por ejemplo la ficha de un cliente, se muestran todos sus datos.
Luego el usuario editará alguno, todos o ninguno, pero los datos están ahí.
Me resulta extraño eso de "dejar vacio" lo que no se quiera editar. Si no se quiere editar, simplemente, no se tocan, se dejan como están.
Saludos.

Entiendo tus dudas: pero en el formulario no se muestran los datos del cliente por que es una BBDD externa en la que no están, se muestran los campos vacíos y el usuario tiene que poner que campos quiere modificar, cuando termina lo mando a un procedure en firebird y allí lo trabajo,,,,, tiene que ser así , ese es el problema.

cloayza 22-02-2019 18:36:44

Prueba está opción...

Código SQL [-]
 update tablet Tu_tabla
Set DIRECCION = IIF(:dirección <> ‘’,:dirección, direccion ) 
       NONBRE = IIF(:nombre <> ‘’ , :nombre, nombre),
       APELLIDOS = IIF( :apellidos <> ‘’ , :apellido, apellido) where (DNI = :dni ) ;
Saludos cordiales

ASEP 23-02-2019 12:23:05

Cita:

Empezado por cloayza (Mensaje 530814)
Prueba está opción...

Código SQL [-]
 update tablet Tu_tabla
Set DIRECCION = IIF(:dirección <> ‘’,:dirección, direccion ) 
       NONBRE = IIF(:nombre <> ‘’ , :nombre, nombre),
       APELLIDOS = IIF( :apellidos <> ‘’ , :apellido, apellido) where (DNI = :dni ) ;
Saludos cordiales

Muchas Gracias cloayza, pero si están en blanco no quiero meterle nada, con tu opción que es muy valida tendría que ver primero el dato que tienen los campos y si el dato viene vació meterle en la modificación el campo que tenía,,,,

muchas gracias....


perdona lo he probado y va genial sin tener que mirar que dato tiene antes ,,,,, gracias es lo que buscaba.....


La franja horaria es GMT +2. Ahora son las 06:27:52.

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