Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 22-04-2012
GonzaloDias GonzaloDias is offline
Miembro
NULL
 
Registrado: ene 2012
Posts: 21
Poder: 0
GonzaloDias Va por buen camino
Concatenar 3 columnas con query de 2 tablas

Hola amigos del foro,
les comento que me surgio un problemita con una consulta que quiero mostrar en un dblookupcombobox

Código Delphi [-]
form2.Query7.Close;
form2.Query7.SQL.Clear;
form2.Query7.SQL.add('select c.Curso_ID as ID, r.Nombre||'' ''||r.Referencia||'' ''||c.Costo as Nombre');
form2.Query7.SQL.add('from Cursos c, Referencias r');
form2.Query7.SQL.add('where c.Nombre = r.Referencia_ID');
form2.Query7.SQL.add('Order by r.Nombre');
form2.Query7.Open;

Luego el campo Nombre del query lo asigno al listfield del db lookupcombbx y me dice Type mismatch in expression. La verdad que con 2 campos de la tabla Referencias si funciona y lo muestra bien pero al agregar c.Costo o algun otro campo de Referencias en la 3er concatenacion me tira ese error. Sabrian porque este error ? sera algo de la concatenacion que me falta ? gracias de antemano
Responder Con Cita
  #2  
Antiguo 22-04-2012
GonzaloDias GonzaloDias is offline
Miembro
NULL
 
Registrado: ene 2012
Posts: 21
Poder: 0
GonzaloDias Va por buen camino
Bien asi me funciono es otra forma pero me quede con la duda de la anterior.
Código Delphi [-]
form2.Query7.Close;
form2.Query7.SQL.Clear;
form2.Query7.SQL.add('select c.Curso_ID as ID, r.Nombre as Nom,r.Referencia as Ref, c.Costo as Cos');
form2.Query7.SQL.add('from Cursos c, Referencias r');
form2.Query7.SQL.add('where c.Nombre=r.Referencia_ID');
form2.Query7.Open;

ComboBox1.Items.Clear;
form2.Query7.First; //Esto podria ser innecesario pero lo coloco por maña
While not form2.Query7.eof do
begin
   nombre := form2.Query7.FieldByName('Nom').AsString + ' ' + form2.Query7.FieldByName('Ref').AsString+ '   Costo $' + form2.Query7.FieldByName('Cos').AsString;
   //comboBox1.Items.Add(Query.FieldByName('nombre').AsString);
   combobox1.Items.Add(nombre);
   form2.Query7.Next;
end;
Gracias.
Responder Con Cita
  #3  
Antiguo 23-04-2012
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Cita:
Empezado por GonzaloDias Ver Mensaje
Hola amigos del foro,
les comento que me surgio un problemita con una consulta que quiero mostrar en un dblookupcombobox

Código Delphi [-]
form2.Query7.Close;
form2.Query7.SQL.Clear;
form2.Query7.SQL.add('select c.Curso_ID as ID, r.Nombre||'' ''||r.Referencia||'' ''||c.Costo as Nombre');
form2.Query7.SQL.add('from Cursos c, Referencias r');
form2.Query7.SQL.add('where c.Nombre = r.Referencia_ID');
form2.Query7.SQL.add('Order by r.Nombre');
form2.Query7.Open;

Luego el campo Nombre del query lo asigno al listfield del db lookupcombbx y me dice Type mismatch in expression. La verdad que con 2 campos de la tabla Referencias si funciona y lo muestra bien pero al agregar c.Costo o algun otro campo de Referencias en la 3er concatenacion me tira ese error. Sabrian porque este error ? sera algo de la concatenacion que me falta ? gracias de antemano
Hola Gonzalo.

