Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   Novato (Parametros de busqueda) (https://www.clubdelphi.com/foros/showthread.php?t=32289)

enecumene 01-06-2006 17:59:53

Novato (Parametros de busqueda)
 
tengo un boton que al presionar sale una ventana de busqueda, aqui os dejo el codigo:
Código Delphi [-]
procedure TForm3.BitBtn1Click(Sender: TObject);
begin
  // Muestra el diálogo de consultas
  dlgBuscar.ShowModal;
  if dlgBuscar.ModalResult = mrOK then begin
      qryConsulta.Close;
      qryConsulta.ParamByName('Casa_Comercial').AsString :=
          dlgBuscar.BuscarEdt.Text+'%';
      qryConsulta.Open;
      if qryConsulta.EOF then
         ShowMessage('No se encontró!');
  end;
end;
yo quiero saber como puedo ampliar los parametros, o sea, que no busque solamente por casa_comercial, sino tambien orden_compra, carta_orden y asi sucesivamente, pero me gustaria que me presentara todos las coincidencias en una grilla aunque en un campo este repetido.

gracias!!!!

vtdeleon 01-06-2006 18:19:19

Saludos

Pare hacer eso debes modificar la sentencia sql e indicarle por cual campo buscar.
Código Delphi [-]
procedure TForm3.BitBtn1Click(Sender: TObject);
var
  campo:String
begin
  Campo:='Carta_orde';//O cualquier otro campo
// Muestra el diálogo de consultas
dlgBuscar.ShowModal;
if dlgBuscar.ModalResult = mrOK then begin
qryConsulta.Close;
qryConsulta.Sql.Text:='Select * from tabla where '+campo+'=:busqueda';
qryConsulta.ParamByName('busqueda').AsString :=
dlgBuscar.BuscarEdt.Text+'%';
qryConsulta.Open;
Donde campo es una variable string que indica el campo que deseas buscar

enecumene 01-06-2006 18:50:13

o sea que para que el edit busque no solamente un solo campo sino varias hago lo siguiente:

procedure TForm3.BitBtn1Click(Sender: TObject);
var
campo:String
carta:String
Valor:Currency
begin
Campo:='Carta_orden';//O cualquier otro campo
carta:='Casa_Comercial';
Valor:='Valor_orden';
// Muestra el diálogo de consultas
dlgBuscar.ShowModal;
if dlgBuscar.ModalResult = mrOK then begin
qryConsulta.Close;
qryConsulta.Sql.Text:='Select * from tabla where '+campo+' "" '+carta+' "" '+Valor+'=:busqueda';
qryConsulta.ParamByName('busqueda').AsString :=
dlgBuscar.BuscarEdt.Text+'%';
qryConsulta.Open;
end;
end;

es correcto? o que es lo que esta mal?? recuerda que quiero que busque varios campos de una tabla y no una sola como mostre en el codigo anterior.

gracias!!!!

Lepe 01-06-2006 20:20:16

Si vas a buscar por muchos parámetros, yo construiría varias funciones para no complicar mucho el código:


Código Delphi [-]

procedure SqlPrincipal;
begin

query1.Sql.Text := 'Select * from tabla WHERE '+ 
                          casa_comercial;
end;

function casa_comercial:string;
var tmp:string;
begin
 if editcasaComercial.text = EmptyStr then
    result := emptyStr ; // devolvemos una cadena vacia
 else
   result := ' casa_comercial = ' + quotedStr(editcasaComercial.text);

  tmp := orden_compra;
  if tmp <> emptystr then
    result := result + ' and ' + tmp;
 // concatenamos con AND, OR, o lo que haga falta las diferentes condiciones

 tmp := carta_orden;
  if tmp <> emptystr then
    result := result + ' and ' + tmp;
 // concatenamos con AND, OR, o lo que haga falta las diferentes condiciones
  
end;
    
end;

function orden_compra:
begin
  if editOrdenCompra.text = emptystr then
    result := emptystr
  else
    result := ' orden_compra = '+ quotedStr(editOrdencompra.Text);
end;


function carta_orden:
begin
  if editCartaOrden.text = emptystr then
    result := emptystr
  else
    result := ' carta_orden = '+ quotedStr(editCartaOrden.Text);
end;

Vamos el famoso "divide y vencerás". Cada función se encarga de una pequeña parte (cada condición) y despues devuelve el string con el SQL que corresponde con esa condición.

En este caso es mejor no usar parámetros (parambyname), los parámetros no aportará mejora alguna, porque de una ejecución a otra varía la SQL y con ello el número de parámetros.

Antes de hacer un Query1.Open, haz un Memo1.Lines.Add(query1.Sql.Text) para ver que toda la SQL está correcta, los apostrofes, las uniones con "and" y "or", los espacios en blanco, etc. Así no te mareas mucho ;)

Saludos.

vtdeleon 02-06-2006 00:03:18

Cita:

Empezado por enecumene
...recuerda que quiero que busque varios campos de una tabla y no una sola como mostre en el codigo anterior.

Ah bueno, ya Lepe ha resuelto

enecumene, trata de usar las etiquetas [delphi] [/delphl] para los codigos, no ves la diferencia entre mi codigo y el tuyo


La franja horaria es GMT +2. Ahora son las 10:09:00.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi