Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   duda para armar una consulta (https://www.clubdelphi.com/foros/showthread.php?t=54588)

Patricio 24-03-2008 19:44:18

duda para armar una consulta
 
Gente, les hago una consulta, tengo una tabla donde guardo la direccion, por ejmplo con los siguientes campos

Calle Numero Piso Departamento

en algunas direcciones solo se usa la calle y el numero, y para algunos se usa la calle el numero el piso y el departamento

Como podria hacer una consulta que tome la calle y el numero si el piso y departamento no esta cargado o tome todos los campos cuando esten cargados. Espero q se entienda lo que quiero. Gracias

marcoszorrilla 24-03-2008 19:48:29

Creo que puedes concatenar todos los campos y de esta manera los que estuvieran vacios simplemente no aparecerían.

Un Saludo.

Patricio 24-03-2008 20:15:09

si esa puede ser pero ....
 
puede ser el tema es que no quedaria del todo legible, por ejemplo

si una persona vive en Sarmiento 45 Dpto 4
y otro vive en Sarmiento 74 Piso 4 Dpto 1

si concateno todo quedarian
Sarmiento 45 4
y Sarmiento 74 4 1

yo ahora lo que hago es, si no tiene piso le cargo '--' si no tiene dpto le cargo '--' y despues hago lo que vos me decis, el tema es que salen muchos '--' y queda desprolijo

Lepe 24-03-2008 22:19:55

¿no sería más legible aún incluir los labels?

De forma que quede:
Sarmiento nº 45 Dpto 4
Sarmiento nº 74 Piso 4 Dpto 1

Otra opción totalmente distinta es poner un Memo y que el usuario escriba la dirección completa, a veces es útil, para una dirección del tipo:
Ctra. Nacional 3, km 33
polígono Prado Verde donde pastan las vaquitas nave 3
23332 Sevilla

Saludos

Patricio 25-03-2008 12:56:04

si seria mas legible
 
Quedaria muy lindo con los label, ahora con una consulta sql como se puede hacer?

como se puede hacer para ver si tiene datos en el campo Dpto poner en el resultado Dpto 4, y si no tiene no poner nada

Es posible? o hay que hacerlo de otra manera?. Gracias

Lepe 25-03-2008 17:03:53

¿De qué Base de datos hablamos? Porque el sql de paradox no es igual a Firebird, MySql, Postgree, etc.

¿donde iría el texto de la dirección? ¿en un informe de QuickReport, FastReport? ¿En un Label de una ventana?

Saludos

Patricio 26-03-2008 18:55:35

interbase
 
la base es de interbase y el texto podria ir en una grilla si es q con una consulta se puede obtener y seria el origen de la grilla

Lepe 26-03-2008 21:24:18

Pues lo mejor, creas un campo que se llame Direccion_Completa y que el usuario no lo pueda modificar.

En un Trigger before insert y before update, lo haces en manual:
Código SQL [-]
create trigger for tabla1
before update before insert  position 0
as
begin 
  if not isnull(new.calle) then
    new.DireccionCompleta = 'Calle ' || new.calle;

  if not isnull(new.numero) then
    new.DireccionCompleta = new.DireccionCompleta || ' nº '  || new.numero;

  if not isnull(new.Dpto) then
       new.DireccionCompleta = new.DireccionCompleta || ' Dpto '  || new.Dpto;
end;
Que const que lo he escrito de memoria y para Firebird, no sé las peculiaridades que tiene Interbase, pero debe funcionar.

Al menos en firebird tienes una udf llamada CONCAT que permite sustituir al operador "||", la verdad, no sé si es estandar del SQL.

Un detalle importante: Yo pregunto si el campo es nulo, pero si has guardado dos guiones, deberás decir: if new.Dpto = "--" then

Cuando quieras la dirección por trozos, accedes a los campos calle, numero, Dpto. Cuando quieras la dirección completa, accedes a ese nuevo campo.

Es lo que se me ocurre de momento, si alguien tiene una idea mejor, bienvenida sea.

Saludos.


La franja horaria es GMT +2. Ahora son las 12:34:55.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi