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 05-10-2007
Avatar de enecumene
[enecumene] enecumene is offline
Miembro de Oro
 
Registrado: may 2006
Ubicación: Santo Domingo, Rep. Dom.
Posts: 3.040
Poder: 22
enecumene Va por buen camino
Una Ayudita consulta like y combobox

Hola de nuevo compañeros del foro tengo aqui una duda tal como dice el titulo, he aqui el codigo:

Código Delphi [-]
procedure TFConsPed.Edit1Change(Sender: TObject);
var
   Filtro : String;
begin
   If (Edit1.Text <> '') then
   begin
      ZPedido.Filtered := False;
      If Combobox1.Text = 'Pedido' then Filtro := 'no_ped Like ''' +Edit1.Text+ '*'''
         else If Combobox1.Text = 'Trámite' then Filtro := 'tramite_no Like '''  +Edit1.Text+   '*'''
            else If Combobox1.Text = 'Orden de Compra' then Filtro := 'oc_no_sigef Like '''  +Edit1.Text+   '*'''
               else If Combobox1.Text = 'Orden de Compra' then Filtro := 'oc_no_sigef1 Like '''  +Edit1.Text+   '*'''
                  else If Combobox1.Text = 'Orden de Compra' then Filtro := 'oc_no_sigef2 Like '''  +Edit1.Text+   '*'''
                     else If Combobox1.Text = 'Orden de Compra' then Filtro := 'oc_no_sigef3 Like '''  +Edit1.Text+   '*'''
                        else If Combobox1.Text = 'Carta Orden' then Filtro := 'co1 Like '''  +Edit1.Text+   '*'''
                           else If Combobox1.Text = 'Carta Orden' then Filtro := 'co2 Like '''  +Edit1.Text+   '*'''
                              else If Combobox1.Text = 'Carta Orden' then Filtro := 'co3 Like '''  +Edit1.Text+   '*'''
                                 else If Combobox1.Text = 'Carta Orden' then Filtro := 'co4 Like '''  +Edit1.Text+   '*'''
                                    else If Combobox1.Text = 'Status' then Filtro := 'status Like '''  +Edit1.Text+   '*''';
      ZPedido.Filter := Filtro;
      ZPedido.Filtered := True
   end
   else ZPedido.Filtered := False;
end;

el problema de eso es que si en el combobox selecciono Orden de Compra solo me busca en un solo campo ya que en la tabla existe cuatro campos para ordenes de compra, quisiera hacer que seleccionado en el combobox Orden de compra me busque en los cuatros campos existentes para ello. ojala me haya explicado bien sino diganmelo.

Saludos.
__________________

Mi BLOG - ¡Joder, leanse la guia de estilo!
Las Palabras son enanas, los ejemplos gigantes.
Responder Con Cita
  #2  
Antiguo 05-10-2007
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
No entiendo muy bien pero aqui va una idea, tal vez te guie.
Código Delphi [-]
procedure TFConsPed.Edit1Change(Sender: TObject);
var
   Filtro : String;
begin
   If (Edit1.Text <> '') then
   begin
      ZPedido.Filtered := False;
If Combobox1.Text = 'Pedido' then 
begin
Filtro := 'no_ped Like ''' +Edit1.Text+ '*'''
end
else If Combobox1.Text = 'Trámite' then
begin
Filtro := 'tramite_no Like '''  +Edit1.Text+   '*'''
end
else If Combobox1.Text = 'Orden de Compra' then 
begin
      Filtro := 'oc_no_sigef Like '''  +Edit1.Text+   '*'''
and Filtro := 'oc_no_sigef1 Like '''  +Edit1.Text+   '*'''
and Filtro := 'oc_no_sigef2 Like '''  +Edit1.Text+   '*'''
and Filtro := 'oc_no_sigef3 Like '''  +Edit1.Text+   '*'''
end
else If Combobox1.Text = 'Carta Orden' then 
begin
Filtro := 'co1 Like '''  +Edit1.Text+   '*'''
end
else If Combobox1.Text = 'Carta Orden' then 
begin
Filtro := 'co2 Like '''  +Edit1.Text+   '*'''
end
else If Combobox1.Text = 'Carta Orden' then 
begin
Filtro := 'co3 Like '''  +Edit1.Text+   '*'''
end
else If Combobox1.Text = 'Carta Orden' then 
begin
Filtro := 'co4 Like '''  +Edit1.Text+   '*'''
end
else If Combobox1.Text = 'Status' then 
begin
Filtro := 'status Like '''  +Edit1.Text+   '*'''
end
end;
      ZPedido.Filter := Filtro;
      ZPedido.Filtered := True
   end
   else ZPedido.Filtered := False;
