Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Firebird e Interbase
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 18-05-2011
inad20 inad20 is offline
Registrado
 
Registrado: feb 2008
Posts: 5
Poder: 0
inad20 Va por buen camino
Ayuda consulta de busqueda en lista

que tal a todos espero y me puedan ayudar ya no encuentro la salida.
lo que quiero hacer es que de los datos de un ListBox enviarlos como parametro a un ibquery y que me muestro esos datos en un DBGrid les muestro como lo ago.

Código SQL [-]
SELECT D.DOCTO_CC_ID,D.FOLIO, 
       D.NATURALEZA_CONCEPTO, 
       D.CONCEPTO_CC_ID, 
       D.FECHA, C.NOMBRE  Cliente, 
       D.CLIENTE_ID,
       R.CALLE, 
       R.TELEFONO1, 
       P.NOMBRE NOMBRE_Condiciones, 
       V.FECHA_VENCIMIENTO, 
       CIUDADES_1.NOMBRE NOMBRE_Ciudad, 
       T.NOMBRE_ABREV estado, 
       L.DIAS_PLAZO,
       S.SALDO_CARGO
FROM DOCTOS_CC D
      INNER JOIN CLIENTES C ON 
     (C.CLIENTE_ID = D.CLIENTE_ID)
      INNER JOIN DIRS_CLIENTES R ON 
     (R.CLIENTE_ID = C.CLIENTE_ID)
      INNER JOIN CONDICIONES_PAGO P ON 
     (P.COND_PAGO_ID = C.COND_PAGO_ID)
      LEFT OUTER JOIN VENCIMIENTOS_CARGOS_CC V ON 
     (V.DOCTO_CC_ID = D.DOCTO_CC_ID)
      INNER JOIN CIUDADES CIUDADES_1 ON 
     (CIUDADES_1.CIUDAD_ID = R.CIUDAD_ID)
      INNER JOIN ESTADOS T ON 
     (T.ESTADO_ID = CIUDADES_1.ESTADO_ID)
      INNER JOIN PLAZOS_COND_PAG L ON 
     (L.COND_PAGO_ID = P.COND_PAGO_ID)
left outer join SALDO_CARGO_CC_S ( D.DOCTO_CC_ID,D.FECHA,0,'N') s
on(D.docto_cc_id=cargo_id)
WHERE ( D.CONCEPTO_CC_ID = 4 )
       and (s.saldo_cargo<>0)        and 
( D.clave_cliente in ((:cliente)))

y asi paso el parametro
Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
 begin
ibquery1.Close;
IBQuery1.Prepare;
IBTransaction1.Active:=true;
IBQuery1.ParamByName('cliente').AsString:=listbox1.Items.DelimitedText;
IBQuery1.open;

end;

cuando solo pongo 1 dato me lo da sin ningun problema pero si pongo mas de 1 ya no me mesta nada agradesco de de ya cualquier ayuda que me puedan dar gracias.
Responder Con Cita
  #2  
Antiguo 18-05-2011
Avatar de Caro
*Caro* Caro is offline
Moderadora
 
Registrado: jul 2004
Ubicación: Cochabamba, Bolivia
Posts: 2.544
Poder: 22
Caro Va por buen camino
Hola inad20, un paréntesis esta demas:

esto tienes

Código SQL [-]
( D.clave_cliente in ((:cliente)))

debería ser así:

Código SQL [-]
......................
( D.clave_cliente in (:cliente))
.........................

Saluditos
__________________
Disfruten cada minuto de su vida a lado de sus seres queridos como si fuese el ultimo, uno nunca sabe lo que puede pasar.
Responder Con Cita
  #3  
Antiguo 18-05-2011
inad20 inad20 is offline
Registrado
 
Registrado: feb 2008
Posts: 5
Poder: 0
inad20 Va por buen camino
Smile

Cita:
Empezado por Caro Ver Mensaje
Hola inad20, un paréntesis esta demas:

esto tienes

Código SQL [-]( D.clave_cliente in ((:cliente)))


debería ser así:

Código SQL [-]...................... ( D.clave_cliente in (:cliente)) .........................


Saluditos

