Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Impresión (https://www.clubdelphi.com/foros/forumdisplay.php?f=4)
-   -   Evitar listados con Campos en blanco? (https://www.clubdelphi.com/foros/showthread.php?t=4510)

kia 17-10-2003 21:46:40

Evitar listados con Campos en blanco?
 
Hola foristas.
Utilizo D5 - QuickReport y SQL de novata.
Vereis tengo una tabla con 6 campos, y un listado con 5 de los campos de la tabla y va bien.

En el listado uno de esos campos es 'Matricula' pero hay registros que no tienen matricula, y quisiera que :
Cuando la Matricula sea =' ' sea sustituida por el valor del campo 6 de la tabla que se llama 'Localidad'.
Conseguiria evitar huecos en los listados, no tendria que comprimir.
Se puede conseguir? Gracias Kia;)

delphi.com.ar 17-10-2003 21:57:01

Yo trabajando con Oracle, lo haría desde la consulta:
Código:

SELECT NVL(MATRICULA, LOCALIDAD) CAMPO1
FROM TABLA

... si en el motor en que trabajas no tienes una función como esta (SqlServer= ISNULL, Access= NZ), puedes hacerlo en el evento OnPrint del QRDBText:
Código:

procedure TQuickRpt.QRDBText1Print(sender: TObject; var Value: String);
begin
  if Value = '' Then
    Value := Query1.FieldByName('LOCALIDAD').AsString;
end;

Saludos!

roman 17-10-2003 21:59:45

Una solución podría ser agregar un campo calculado al dataset con que alimentes el reporte. En el evento OnCalcFields del dataset pones el valor del nuevo campo al de localidad o maticula dependiendo de si matricula está o no en blanco.

// Saludos

__cadetill 18-10-2003 11:14:13

tambien podría utilizar un case en la sentencia SQL (estilo a lo que comenta d.c.a)

Código:

select campo1, campo2,...,
              case when MATRICULA <> '' then MATRICULA
                    else LOCALIDAD
              end
from tabla
where condiciones

si el motor de BD lo soporta, claro

kia 18-10-2003 12:56:18

Hola de nuevo.
Gracias por las respuestas.
He probado las dos soluciones y por aquello de no estar al nivel los campos calculados no he llegado todavia. pero llegare.
He tenido que hacerlo asi:
// QREXpr10---es el Campo LOCALIDAD

procedure TI_movil.QRExpr10Print(sender: TObject; var Value: String);
begin
if (Value <> '') and (Query1MATRICULA.Value<>'')Then
Value := Query1.FieldByName('MATRICULA').AsString;
end;

De la solucion vuestra.
No reconoce el campo en blanco, solo me funciona cuando sustituyo el campò localidad y por que siempre tiene un valor.
Hay alguna manera de decirle que el campo es nulo o en blanco sin emplear las ''.
Salu2. y Merci Kia. ;)

__cadetill 18-10-2003 13:00:31

Cita:

Posteado originalmente por kia
Hay alguna manera de decirle que el campo es nulo o en blanco sin emplear las ''.
Query1.FieldByName('campo').IsNull

Pero si lo quieres comparar a blanco, no te queda más remedio que utilizar las comillas


La franja horaria es GMT +2. Ahora son las 11:42:28.

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