Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 13-11-2006
Avatar de magnu9
magnu9 magnu9 is offline
Miembro
 
Registrado: nov 2006
Posts: 84
Poder: 18
magnu9 Va por buen camino
Orden by con items de un Listbox!!

Saludo a todos, espero que se sientan todos bien, observen este caso...
tengo en mi form de reporte de clientes, dos listbox, uno en el cual guardo los items por el cual voy a reportar, el otro listbox,
el cual me resibe los items del listbox1, bueno eso de los botones para hacer ese traspaso lo he logrado hacer. Pero mi duda es
como pasar los items del listbox2 al sql para poder ordenar el reporte como lo indique el listbox2.
Este pequeño codigo es solo una muestra de como lo he intentado. Pero me ha sido en vano.
Fuera de lo que es lo del listbox, osea si utilizar los listbox, al qryCliente.Sql.Add, cuando les digo que me ordenes por codcli,
me lo ordena muy bien, pero si coloco nomcli para el orden no hace nada de orde.
Código Delphi [-]
procedure TrpCliente.btnAceptarClick(Sender: TObject);
begin
  
ListBox1.Items[0]:= 'cliente.codcli';
   
   try
   FreportCliente:=TFreportCliente.Create(self);
      if Ordenar.ItemIndex = 0 then begin
         FreportCliente.qryCliente.SQL.Add(' Select  codcli,nomcli,apelcli, dircli, telcli,cedcli, fecha, estado, codzon, facturacredito, balcli, direc_envio From cliente ');
         FreportCliente.qryCliente.SQL.Add(' WHERE cliente.codcli >='''+(edCodigo1.Text)+''' AND cliente.codcli <= '''+(edCodigo2.Text)+'''');
         FreportCliente.qryCliente.SQL.Add('OR (cliente.nomcli LIKE ''%'+edNombre1.Text+''' and cliente.nomcli LIKE ''%'+edNombre2.Text+''')');
         FreportCliente.qryCliente.SQL.Add(' ORDER BY '''+ListBox1.Items[0]+''' deSC');
      
      end
      else  begin
         FreportCliente.qryCliente.SQL.Add(' Select  codcli,nomcli,apelcli, dircli, telcli,cedcli, fecha, estado, codzon, facturacredito, balcli, direc_envio From cliente ');
         FreportCliente.qryCliente.SQL.Add(' WHERE cliente.codcli >='''+(edCodigo1.Text)+''' AND cliente.codcli <= '''+(edCodigo2.Text)+'''');
         FreportCliente.qryCliente.SQL.Add('OR cliente.nomcli='''+edNombre1.Text+''' and cliente.nomcli='''+edNombre2.Text+'''');
         FreportCliente.qryCliente.SQL.Add(' ORDER BY cliente.codcli desc');
      end;
         FreportCliente.qryCliente.Open;
    FreportCliente.Titulo.text := 'Reporte de Cliente';
    
          If Salida.ItemIndex = 0 then FreportCliente.QuickRep1.Preview
           else if Salida.ItemIndex= 1 then FreportCliente.QuickRep1.Print;
      finally
         FreportCliente.Free;
      end;
Espero me entiendan, de lo contrario si lo desean un poco mas detallado solo me escriben. Gracias de Antemano.
Responder Con Cita
  #2  
Antiguo 13-11-2006
oscarnoe oscarnoe is offline
Miembro
 
Registrado: jul 2006
Posts: 60
Poder: 18
oscarnoe Va por buen camino
Hola magnu9,

Cita:
Código Delphi [-]
 FreportCliente.qryCliente.SQL.Add(' ORDER BY '''+ListBox1.Items[0]+''' deSC');
creo que ese entrecomillado puede tener algo de culpa, no estas asignando un valor de texto, estas asignando un nombre de campo, no?

Espero que te sea de ayuda.

Oscar Noe.
__________________
No dejes camino viejo por sendero nuevo
Responder Con Cita
  #3  
Antiguo 13-11-2006
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola magnu9
Creo que es asi:
Código Delphi [-]
FreportCliente.qryCliente.SQL.Add(' ORDER BY DESC'''+ListBox1.Items[0]+''');
Por otro lado no entiendo muy bien lo que quieres hacer con los listbox.
Saludos
Responder Con Cita
  #4  
Antiguo 13-11-2006
Avatar de magnu9
magnu9 magnu9 is offline
Miembro
 
Registrado: nov 2006
Posts: 84
Poder: 18
magnu9 Va por buen camino
Caral dejame explicarte un poquito

Es algo que quiere mi tutor de Proyecto III, es que los reportes lleve consigo dos listbox en medio de ellos estos botones" >, <, >>, <<" los cuales me serviran para mudar los campos de un listbox a otro. Y que el contenido del Listbox2 sea por lo que se guie el reporte para ordenarse. Ahora experimentare lo que me dijeron.
Responder Con Cita
  #5  
Antiguo 13-11-2006
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola magnu9
La verdad no trabajo con listbox, ni nada parecido pero tengo entendido que los listbox tienen una propiedad que es copy, asi que puedes copiar de uno a otro, hay varias formas:
1- Puedes crear variables para los items que vas copiando de uno a otro, esto los mantiene en memoria hasta que se impriman.
2- Puedes crear una tabla temporal, pasar los items del listbox1 al 2 grabarlos en la tabla nueva y luego hacer lo que quieras con los datos, imprimirlos para luego borrarlos o mantenerlos con un numero o no se algo asi.
Saludos
Responder Con Cita
  #6  
Antiguo 13-11-2006
Avatar de magnu9
magnu9 magnu9 is offline
Miembro
 
Registrado: nov 2006
Posts: 84
Poder: 18
magnu9 Va por buen camino
Observa esto caral

Este codigo es lo que estoy utilizando para copiar de un listbox a otro...

Código Delphi [-]
procedure TrpCliente.btnEnviarClick(Sender: TObject);
begin
    if listbox1.ItemIndex>=0 then
  begin
    listbox2.Items.Add(listbox1.Items[listbox1.ItemIndex]);
    listbox1.Items.Delete(listbox1.ItemIndex);
  end;
END;
procedure TrpCliente.btnTraerClick(Sender: TObject);
begin
   if listbox2.ItemIndex>=0 then
   begin
    listbox1.Items.Add(listbox2.Items[listbox2.ItemIndex]);
    listbox2.Items.Delete(listbox2.ItemIndex);
   end;
end;
procedure TrpCliente.btnEnvTodClick(Sender: TObject);
var m:integer;
begin
   m:=listbox1.Items.Count;
 while m>=1 do
   begin
    listbox1.ItemIndex:=0;
    listbox2.Items.Add(listbox1.Items[listbox1.ItemIndex]);
    listbox1.Items.Delete(listbox1.ItemIndex);
    m:=m-1;
   end;
end;
procedure TrpCliente.btnTraerTodoClick(Sender: TObject);
var n:integer;
begin
  n:=listbox2.Items.Count;
 while n>=1 do
   begin
    listbox2.ItemIndex:=0;
    listbox1.Items.Add(listbox2.Items[listbox2.ItemIndex]);
    listbox2.Items.Delete(listbox2.ItemIndex);
    n:=n-1;
   end;
end;procedure TrpCliente.btnEnviarClick(Sender: TObject);
begin
    if listbox1.ItemIndex>=0 then
  begin
    listbox2.Items.Add(listbox1.Items[listbox1.ItemIndex]);
    listbox1.Items.Delete(listbox1.ItemIndex);
  end;
END;
procedure TrpCliente.btnTraerClick(Sender: TObject);
begin
   if listbox2.ItemIndex>=0 then
   begin
    listbox1.Items.Add(listbox2.Items[listbox2.ItemIndex]);
    listbox2.Items.Delete(listbox2.ItemIndex);
   end;
end;
procedure TrpCliente.btnEnvTodClick(Sender: TObject);
var m:integer;
begin
   m:=listbox1.Items.Count;
 while m>=1 do
   begin
    listbox1.ItemIndex:=0;
    listbox2.Items.Add(listbox1.Items[listbox1.ItemIndex]);
    listbox1.Items.Delete(listbox1.ItemIndex);
    m:=m-1;
   end;
end;
procedure TrpCliente.btnTraerTodoClick(Sender: TObject);
var n:integer;
begin
  n:=listbox2.Items.Count;
 while n>=1 do
   begin
    listbox2.ItemIndex:=0;
    listbox1.Items.Add(listbox2.Items[listbox2.ItemIndex]);
    listbox2.Items.Delete(listbox2.ItemIndex);
    n:=n-1;
   end;
end;
Responder Con Cita
  #7  
Antiguo 13-11-2006
Avatar de magnu9
magnu9 magnu9 is offline
Miembro
 
Registrado: nov 2006
Posts: 84
Poder: 18
magnu9 Va por buen camino
Perdon se copio dos veces el codigo..

Ahora si... observa.


Código Delphi [-]procedure TrpCliente.btnEnviarClick(Sender: TObject);
begin
if listbox1.ItemIndex>=0 then
begin
listbox2.Items.Add(listbox1.Items[listbox1.ItemIndex]);
listbox1.Items.Delete(listbox1.ItemIndex);
end;
END;
procedure TrpCliente.btnTraerClick(Sender: TObject);
begin
if listbox2.ItemIndex>=0 then
begin
listbox1.Items.Add(listbox2.Items[listbox2.ItemIndex]);
listbox2.Items.Delete(listbox2.ItemIndex);
end;
end;
procedure TrpCliente.btnEnvTodClick(Sender: TObject);
var m:integer;
begin
m:=listbox1.Items.Count;
while m>=1 do
begin
listbox1.ItemIndex:=0;
listbox2.Items.Add(listbox1.Items[listbox1.ItemIndex]);
listbox1.Items.Delete(listbox1.ItemIndex);
m:=m-1;
end;
end;
procedure TrpCliente.btnTraerTodoClick(Sender: TObject);
var n:integer;
begin
n:=listbox2.Items.Count;
while n>=1 do
begin
listbox2.ItemIndex:=0;
listbox1.Items.Add(listbox2.Items[listbox2.ItemIndex]);
listbox2.Items.Delete(listbox2.ItemIndex);
n:=n-1;
end;
end;
Responder Con Cita
  #8  
Antiguo 13-11-2006
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
No se me parece bien, cual es el problema.?
Saludos
Responder Con Cita
  #9  
Antiguo 13-11-2006
Avatar de magnu9
magnu9 magnu9 is offline
Miembro
 
Registrado: nov 2006
Posts: 84
Poder: 18
magnu9 Va por buen camino
No tengo problema en lo anterior...

Solo que me gustaria conocer esto,

1- Puedes crear variables para los items que vas copiando de uno a otro, esto los mantiene en memoria hasta que se impriman.
2- Puedes crear una tabla temporal, pasar los items del listbox1 al 2 grabarlos en la tabla nueva y luego hacer lo que quieras con los datos, imprimirlos para luego borrarlos o mantenerlos con un numero o no se algo asi.

bueno eso lo averiguare..

Y gracias pues ya pude conseguir que en de un campo ya estoy pasandoles un texto. Bueno ahora a intentar conseguir lo que quiero...
Asi lo consegui.

Código Delphi [-]
 if Ordenar.ItemIndex = 0 then begin
         FreportCliente.qryCliente.SQL.Add(' Select  codcli,nomcli,apelcli, dircli, telcli,cedcli, fecha, estado, codzon, facturacredito, balcli, direc_envio From cliente ');
         FreportCliente.qryCliente.SQL.Add(' WHERE cliente.codcli >='''+(edCodigo1.Text)+''' AND cliente.codcli <= '''+(edCodigo2.Text)+'''');
        // FreportCliente.qryCliente.SQL.Add('OR (cliente.nomcli LIKE ''%'+edNombre1.Text+''' and cliente.nomcli LIKE ''%'+edNombre2.Text+''')');
         FreportCliente.qryCliente.SQL.Add(' ORDER BY '+ListBox1.Items[0]+' deSC');
