Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Concadenar un Blob y un Varchar (https://www.clubdelphi.com/foros/showthread.php?t=69365)

ingabraham 12-08-2010 23:37:56

Concadenar un Blob y un Varchar
 
ej;:

tipo varchar blob
select nombrepaciente||diagnostico from recetas

me sale error, no me muestra nada,
como se hace esto?

utilizo firebird 2.0 y delphi 7.

Caral 12-08-2010 23:39:16

Hola
Desde IBExpert o desde delphi???
Saludos

ingabraham 12-08-2010 23:41:12

desde delphi,

Caral 12-08-2010 23:49:38

Hola
Desde IBExpert o directo en Firebird:
Código SQL [-]
 recetas.nombrepaciente|| ' ' ||diagnostico AS Descr,

Desde Delphi:
Código Delphi [-]
 recetas.nombrepaciente|| '' '' ||diagnostico AS Descr,

Saludos

ingabraham 12-08-2010 23:51:04

error me aparece, de esa forma en delphi no me aparece nada
y en firebird error.
debido a que hay incompatibiliad en los tipo Blob y un Varchar

el cast(nombrepaciente as blob)

o
el cast(diagnostico as varchar)
no me acepta tampoco.

que hago?

egostar 13-08-2010 00:13:26

Cita:

Empezado por ingabraham (Mensaje 373411)
error me aparece, de esa forma en delphi no me aparece nada
y en firebird error.
debido a que hay incompatibiliad en los tipo Blob y un Varchar

el cast(nombrepaciente as blob)

o
el cast(diagnostico as varchar)
no me acepta tampoco.

que hago?

Hola

Código SQL [-]
select coalesce(substring(nombrepaciente from 1 for 80), diagnostico) from recetas

Saludos

ecfisa 13-08-2010 00:22:34

Hola ingabraham.

El código funciona perfectamente.

Cambié los nombres de campo y tabla para realizar la prueba, pero la consulta es la misma: Campo || CampoBlob

Prueba en Delphi/Firebird, con IBQuery y con IBDataSet:
Código Delphi [-]
procedure TForm1.BtnQueryClick(Sender: TObject);
begin
  DataSource1.DataSet:= IBQuery1; // para visualizar en dbgrid
  with IBQuery1 do
  begin
    Close;
    SQL.Text:= 'SELECT  NOMBRE || OBSERVACION FROM PACIENTES';
    Open;
  end;
end;

procedure TForm1.BtnDataSetClick(Sender: TObject);
begin
  DataSource1.DataSet:= IBDataSet1; // para visualizar en dbgrid
  with IBDataSet1 do
  begin
    Close;
    SelectSQL.Text:= 'SELECT  NOMBRE || OBSERVACION FROM PACIENTES';
    Open;
  end;
end;


Saludos.

Caral 13-08-2010 01:47:36

Hola
En un reporte uso esta sentencia a la perfeccion, al estar en el string del reporte es igual que ponerla en el IBexpert:
Código SQL [-]
SELECT SerieMaterial.NumSerie, OrdenProdItem.CodOrden, OrdenProdItem.CodParte,
 Articulos.Descripcion|| ' ' ||Categoria|| ' ' ||SubCategoria AS Descr, SerieMaterial.CodMaterial,
Materiales.Descripcion, Materiales.Unidad, SerieMaterial.Cantidad, Materiales.Costo,
OrdenProdItem.FinProd, SerieMaterial.CostoALaFecha 
FROM Articulos RIGHT JOIN (OrdenProdItem INNER JOIN (Materiales RIGHT JOIN SerieMaterial
ON Materiales.CodMaterial = SerieMaterial.CodMaterial) ON OrdenProdItem.NumSerie = SerieMaterial.NumSerie)
ON Articulos.CodParte = OrdenProdItem.CodParte

Y en uno de los tantos codigos que tengo en delphi:
Código Delphi [-]
If FSelProdFact.CheckBox1.Checked = True then
      begin
         QTemp.Close;
         QTemp.SQL.Text := 'SELECT Descripcion|| '' '' ||Categoria|| '' '' ||SubCategoria AS Descr, Precio1 FROM Articulos '+
                           'WHERE CodParte = '+QuotedStr(FSelProdFact.Edit1.Text);
         QTemp.Open;
      end;

Por lo tanto:
Las dos sentencias que puse funcionan Perfectamente en Firebird, si no es asi, tengo un trato con el diablo jejejje.
Saludos

PD: LAS COMILLAS son por razones Obvias:
Se usan para que los datos que se presentan no estén pegados, estén separados por un espacio, muy útil lógicamente.

ingabraham 14-08-2010 15:40:22

NO ME HAN ENTENDIDO TODAVIA EXCEPTO egotar

esto : || '' '' || no me sirve solamente.

hay un campo BLOB con un campo String

Los quiero concadenar, pero asi :|| '' '' || sencillamente no me los concadena, debido a que el tipo blob es incompatible con el string.

ecfisa 14-08-2010 18:15:52

Cita:

Empezado por ingabraham (Mensaje 373553)
NO ME HAN ENTENDIDO TODAVIA EXCEPTO egotar

esto : || '' '' || no me sirve solamente.

hay un campo BLOB con un campo String

Los quiero concadenar, pero asi :|| '' '' || sencillamente no me los concadena, debido a que el tipo blob es incompatible con el string.

No, realmente no te entiendo, lo que puse arriba funciona OK.

A ver si te puedo entender... vos intentás hacer algo como esto ?
Código Delphi [-]
   with IBDataSet do
        Resultado:= FieldByName('NOMBRE').AsString + FieldByName('OBSERVACION').AsString;

Es decir, que intentas y que no logras ?
Podés poner el código ?

Saludos.

egostar 14-08-2010 18:16:37

Cita:

Empezado por ingabraham (Mensaje 373553)
NO ME HAN ENTENDIDO TODAVIA EXCEPTO egotar

esto : || '' '' || no me sirve solamente.

hay un campo BLOB con un campo String

Los quiero concadenar, pero asi :|| '' '' || sencillamente no me los concadena, debido a que el tipo blob es incompatible con el string.

Y ahora que lo mencionas, me parece que mi cerebro conceptualizó los campos al reves :D

Me imagino que lo correcto es así.

Código SQL [-]
select coalesce(nombrepaciente, substring(diagnostico from 1 for 100) ) from recetas

saludos

ingabraham 14-08-2010 20:25:31

esta bien como todos ustedes plantean sus respuestas,
es que no me daba los registros correctos por otro problema

hay registros del campo varchar que estan null y no concadena
ej:

nombre diagnostico

juan diarrea avanzada
marcos is null


no me condadena a marchos: respuesta obtenida

- juan diarrea avanzada
-
el registro de marcos no concadena. me aparece vacio.

|| esta bien
y substring tambien.
pero me falta corregir ese problema:, lo correcto seria

- juan diarrea avanzada
- marcos

ecfisa 14-08-2010 23:04:02

Ahora sí...:)

