Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   realizar una consulta por fecha o numerodefactura o importegasto (https://www.clubdelphi.com/foros/showthread.php?t=35491)

Goyo 12-09-2006 16:35:39

realizar una consulta por fecha o numerodefactura o importegasto
 
hola amigos una vez mas molestando.... como puedo realizar una consulta, tengo una tabla llamada bitacoravehiculos y en ella quiero realizar una busqueda: ya sea por el campo fecha o numerodefactura o importe.

tengo un formulario con un dbgrid (con solo estos tres campos) y tres edit1,edit,edit3, lo que deseo es que si quiero buscar por fecha, me tome el primer edit1 y los demas los omita, si quiero buscar por numerodefactura tome el edit2 y con el edit3 si deseo buscar por importe, osea que la busqueda sea con alguna de estos campos y no forzosamente dos o tres solo un campo.

les agradecere su ayuda....

vtdeleon 12-09-2006 16:52:57

Saludos

Que Base de datos utilizas?

Con Firebird podrias usar Containing sin mayores problemas. Si una de sus variables está vacia, la omite.

Código SQL [-]
Select * from tabla 
where campo1 containing :edit1 and campo2 containing :edit2 and campo3 containign :edit3

Otra forma, olvidando qué base de datos se utilice. Puede ser con condiciones, evaluando cual de esos edit se desea poner en condicion y despues agregarlo a la sentencia.

No se como haces para seleccionar cuál edit debe ser tomado encuenta. Yo tomare que es por tener algun valor en su propiedad Text.
Código Delphi [-]
var
  Sentencia:String;
Begin
  Sentencia:='Select * from tabla';
  if edit1.Text<>'' then
    Sentencia:=Sentencia+ ' campo1='+ QuotedStr(edit1.text)//Suponiendo que este campo toma Valores String
  else   if edit2.Text<>'' then
    Sentencia:=Sentencia+ ' campo1='+ QuotedStr(edit2.text)
  else   if edit3.Text<>'' then
    Sentencia:=Sentencia+ ' campo1='+ QuotedStr(edit3.text);
  Dataset.Sql.Text:=Sentencia;

Goyo 12-09-2006 17:31:53

ya lo hice como me indicaste, solo que no me muestra nada, todo el codigo lo pongo en un SpeedButton1, la base de datos es una de Paradox, el edit1.text hace referencia al campo fechadeservicio (tipo Date), el edit2.text hace referencia a un campo tipo entero (numerofactura) y el edit3.text hace referencia a un dato tipo moneda ($), lo hice de la siguiente manera:

Código Delphi [-]
procedure TFrmBuscarVehiculo.SpeedButton1Click(Sender: TObject);
 var consulta : string;
begin
  consulta:='Select * from BitacoraVehiculos';
  if edit1.Text<>'' then
     consulta:=consulta+ ' fechadeservicio='+ QuotedStr(edit1.text)//Suponiendo que este campo toma Valores String
     else   if edit2.Text<>'' then
               consulta:=consulta+ ' numerofactura='+ QuotedStr(edit2.text)
     else   if edit3.Text<>'' then
               consulta:=consulta+ ' importe='+ QuotedStr(edit3.text);
     query1.SQL.Text:=consulta;
     query1.ExecSQL;
 end;

para que se ejecute la consulta debo pulsar el boton de busqueda, el query1 lo puse en el formulario de busqueda.., osea que este formulario (FrmBusquedas) lo llamo desde otro formulario llamado (FrmBitacora) y dentro de este formulario tengo un dbgri1 con todos los registros...

de antemano muchas gracias...

vtdeleon 12-09-2006 17:44:52

Saludos

Prueba
Código Delphi [-]
procedure TFrmBuscarVehiculo.SpeedButton1Click(Sender: TObject);
 var consulta : string;
begin
  consulta:='Select * from BitacoraVehiculos';
  if edit1.Text<>' ' then begin
    Query1.Sql.Text:=consulta+ ' fechadeservicio=:fecha';
    Query1.ParamByName(fecha).asDate:=StrtoDate(fecha.text);
//Suponiendo que este campo toma Valores String
  end else 
  if edit2.Text<>' ' then begin
    Query1.Sql.Text:=consulta+ ' numerofactura=:fact'
    Query1.ParamByname('fact').AsInteger:= StrtoInt(edit2.text);
  end else
  if edit3.Text<>' ' then begin
    Query1.Sql.Text:=consulta+ ' importe=:importe'
    Query1.ParamByName('importe').Asfloat:=StrtoFloat(edit3.text);
  end;
//     query1.SQL.Text:=consulta;
//     query1.ExecSQL;//<==Esto no se utiliza para una sentencia de Consulta.
  Query1.Open;
 end;
Intenta esto


La franja horaria es GMT +2. Ahora son las 20:04:10.

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