end;
Saludos
Responder Con Cita
  #3  
Antiguo 06-10-2007
Avatar de enecumene
[enecumene] enecumene is offline
Miembro de Oro
 
Registrado: may 2006
Ubicación: Santo Domingo, Rep. Dom.
Posts: 3.040
Poder: 22
enecumene Va por buen camino
Vale Caral, mira gracias por la molestia, pero ni me funciono. seguire buscando a ver si encuantro algo parecido, Gracias.

Saludos.
__________________

Mi BLOG - ¡Joder, leanse la guia de estilo!
Las Palabras son enanas, los ejemplos gigantes.
Responder Con Cita
  #4  
Antiguo 06-10-2007
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 25
Delphius Va camino a la fama
Hola enecumene,

¿Tal vez asi?

Código Delphi [-]
procedure TForm1.Edit1Change(Sender: TObject);
var Filtro: string;
begin
 Filtro := '';
 if (Edit1.Text <> '')
    then begin
           Table1.Filtered := False;
           if ComboBox1.Text = 'Pedido'
              then Filtro := 'no_ped Like ''' +Edit1.Text+ '*''';
           if ComboBox1.Text = 'Trámite'
              then Filtro := 'tramite_no Like ''' +Edit1.Text+ '*''';
           if ComboBox1.Text = 'Orden de Compra'
              then begin
                     // si la condicion a buscar en varios campos
                     // debe cumplirse en todos poner AND
                     // yo asumí que deben ser OR
                     Filtro := 'oc_no_sigef1 Like ''' +Edit1.Text+ '*'' OR';
                     Filtro := Filtro + 'oc_no_sigef2 Like ''' +Edit1.Text+ '*'' OR';
                     Filtro := Filtro + 'oc_no_sigef3 Like ''' +Edit1.Text+ '*''';
                   end;
           if ComboBox1.Text = 'Carta Orden'
              then begin
                     Filtro := 'co1 Like '''  +Edit1.Text+   '*'' OR';
                     Filtro := Filtro + 'co2 Like '''  +Edit1.Text+   '*'' OR';
                     Filtro := Filtro + 'co3 Like '''  +Edit1.Text+   '*'' OR';
                     Filtro := Filtro + 'co4 Like '''  +Edit1.Text+   '*''';
                   end;
           if ComboBox1.Text = 'Status'
              then Filtro := 'status Like '''  +Edit1.Text+   '*''';
           Table1.Filter := Filtro;
           Table1.Filtered := true;
         end
    else Table1.Filtered := False;
end;

Si no te molesta... tengo algunas dudas con respecto a esta forma de anidar varios IF. Por lo menos a mi me resulta un poco molesto estar haciendo tantos anidamientos. Si se que la condición siempre se va a cumplir en algunos de ellos directamente pregunto por la parte verdadera (THEN)... total... no importa que siga evaluando, de cualquier manera en un IF entra y se cumple. Esto me evita a mi el molestoso "escalonado".

Por otro lado, el Filter está hecho para condiciones simples. Y Encadenar varias condiciones en el (como las del tipo Orden Compra) es forzar demasiado al componente.

Yo, en tu caso consideraría el uso de Querys. Por que:
1. Puedes de entrada traer solo lo necesario y te evitas cargar en memoria toda la tabla (algo que hace el TTable).
2. El uso de Query es más rápido.
3. Puedes hacer consultas de muy variadas formas. es más flexible que el TTable.

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]

Última edición por Delphius fecha: 06-10-2007 a las 04:43:21.
Responder Con Cita
  #5  
Antiguo 06-10-2007
Avatar de enecumene
[enecumene] enecumene is offline
Miembro de Oro
 
Registrado: may 2006
Ubicación: Santo Domingo, Rep. Dom.
Posts: 3.040
Poder: 22
enecumene Va por buen camino
Error:

Cita:
---------------------------
Debugger Exception Notification
---------------------------
Project Sigesped.exe raised exception class TZParseError with message 'Syntax error near "ORoc_no_sigef2"'. Process stopped. Use Step or Run to continue.
---------------------------
OK Help
---------------------------
Cita:
empezado por Delphius
Yo, en tu caso consideraría el uso de Querys. Por que:
1. Puedes de entrada traer solo lo necesario y te evitas cargar en memoria toda la tabla (algo que hace el TTable).
2. El uso de Query es más rápido.
3. Puedes hacer consultas de muy variadas formas. es más flexible que el TTable.
Sabes? no lo habia pensado antes el uso de querys hare un par de intentos a ver que me sale, luego te comento, gracias por tu ayuda.

Saludos.
__________________

Mi BLOG - ¡Joder, leanse la guia de estilo!
Las Palabras son enanas, los ejemplos gigantes.
Responder Con Cita
  #6  
Antiguo 06-10-2007
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 25
Delphius Va camino a la fama
¿En que línea te salta error?
No estoy seguro de donde está el error... No manejo los componentes Zeos... bueno, creo que usas Zeos... porque veo ZPedidos y un TZParseError.

Puede que a pesar de no usar Zeos logre ver una solución.
Saludos,

EDITO: Vi que el código tenía unos errores menores... ¿será por eso? Modifique un poco el código... fijate si te sirve.
__________________
Delphius
[Guia de estilo][Buscar]

Última edición por Delphius fecha: 06-10-2007 a las 04:44:48. Razón: MODIFIQUE EL CODIGO ANTERIOR!
Responder Con Cita
  #7  
Antiguo 06-10-2007
Avatar de enecumene
[enecumene] enecumene is offline
Miembro de Oro
 
Registrado: may 2006
Ubicación: Santo Domingo, Rep. Dom.
Posts: 3.040
Poder: 22
enecumene Va por buen camino
El error me sale al momento de digitar:

Cita:
'Syntax error near "ORoc_no_sigef2"'
y el error es que me esta poniendo el OR delante del campo "ORoc_no_sigef2".

Saludos.
__________________

Mi BLOG - ¡Joder, leanse la guia de estilo!
Las Palabras son enanas, los ejemplos gigantes.
Responder Con Cita
  #8  
Antiguo 06-10-2007
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 25
Delphius Va camino a la fama
Enecumene, modifique el código! Noté que tenía errores menores... no se habrá sido eso.
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #9  
Antiguo 06-10-2007
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 25
Delphius Va camino a la fama
Ummm creo saber... ¡despues de cada OR debe ir un espacio! ¡que tonto soy! Es decir que el problema está en que el filter debebría quedar así:

Código:
algo LIKE algun_contenido* OR algo LIKE algun_otro_contenido* ...
pero queda asi:
Código:
...algun_contenido* ORalgo LIKE ...
Prueba añadiendo espacio a cada OR.

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #10  
Antiguo 06-10-2007
Avatar de enecumene
[enecumene] enecumene is offline
Miembro de Oro
 
Registrado: may 2006
Ubicación: Santo Domingo, Rep. Dom.
Posts: 3.040
Poder: 22
enecumene Va por buen camino
Hola Delphius los errores menores lo habia corregido pero aun asi el error me sigue saliendo.

Saludos
__________________

Mi BLOG - ¡Joder, leanse la guia de estilo!
Las Palabras son enanas, los ejemplos gigantes.
Responder Con Cita
  #11  
Antiguo 06-10-2007
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 25
Delphius Va camino a la fama
Pues no te sabria decir... a juzgar por lo que dice el error... pareciera ser que se debe al concatenamiento. Puede que exista algun ' de más y/o que le falte. un showmessage del filtro puede que ayude... usar quotestr() es recomendable para evitar lios como estos.

Debido a la hora que es (0:21 am) no estoy con todas las pilas y se me hace dificil razonar demasiado... lamento no poder ayudarte mucho.

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]

Última edición por Delphius fecha: 06-10-2007 a las 05:23:34.
Responder Con Cita
  #12  
Antiguo 06-10-2007
Avatar de enecumene
[enecumene] enecumene is offline
Miembro de Oro
 