Responder Con Cita
  #10  
Antiguo 13-11-2006
luisgutierrezb luisgutierrezb is offline
Miembro
 
Registrado: oct 2005
Ubicación: México
Posts: 925
Poder: 19
luisgutierrezb Va por buen camino
a ver si entendi bien, quieres ordenar la consulta por los campos que vas a seleccionar o a tener en el listbox2, yo usaria algo asi como:

Código Delphi [-]
Var
  Orden:String;
  I:Integer;
Begin
  // instrucciones
  For I:=0 To Listbox2.Items.Count -1 Do
  Begin
    Orden := Orden + ListBox2.Items[i]
    If I < Listbox2.Items.Count -1 then
      Orden := Orden + ','
  End;
  //Instrucciones
  FreportCliente.qryCliente.SQL.Add(' ORDER BY '+Orden+' deSC');
Responder Con Cita
  #11  
Antiguo 14-11-2006
Avatar de magnu9
magnu9 magnu9 is offline
Miembro
 
Registrado: nov 2006
Posts: 84
Poder: 18
magnu9 Va por buen camino
Observen esto... a ver si me ayuda

Observen esto..
Código Delphi [-]
 FreportCliente.qryCliente.SQL.Add(' Select codcli,nomcli,apelcli, dircli, telcli,cedcli, fecha, estado, codzon, facturacredito, balcli, direc_envio From cliente ');