Es extraño, el problema estará en la forma que haces las asignaciones al TDBLookupComboBox...
De este modo me funciona correctamente:
Código Delphi [-]
...
  with IBQuery1 do
  begin
    Close;
    SQL.Clear;
    SQL.Add('SELECT C.CURSO_ID AS ID, R.NOMBRE ||'' ''||R.REFERENCIA||'' ''||C.COSTO AS NOMBRE '); 
    SQL.Add('FROM CURSOS C, REFERENCIAS R '); 
    SQL.Add('WHERE C.NOMBRE = R.REFERENCIA_ID '); 
    SQL.Add('ORDER BY R.NOMBRE');
    Open;
  end;
  DataSource1.DataSet:= IBQuery1;
  DBLookupComboBox1.ListSource:= DataSource1;
  DBLookupComboBox1.KeyField:= 'ID';
  DBLookupComboBox1.ListField:= 'NOMBRE';
...
También revisá que haya un espacio al finalizar cada línea que agregues con el método, Add (o al iniciar una nueva)

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #4  
Antiguo 26-04-2012
GonzaloDias GonzaloDias is offline
Miembro
NULL
 
Registrado: ene 2012
Posts: 21
Poder: 0
GonzaloDias Va por buen camino
Una consulta, asntes de agregar al Listfield del dblookupcombobox el campo NOMBRE se podria colocar antes: Nombre:'NOMBRE'? gracias
Responder Con Cita
  #5  
Antiguo 26-04-2012
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Cita:
Empezado por GonzaloDias Ver Mensaje
Una consulta, asntes de agregar al Listfield del dblookupcombobox el campo NOMBRE se podria colocar antes: Nombre:'NOMBRE'? gracias
No.

Pero lo que sí podés hacer es usar el evento OnGetText del campo NOMBRE para lograr lo que deseas:
Código Delphi [-]
...
  private
     procedure DataSetNOMBREGetText(Sender: TField; var Text: String; DisplayText: Boolean);
  end;
...
implementation

procedure TForm1.DataSetNOMBREGetText(Sender: TField; var Text: String; DisplayText: Boolean);
begin
  Text:= 'NOMBRE: '+ TField(Sender).AsString;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  DataSet.FieldByName('NOMBRE').OnGetText:= DataSetNOMBREGetText;
end;

...

procedure TForm1.FormDestroy(Sender: TObject);
begin
   DataSet.FieldByName('NOMBRE').OnGetText:= nil;
end;

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Última edición por ecfisa fecha: 26-04-2012 a las 14:10:30.
Responder Con Cita
  #6  
Antiguo 26-04-2012
Avatar de gatosoft
[gatosoft] gatosoft is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Bogotá, Colombia
Posts: 833
Poder: 21
gatosoft Va camino a la fama
Cita:
Empezado por GonzaloDias Ver Mensaje
Bien asi me funciono es otra forma pero me quede con la duda de la anterior.
Código Delphi [-]
form2.Query7.Close;
form2.Query7.SQL.Clear;
form2.Query7.SQL.add('select c.Curso_ID as ID, r.Nombre as Nom,r.Referencia as Ref, c.Costo as Cos');
form2.Query7.SQL.add('from Cursos c, Referencias r');
form2.Query7.SQL.add('where c.Nombre=r.Referencia_ID');
form2.Query7.Open;

ComboBox1.Items.Clear;
form2.Query7.First; //Esto podria ser innecesario pero lo coloco por maña
While not form2.Query7.eof do
begin
   nombre := form2.Query7.FieldByName('Nom').AsString + ' ' + form2.Query7.FieldByName('Ref').AsString+ '   Costo $' + form2.Query7.FieldByName('Cos').AsString;
   //comboBox1.Items.Add(Query.FieldByName('nombre').AsString);
   combobox1.Items.Add(nombre);
   form2.Query7.Next;
end;
Gracias.
Hola gonzalo, estoy de acuerdo contigo, la solución alterna funciona, pero no me parece la mejor.... además no es bueno quedarse con las dudas....

En que base estas trabajando? es PostgreSQL??

Por que no intentas un TypeCast?

