Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 03-07-2013
Avatar de jafera
jafera jafera is offline
Miembro
 
Registrado: may 2007
Ubicación: Llagostera (Girona)
Posts: 582
Poder: 17
jafera Va por buen camino
Actualizar un campo vacio con el valor de otro

Hola de nuevo.

Siguiendo con mis pesquisas sqeleras, tengo una duda de como puedo actualizar el valor de un campo vacio con el valor del campo adyacente, os explico:

El archivo txt en el que me mandan los corredores ciclistas desde la federación, esta separado por comas y su formato es dorsal, nombre, apellido1, apellido2, etc., esto hasta aquí es correcto, luego yo importo estos datos a la tabla Firebird correspondiente y funciona de perlas pero he detectado que los corredores extranjeros que tienen un solo apellido, este no figura en apellido1 sino en apellido 2, con lo cual si hago una busqueda a estos no los encuentro jamás ya que el valor es vacio, como ejemplo:

1, Josep, Fernandez, Alberti,etc.
2, Lio, ,Chin,etc.
3, Johny, ,Walker,etc.
4, Antonio, Gomez, Perez,etc.

Lo que yo necesitaria seía que una vez importados los datos a la tabla, pudiera recorrer la tabla y cambiar el valor de los registros 2 y 3 (que son los que estan vacios en apellido1) y que la tabla quedara así:

1, Josep, Fernandez, Alberti,etc.
2, Lio, Chin, ,etc.
3, Johny, Walker, ,etc.
4, Antonio, Gomez, Perez,etc.

He probado con update si campo apellido 2 = vacio que apellido 1=apellido2 y luego apellido2 = vacio, pero claro me los cambia todos.

No se si alguien se ha encontrado con un problema similar y que solución le ha dado

Muchas gracias

Josep
Responder Con Cita
  #2  
Antiguo 03-07-2013
Avatar de ElDioni
[ElDioni] ElDioni is offline
Miembro Premium
 
Registrado: jul 2005
Ubicación: Murcia (España)
Posts: 935
Poder: 19
ElDioni Va por buen camino
Cita:
Empezado por jafera Ver Mensaje
He probado con update si campo apellido 2 = vacio que apellido 1=apellido2 y luego apellido2 = vacio, pero claro me los cambia todos.
Si lo has hecho así te quedaría que todos los que tengan el apellido2 vacio también tengan vacio el apellido1 y por si acaso no estaba suficientemente vacio el apellido2 lo vuelves a vaciar.

Creo que sería algo como
Código SQL [-]
UPDATE corredores SET apellido1=apellido2,apellido2='' WHERE apellido1 is null

Supongo que con algo así funcionaría dando por echo que realizará la primera actualización antes que la segunda.

También podría hacer la comprobación a la hora de volcar los datos a la tabla firebird, no se como haces el traspaso de un lado a otro pero doy por sentado que en algún momento podrías meter la comprobación.

Por último podrías hacer que al buscar por apellido no hagas dos campos de búsqueda, uno para el apellido1 y otro para el apellido2, yo pondría un solo campo que sería apellido y luego buscaría en la tabla coincidencias en los dos campos.
Código SQL [-]
SELECT * FROM corredores WHERE apellido1 LIKE '%ernandez%' OR apellido2 LIKE '%ernandez%'

Saludos.
__________________
Confórmate con lo que tienes pero anhela lo que te falta.
Responder Con Cita
  #3  
Antiguo 03-07-2013
Avatar de jafera
jafera jafera is offline
Miembro
 
Registrado: may 2007
Ubicación: Llagostera (Girona)
Posts: 582
Poder: 17
jafera Va por buen camino
Gracias por la respuesta.

El update propuesto ha funcionado bien, no sabia que podia actualizar de una tacada los dos campos.

El método de insercion de datos en la tabla es este:

Código Delphi [-]
 
IBSQLMaster.SQL.Text := 'Insert into CTR0003C values(:C1, :C2, :C3, :C4, :C5, :C6, :C7, :C8, :C9, :C10, :C11, :C12)';
F := TIBInputDelimitedFile.Create;
try
          F.ColDelimiter:=';';
          F.Filename := 'C:\Trial_1.0\Masters\Master.txt';
          IBSQLMaster.BatchInput(F);
finally
          F.Free;
end;

Donde apellido1 es C3 y apellido2 es C4

En cuanto a la busqueda lo hago por un campo union de apellido1 + apellido2 + nombre

Saludos

Josep
Responder Con Cita
  #4  
Antiguo 03-07-2013
Avatar de ElDioni
[ElDioni] ElDioni is offline
Miembro Premium
 
Registrado: jul 2005
Ubicación: Murcia (España)
Posts: 935
Poder: 19
ElDioni Va por buen camino
Cita:
Empezado por jafera Ver Mensaje

En cuanto a la busqueda lo hago por un campo union de apellido1 + apellido2 + nombre
Hola, si es así, entonces, podrías utilizar LIKE para que de igual que busques por el apellido1, apellido2 o nombre.

Saludos.
__________________
Confórmate con lo que tienes pero anhela lo que te falta.
Responder Con Cita
  #5  
Antiguo 03-07-2013
Avatar de jafera
jafera jafera is offline
Miembro
 
Registrado: may 2007
Ubicación: Llagostera (Girona)
Posts: 582
Poder: 17
jafera Va por buen camino
Gracias de nuevo.

Realmente el metodo de busqueda no me preocupaba, pero gracias por tu interés, el que realmente era un quebradero es el que he solucionado con el update que mes has propuesto.

Te he pasado el metodo de inserción pues he entendido que igual se podria predecir que el campo esta vacio en este proceso de insercion de datos y modificarlo durante.

Saludos

Josep

Nota: Cada dia con vosotros aprendo una cosita nueva de esto del SQL, sois unos catacracks (más que cracks).

Ahora solo me falta aprender como optimizar una consulta para actualizar 35.000 registros de una tabla a otra y que no me demore mucho tiempo, estoy en ello pero lo pongo a cocer, me voy a tomar cafe y a la vuelta termina, jejeje...
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
Me creo otro form vacío!!! djMadox Varios 2 21-08-2012 01:23:04
Campo vacio en dbf lKinGl Varios 17 11-11-2008 15:21:28
Incrementar campo según el valor de otro subzero Firebird e Interbase 3 06-08-2008 21:41:52
DBGrid de color según campo lógico (u otro valor) Neftali [Germán.Estévez] Trucos 0 30-06-2006 16:16:05
Suma/resta de un campo dependiendo del valor de otro huanque SQL 2 11-09-2004 20:23:47


La franja horaria es GMT +2. Ahora son las 18:58:42.


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