FreportCliente.qryCliente.SQL.Add(' WHERE cliente.codcli >='''+(edCodigo1.Text)+''' AND cliente.codcli <= '''+(edCodigo2.Text)+'''');


Osea si cambio a este codigo..... codcli es el codigo del cliente, nombre_cli nombre del cliente..

Código Delphi [-]
 FreportCliente.qryCliente.SQL.Add(' Select codcli,nomcli,apelcli, dircli, telcli,cedcli, fecha, estado, codzon, facturacredito, balcli, direc_envio From cliente ');
FreportCliente.qryCliente.SQL.Add(' WHERE cliente.NOMCLI >='''+(edNombre1.Text)+''' AND cliente.nombre_CLI <= '''+(edNombre2.Text)+'''');

con codcli todo bien, en cambio con nomcli nada.....

Nota: Con igual nombre si me hace el reporte.
Responder Con Cita
  #12  
Antiguo 18-11-2006
Avatar de magnu9
magnu9 magnu9 is offline
Miembro
 
Registrado: nov 2006
Posts: 84
Poder: 18
magnu9 Va por buen camino
Luego de afanar mucho... Pero con exito..

Solo me falta lo que son las fechas... ahhh y trato de buscarlos por sus balance pero me devuelve el error de "imposible conversion de tipo varchar a numerico"

Código Delphi [-]
procedure TrpCliente.btnAceptarClick(Sender: TObject);
//var orden: string;
 var m: integer;
begin
 m:= ListBox2.Items.Count;
  try
   FreportCliente:=TFreportCliente.Create(self);
      if Ordenar.ItemIndex = 0 then begin
         FreportCliente.qryCliente.SQL.Add(' Select  codcli,nomcli,apelcli, dircli, telcli,cedcli, fecha, estado, codzon, facturacredito, balcli, direc_envio From cliente ');
         FreportCliente.qryCliente.SQL.Add(' WHERE cliente.codcli >='''+(edCodigo1.Text)+''' AND cliente.codcli <= '''+(edCodigo2.Text)+'''');
       FreportCliente.qryCliente.SQL.Add('or (cliente.nomcli >='''+edNombre1.text+'%'' AND cliente.nomcli <= '''+edNombre2.text+'%'')');
      // FreportCliente.qryCliente.SQL.Add('or (cliente.balcli >='''+(edBalance1.Text)+'%'' AND cliente.balcli <='''+edBalance2.Text+'%'')');
 
         IF m=0 THEN
         FreportCliente.qryCliente.SQL.Add(' ORDER BY CODCLI DESC');
         IF m=1 THEN
         FreportCliente.qryCliente.SQL.Add(' ORDER BY '+ListBox2.Items[0]+'');
         IF m=2 THEN
         FreportCliente.qryCliente.SQL.Add(' ORDER BY '+ListBox2.Items[0]+','+ListBox2.Items[1]+'');
         IF m=3 THEN
         FreportCliente.qryCliente.SQL.Add(' ORDER BY '+ListBox2.Items[0]+','+ListBox2.Items[1]+','+ListBox2.Items[2]+'');
         IF m=4 THEN
         FreportCliente.qryCliente.SQL.Add(' ORDER BY '+ListBox2.Items[0]+','+ListBox2.Items[1]+','+ListBox2.Items[2]+','+ListBox2.Items[3]+'');
      end
