Hola a todos.
Tengo la siguiente consulta en un formulario de busqueda:
Código SQL
[-]
SELECT ID, MARCA, MODEL, CARROSSER, TIPUS, MATRICULA, MATRICULA_2, CODI_ACTUAL FROM BOM0001
WHERE ACTUAL = 'S'
ORDER BY MATRICULA
Esta consulta la modifico con el codigo Delphi siguiente:
Código Delphi
[-]
procedure TF_BuscarCamio.FormActivate(Sender: TObject);
begin
DBGridBuscar.Setfocus;
Sw_1:=0;
end;
procedure TF_BuscarCamio.FormShow(Sender: TObject);
begin
Edit1.Text :='';
end;
procedure TF_BuscarCamio.ComboBox1Select(Sender: TObject);
begin
Edit1.Text :='';
OrdenarGrid.Close;
If CheckBox1.Checked=True then
begin
OrdenarGrid.SQL[2] := 'ORDER BY '+ ComboBox1.Text;
end
else
begin
OrdenarGrid.SQL[2]:='or actual = ''N''';
OrdenarGrid.SQL[3] := 'ORDER BY '+ ComboBox1.Text;
end;
OrdenarGrid.Open;
OrdenarGrid.FieldByName(ComboBox1.Text).Index := 0;
DBGridBuscar.SetFocus;
end;
procedure TF_BuscarCamio.Edit1Change(Sender: TObject);
begin
try
OrdenarGrid.Close;
OrdenarGrid.SQL.Clear;
OrdenarGrid.SQL.Add('select * from BOM0001 where upper('+Combobox1.text+') like ''%'+AnsiUpperCase(Edit1.Text)+'%''');
OrdenarGrid.SQL.Add('and actual = ''S''');
If CheckBox1.Checked=False then
begin
OrdenarGrid.SQL.Add('or actual = ''N''');
end;
OrdenarGrid.SQL.Add('order by '+Combobox1.text+', MATRICULA');
OrdenarGrid.Open;
except
end;
end;
procedure TF_BuscarCamio.Edit1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
If Key=219 then
begin
Edit1.Text:=Edit1.Text+'''';
Edit1.SelStart := Length(Edit1.Text);
Edit1.SelLength := 0;
end;
end;
procedure TF_BuscarCamio.DBGridBuscarTitleBtnClick(Sender: TObject;
ACol: Integer; Field: TField);
var
c: string;
begin
Edit1.Text :='';
c:=Field.FieldName;
ComboBox1.Text:=c;
OrdenarGrid.Close;
OrdenarGrid.SQL.Clear;
if Sw_1 = 0 then
begin
OrdenarGrid.SQL.Add ('SELECT ID, MARCA, MODEL, CARROSSER, TIPUS, MATRICULA, MATRICULA_2, CODI_ACTUAL FROM BOM0001 where actual = ''S''');
If CheckBox1.Checked=False then
begin
OrdenarGrid.SQL.Add('or actual = ''N''');
end;
OrdenarGrid.SQL.Add ('ORDER BY '+ c + ' ASC');
Sw_1:=1;
end
else
if Sw_1 = 1 then
begin
OrdenarGrid.SQL.Add ('SELECT ID, MARCA, MODEL, CARROSSER, TIPUS, MATRICULA, MATRICULA_2, CODI_ACTUAL FROM BOM0001 where actual = ''S''');
If CheckBox1.Checked=False then
begin
OrdenarGrid.SQL.Add('or actual = ''N''');
end;
OrdenarGrid.SQL.Add ('ORDER BY '+ c + ' DESC');
Sw_1:=0;
end;
OrdenarGrid.Open;
OrdenarGrid.FieldByName(ComboBox1.Text).Index := 0;
DBGridBuscar.SetFocus;
end;
procedure TF_BuscarCamio.CheckBox1Click(Sender: TObject);
begin
try
OrdenarGrid.Close;
OrdenarGrid.SQL.Clear;
OrdenarGrid.SQL.Add('SELECT ID, MARCA, MODEL, CARROSSER, TIPUS, MATRICULA, MATRICULA_2, CODI_ACTUAL FROM BOM0001 where actual = ''S''');
If CheckBox1.Checked=False then
begin
OrdenarGrid.SQL.Add('or actual = ''N''');
end;
OrdenarGrid.SQL.Add('order by '+Combobox1.text+', MATRICULA');
OrdenarGrid.Open;
except
end;
Edit1.Clear;
end;
procedure TF_BuscarCamio.DBGridBuscarKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if Key = VK_BACK then
begin
If length(Edit1.Text)> 0 then
Edit1.Text:=Copy(Edit1.Text,1,length(Edit1.Text)-1);
end;
If Key = VK_Escape then
Close;
If Key = VK_RETURN then
BitBtn1.Click;
end;
procedure TF_BuscarCamio.DBGridBuscarKeyPress(Sender: TObject; var Key: Char);
begin
if Key >= ' ' then
Edit1.Text:=Edit1.Text+Key;
end;
Recientemente he añadido un CheckBox el cual al enseñar el formulario esta en posición Cheked:=True para que solo filtre por los valores actuales.
Aquí todo funciona perfectamente, cambio los campos de busqueda mediante el ComboBox o el Click en el título y al escribir algo en el edit me muestra que registros contienen ese caracter ej. si escribo 01 me muestra 0001-ABC, B-2011-P, GI-9001-W, y a medida que le voy colocando más carácteres, solo el registro que cumpla la condición.
Cuando cambio el CheckBox a False, no me filtra lo que escribo en el edit de búsqueda, si que me encuentra el registro pero no me muestra solo uno sino que envia el foco a este pero viendo muchos más ej. si escribo 01, veo lo siguiente
0001-ABC
0402-HGH
0514-JJJ
pero con el foco en el 0001-ABC, cuando en el caso anterior si no modifico el CheckBox, acabo viendo solo el registro 0001-ABC
Si alguien tiene alguna sugerencia, pues me haría un gran favor.
Gracias por adelantado.
Saludos
Josep