Gracias por contestar Caro ya hice lo que me comentas en si lo tenia haci pero por lo que no me sale lo cambie y se me paso dejarlo como estaba pero ya hice el cambio de nuevo y sigue sin funcionar solo sirve cuando es un solo dato. gracias

saludos
Responder Con Cita
  #4  
Antiguo 19-05-2011
Avatar de Caro
*Caro* Caro is offline
Moderadora
 
Registrado: jul 2004
Ubicación: Cochabamba, Bolivia
Posts: 2.544
Poder: 22
Caro Va por buen camino
Hola inad20, acabo de hacer la prueba y tampoco me funciona con parametros, has la prueba de pasar directamente los datos del in a tu consulta.

Código SQL [-]
....................................
IBQuery1.SQL.Text := 'SELECT D.DOCTO_CC_ID,D.FOLIO,................ '+
     '.....................................................................................'+
     'left outer join SALDO_CARGO_CC_S ( D.DOCTO_CC_ID,D.FECHA,0,'N') s '+
     'on(D.docto_cc_id=cargo_id) '+
     'WHERE ( D.CONCEPTO_CC_ID = 4 ) and (s.saldo_cargo<>0) and '+
     '(D.clave_cliente in ('+ListBox.Items.CommaText+'))';
....................................

Saluditos
__________________
Disfruten cada minuto de su vida a lado de sus seres queridos como si fuese el ultimo, uno nunca sabe lo que puede pasar.
Responder Con Cita
  #5  
Antiguo 19-05-2011
Avatar de guillotmarc
guillotmarc guillotmarc is offline
Miembro
 
Registrado: may 2003
Ubicación: Huelva
Posts: 2.638
Poder: 24
guillotmarc Va por buen camino
Hola.

Cita:
Empezado por Caro Ver Mensaje
Hola inad20, acabo de hacer la prueba y tampoco me funciona con parametros, haz la prueba de pasar directamente los datos del in a tu consulta.
Totalmente de acuerdo, va a tener que construir manualmente la sentencia SQL, puesto que en un solo parámetro no puedes pasar (hasta donde yo sé) directamente varios valores que la sentencia pueda utilizar con el operador IN (puesto que una vez pasado el parámetro, todos esos valores quedarán como una única cadena para la consulta SQL).

Saludos.
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no).
Responder Con Cita
  #6  
Antiguo 19-05-2011
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 29
Lepe Va por buen camino
hace años hice estas rutinas que aún tiro de ellas:
Código Delphi [-]
uses      CheckLst, // marcarchklb
     Classes // QuotedList
;
// y puede que haga falta alguno mas.


// devuelve los items de la siguiente forma : 'aaaa','bbbbb','ccc'
function QuotedList( Items: TStrings):string;
function QuotedListChklb( ctrl:TCheckListBox;const SoloChecked:Boolean = True):string;

....

function QuotedListchklb( ctrl:TCheckListBox;const SoloChecked:Boolean = True):string;
var i:integer;
begin
    result := '';
    with ctrl do
    
    for i:= 0 to Items.Count-1 do
      if SoloChecked then
      begin
        if Checked[i] then
          Result := Result +QuotedStr(Items[i])+',';
      end
      else
        Result := Result +QuotedStr(Items[i])+',';

  if Length(Result)>0 then
    Delete(Result,Length(Result),1); //quito la ultima coma

end;


function QuotedList( Items: TStrings):string;
var i:integer;
begin
    result := '';
    for i:= 0 to Items.Count-2 do
      Result := Result +QuotedStr(Items[i])+',';
    if Items.count > 0 then
      Result := Result + quotedstr(Items[Items.count-1]);
end;

Yo quitaría el parámetro y concatenaría con la salida de quotedList, algo así:
Código Delphi [-]
IBQuery1.SQL.Text := 'SELECT D.DOCTO_CC_ID,D.FOLIO,................ '+
     '.....................................................................................'+
     'left outer join SALDO_CARGO_CC_S ( D.DOCTO_CC_ID,D.FECHA,0,'N') s '+
     'on(D.docto_cc_id=cargo_id) '+
     'WHERE ( D.CONCEPTO_CC_ID = 4 ) and (s.saldo_cargo<>0) and '+
     '(D.clave_cliente in ('+QuotedList(ListBox.Items)+'))';

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #7  
Antiguo 19-05-2011
inad20 inad20 is offline
Registrado
 