Responder Con Cita
  #13  
Antiguo 18-11-2006
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
Sugerencia: añadir los "else" en las comparaciones if m=0 then ... else if m=1 then ..

Si m es igual a cero, después debe comprobar que m es distinto de 1,2,3 y 4 ya que no están anidados los "if". Si añades los "else", solo realizará una comprobación (m igual a cero) y después se salta los demás "else".

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #14  
Antiguo 20-11-2006
Guti13 Guti13 is offline
Miembro
 
Registrado: jun 2006
Posts: 35
Poder: 0
Guti13 Va por buen camino
Sugerencia

Magnu9 yo te recomendaría que hiciese lo siquiente que creo es mas claro y limpio en cuanto al código:

If listBox2.Items.Count>0 Then
Begin
Consulta.SQL.Add('Order by '+ListBox2.Items.CommaText)
End
Responder Con Cita
  #15  
Antiguo 20-11-2006
Avatar de fedelphi
fedelphi fedelphi is offline
Miembro
 
Registrado: abr 2006
Ubicación: Santa Fe
Posts: 122
Poder: 19
fedelphi Va por buen camino
hola magnu9, con que DB estas trabajando?
Responder Con Cita
  #16  
Antiguo 20-11-2006
Avatar de magnu9
magnu9 magnu9 is offline
Miembro
 