Registrado: may 2006
Ubicación: Santo Domingo, Rep. Dom.
Posts: 3.040
Poder: 22
enecumene Va por buen camino
Delphius, Al contrario, yo agradezco muchissimo que uses tu tiempo para poder ayudarme, estamos en las mismas, estoy casi durmiendome, tu ayuda vale mucho para mi aunque no se haya resuelto el asunto pues te aseguro que tu esfuerzo no fue en vano.

Yo hare un ultimo intento, tratare de hacerlo con querys como ya me habias comentado anteriormente, bueno, sin mas por el momento que pases buenas noches y que dios te acompañe.

Saludos.
__________________

Mi BLOG - ¡Joder, leanse la guia de estilo!
Las Palabras son enanas, los ejemplos gigantes.
Responder Con Cita
  #13  
Antiguo 06-10-2007
Avatar de eduarcol
[eduarcol] eduarcol is offline
Miembro Premium
 
Registrado: ago 2003
Ubicación: En los estados Zulia y Merida de Venezuela
Posts: 4.151
Poder: 25
eduarcol Va por buen camino
A ver tu dices que si le das un espacio a cada OR te sigue saliendo el error??
quedaria algo asi

Código Delphi [-]
procedure TForm1.Edit1Change(Sender: TObject);
var Filtro: string;
begin
 Filtro := '';
 if (Edit1.Text <> '')
    then begin
           Table1.Filtered := False;
           if ComboBox1.Text = 'Pedido'
              then Filtro := 'no_ped Like ''' +Edit1.Text+ '*''';
           if ComboBox1.Text = 'Trámite'
              then Filtro := 'tramite_no Like ''' +Edit1.Text+ '*''';
           if ComboBox1.Text = 'Orden de Compra'
              then begin
                     // si la condicion a buscar en varios campos
                     // debe cumplirse en todos poner AND
                     // yo asumí que deben ser OR
                     Filtro := 'oc_no_sigef1 Like ''' +Edit1.Text+ '*'' OR ';
                     Filtro := Filtro + 'oc_no_sigef2 Like ''' +Edit1.Text+ '*'' OR ';
                     Filtro := Filtro + 'oc_no_sigef3 Like ''' +Edit1.Text+ '*''';
                   end;
           if ComboBox1.Text = 'Carta Orden'
              then begin
                     Filtro := 'co1 Like '''  +Edit1.Text+   '*'' OR ';
                     Filtro := Filtro + 'co2 Like '''  +Edit1.Text+   '*'' OR ';
                     Filtro := Filtro + 'co3 Like '''  +Edit1.Text+   '*'' OR ';
                     Filtro := Filtro + 'co4 Like '''  +Edit1.Text+   '*''';
                   end;
           if ComboBox1.Text = 'Status'
              then Filtro := 'status Like '''  +Edit1.Text+   '*''';
           Table1.Filter := Filtro;
           Table1.Filtered := true;
         end
    else Table1.Filtered := False;

fijate que despues de los OR y antes de la comilla simple hay un espacio en blanco
__________________
...Yo naci en esta ribera del arauca vibr@d0r
Soy hermano de la espuma,
de la garza, de la rosa y del sol...
Viva Venezuela
Responder Con Cita
  #14  
Antiguo 06-10-2007
Avatar de enecumene
[enecumene] enecumene is offline
Miembro de Oro
 
Registrado: may 2006
Ubicación: Santo Domingo, Rep. Dom.
Posts: 3.040
Poder: 22
enecumene Va por buen camino
Hey Excelente Eduarcol, Ahora si Funciona, muchas gracias a ti, Delphius, y a Caral tambien, ahora me funciona de pelos, de NUevo Gracias.

Saludos.
__________________

Mi BLOG - ¡Joder, leanse la guia de estilo!
Las Palabras son enanas, los ejemplos gigantes.
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
Genero comboBox en dbgrid y cuando hago dos veces click desaparece el comboBox. mcalmanovici Varios 1 29-02-2012 15:09:15
Cómo colocar el resultado de una consulta en un ComboBox??? gusanita Varios 8 16-05-2008 00:58:50
Agregar items a un comboBox desde una consulta de MYSQL Juan Carlos Conexión con bases de datos 3 29-05-2004 22:49:09
Quiero saber como agregar una consulta de SQL a un combobox Julio César Varios 4 15-01-2004 13:47:44


La franja horaria es GMT +2. Ahora son las 02:57:26.


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