Código Delphi [-]
form2.Query7.SQL.add('select Cast(c.Curso_ID as ID, r.Nombre||'' ''||r.Referencia||'' ''||c.Costo as Varchar) as Nombre');
Responder Con Cita
  #7  
Antiguo 26-04-2012
GonzaloDias GonzaloDias is offline
Miembro
NULL
 
Registrado: ene 2012
Posts: 21
Poder: 0
GonzaloDias Va por buen camino
Ok, Gracias por la ayuda, me funciono bin de esa manera, pero el problema era que al llenar el combobox.items luego de realizar la consulta, al querer seleccionar desde el cmbbx :
edit1.text:=combobox.text,

no me traia nada, lo que supuse q no se cargaba fisicamente en la propiedad Items como se muestra sig:

Código Delphi [-]
form2.Query9.Close;
form2.Query9.SQL.Clear;
form2.Query9.SQL.Text:='select p.Plan_ID as pPID, p.ImporteMatricula as mat, p.CuotasCantidad as cuo, p.ImporteCuota as imp  from CursoPlan cp, Planes p  where cp.Curso ='+inttostr(Codigo)+'  and cp.PlanCod = p.Plan_ID';
form2.Query9.Open;

nombre1 := form2.Query9.FieldByName('pPID').AsString + '  Matricula: '+form2.Query9.FieldByName('mat').AsString + '  Cuotas: ' + form2.Query9.FieldByName('cuo').AsString+ '  Importe x Cuota: $' + form2.Query9.FieldByName('imp').AsString;

nombre1 := '';
While not form2.Query9.eof do
begin
   nombre1 := form2.Query9.FieldByName('pPID').AsString + '  Matricula: '+form2.Query9.FieldByName('mat').AsString + '  Cuotas: ' + form2.Query9.FieldByName('cuo').AsString+ '  Importe x Cuota: $' + form2.Query9.FieldByName('imp').AsString;
   combobox3.Items.Add(nombre1);
   form2.Query9.Next;
end;

POr lo cual necesitaba el campo pPID para luego guardarlo en otra tabla, con un DBlookupcombobox en la propiedad listfield viendo de utilizar GetText del campo que muestro. Gracias
Responder Con Cita
  #8  
Antiguo 26-04-2012
GonzaloDias GonzaloDias is offline
Miembro
NULL
 
Registrado: ene 2012
Posts: 21
Poder: 0
GonzaloDias Va por buen camino
Bien se me ocurrio de otra manera para no tener que realizar substring para sacar los valores numerico, pense en utilizar los itemindex del combobox y a la vez que se va cargando en combobox guardo en un vector el ID de la consulta , es decir la cantidad de items en cmbbx es igual a la de registros en el vector.
Gracias igualmente.
Responder Con Cita
  #9  
Antiguo 26-04-2012
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Cita:
Empezado por GonzaloDias Ver Mensaje
Bien se me ocurrio de otra manera para no tener que realizar substring para sacar los valores numerico, pense en utilizar los itemindex del combobox y a la vez que se va cargando en combobox guardo en un vector el ID de la consulta , es decir la cantidad de items en cmbbx es igual a la de registros en el vector.
Gracias igualmente.
Hola Gonzalo.

No entiendo, en el mensaje #4 ¿ No preguntabas por un DBLookupComboBox ?

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
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
Query con 3 tablas Vichomo SQL 29 02-08-2007 20:12:24
Query a Tablas Paradox pelaorb68 Conexión con bases de datos 0 13-01-2006 23:25:25
Como Auto Ajusta Columnas de tablas en Word? ronalg Servers 1 08-08-2005 12:16:33
ayuda con un query con resultados en columnas Torreblanca SQL 1 23-07-2005 06:24:25
columnas de distintas tablas jonmendi SQL 1 23-12-2004 10:33:21


La franja horaria es GMT +2. Ahora son las 06:05:10.


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