Registrado: nov 2006
Posts: 84
Poder: 18
magnu9 Va por buen camino
Saludo...

Bueno agregare los Else, me parece averlo intentado pero se me erreda un poquito, Guti lo tuyo tambien no cuesta nada inetentarlo, disculpa que en otras ocasiones tambien me lo recomendaron, lo q no intente porque estaba ensima de la entrega de una parte del sistema.gracias por sus sugerencias..
Ahora tengo un poquito de tiempo.

La base de datos por el momento es Sql Server 2000, pero me gustaria mas que nada Postgres. No es que no lo he intentado, solo que al principiono entendia bien ese tipo de base, pero a medida que estoy trabajando con sql server me doy cuenta que no es nada complicado.

A una pregunta porque Sql server no tiene tipo Boolean...

Gracias por sus ayuda.
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
seleccionar items en listbox fluckde Varios 2 05-09-2006 21:05:57
Listbox con items genericos ANG4L Varios 2 11-05-2006 03:54:37
Items Listview Trigger OOP 2 11-10-2004 21:05:02
ListBox Items Hint (MUY URGENTE !!!!) jymy788 Varios 2 17-09-2004 09:41:58
Componente de dos ListBox con items intercambiables Tomás OOP 6 07-05-2004 18:42:39


La franja horaria es GMT +2. Ahora son las 09:27:37.


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