La consulta podría ser:
Código SQL [-]
SELECT NOMBRE ||' '|| OBSERVACION FROM PACIENTES
WHERE (NOMBRE IS NOT NULL) AND (OBSERVACION IS NOT NULL)

Nota: Si el nombre es requerido, está sí o sí, la consulta puede quedar:
Código SQL [-]
SELECT NOMBRE ||' '|| OBSERVACION FROM PACIENTES
WHERE OBSERVACION IS NOT NULL

Saludos.

Caral 14-08-2010 23:26:48

Hola
Código SQL [-]
SELECT NOMBRE ||' '|| IIf(OBSERVACION is NULL, ''SIN DATO'', OBSERVACION) AS OBSERVACION FROM PACIENTES

OTRO:
Código SQL [-]
SELECT NOMBRE ||' '|| if(OBSERVACION is null) then ''SIN DATO'' ELSE OBSERVACION AS OBSERVACION FROM PACIENTES

Incluso se puede hacer con case.

Saludos

ecfisa 15-08-2010 01:24:57

Cita:

Empezado por Caral (Mensaje 373587)
Código SQL [-]
SELECT NOMBRE ||' '|| IIf(OBSERVACION is NULL, ''SIN DATO'', OBSERVACION) AS OBSERVACION FROM PACIENTES
Código SQL [-]
SELECT NOMBRE ||' '|| if(OBSERVACION is null) then ''SIN DATO'' ELSE OBSERVACION AS OBSERVACION FROM PACIENTES

Amigo caral, ese código no es de 'novato'...:)


Saludos.

Caral 15-08-2010 01:46:09

Hola
Seguro ??, quien sabe de donde lo copie :D:D
En eso soy especialista, Control+C, Control+V.:D
Saludos

ecfisa 15-08-2010 03:14:16

Cita:

Empezado por Caral (Mensaje 373591)
Hola
Seguro ??, quien sabe de donde lo copie :D:D
En eso soy especialista, Control+C, Control+V.:D
Saludos

Seguro ??... Segurísimo !!!

Encima lo haces de memoria !!!...
No digas que no, por que sobra una comilla simple en ''SIN DATO''.
Probé el código para entenderlo :), hay cosas como IIF que no conocía.

Lo demás, como era de esperarse de un 'novato' anda perfecto. :D

Saludos.

Caral 15-08-2010 03:37:21

Hola
Siempre me olvido, la doble comilla es cuando se usa en delphi.:)
Saludos
PD: Me alegro que conozcas algo nuevo, pero seguro que no soy el mas adecuado para enseñar nada amigo.

ingabraham 15-08-2010 18:56:05

Cita:

Empezado por Caral (Mensaje 373587)
Hola

Código SQL [-]
SELECT NOMBRE ||' '|| IIf(OBSERVACION is NULL, ''SIN DATO'', OBSERVACION) AS OBSERVACION FROM PACIENTES




OTRO:

Código SQL [-]
SELECT NOMBRE ||' '|| if(OBSERVACION is null) then ''SIN DATO'' ELSE OBSERVACION AS OBSERVACION FROM PACIENTES




Incluso se puede hacer con case.

Saludos


este codigo iff lo acepta firebird 2.0

Caral 15-08-2010 20:33:28

Hola
Yo tengo firebird 2.1. y acepta a la perfección, cualquiera de los dos.
No creo que haya mucha diferencia.
Saludos


La franja horaria es GMT +2. Ahora son las 23:29:17.

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