Registrado: feb 2008
Posts: 5
Poder: 0
inad20 Va por buen camino
muchas gracias a todos por responder enseguida reviso y les comento como me fue.
Responder Con Cita
  #8  
Antiguo 20-05-2011
inad20 inad20 is offline
Registrado
 
Registrado: feb 2008
Posts: 5
Poder: 0
inad20 Va por buen camino
Cita:
Empezado por Lepe Ver Mensaje
hace años hice estas rutinas que aún tiro de ellas:
Código Delphi [-]uses CheckLst, // marcarchklb Classes // QuotedList ; // y puede que haga falta alguno mas. // devuelve los items de la siguiente forma : 'aaaa','bbbbb','ccc' function QuotedList( Items: TStrings):string; function QuotedListChklb( ctrl:TCheckListBox;const SoloChecked:Boolean = True):string; .... function QuotedListchklb( ctrl:TCheckListBox;const SoloChecked:Boolean = True):string; var i:integer; begin result := ''; with ctrl do for i:= 0 to Items.Count-1 do if SoloChecked then begin if Checked[i] then Result := Result +QuotedStr(Items[i])+','; end else Result := Result +QuotedStr(Items[i])+','; if Length(Result)>0 then Delete(Result,Length(Result),1); //quito la ultima coma end; function QuotedList( Items: TStrings):string; var i:integer; begin result := ''; for i:= 0 to Items.Count-2 do Result := Result +QuotedStr(Items[i])+','; if Items.count > 0 then Result := Result + quotedstr(Items[Items.count-1]); end;


Yo quitaría el parámetro y concatenaría con la salida de quotedList, algo así:
Código Delphi [-]IBQuery1.SQL.Text := 'SELECT D.DOCTO_CC_ID,D.FOLIO,................ '+ '.....................................................................................'+ 'left outer join SALDO_CARGO_CC_S ( D.DOCTO_CC_ID,D.FECHA,0,'N') s '+ 'on(D.docto_cc_id=cargo_id) '+ 'WHERE ( D.CONCEPTO_CC_ID = 4 ) and (s.saldo_cargo<>0) and '+ '(D.clave_cliente in ('+QuotedList(ListBox.Items)+'))';


Saludos
que tal Lepe Gracias por tu respuesta pero no entiendo muy bien como implementar tu rutina no se si me puedes prestar tu ayuda desde ya muchas gracias.
saludos
Responder Con Cita
  #9  
Antiguo 20-05-2011
Delfino Delfino is offline
Miembro
 
Registrado: jul 2003
Ubicación: Madrid
Posts: 974
Poder: 21
Delfino Va por buen camino
Cita:
Empezado por inad20 Ver Mensaje
cuando solo pongo 1 dato me lo da sin ningun problema pero si pongo mas de 1 ya no me mesta nada agradesco de de ya cualquier ayuda que me puedan dar gracias.
Esto no se puede hacer y la explicacion esta aqui ..
__________________
¿Microsoft? No, gracias..
Responder Con Cita
  #10  
Antiguo 22-05-2011
inad20 inad20 is offline
Registrado
 
Registrado: feb 2008
Posts: 5
Poder: 0
inad20 Va por buen camino
resuleto

muchas gracias a todos por sus respuestas e interes ya quedo con la ayuda de Caro y Lepe muchas gracias y si se puede hacer. tema resuleto
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
Busqueda de punto 3D (x,y,z) en una lista de puntos JF Sebastian OOP 4 29-12-2008 12:58:55
consulta para busqueda mikylin SQL 2 14-12-2007 13:43:37
consulta sobre busqueda... fergape Varios 5 02-06-2006 16:02:45
Consulta Busqueda Incremental Gustavo Gowdak SQL 1 13-12-2004 09:27:08
Como agregar a una lista los nombres de los campos de una consulta. Luis Conexión con bases de datos 2 11-11-2004 21:55:56


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


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