📄 findselect.~pa
字号:
{*******************************************************}
{ 查询基类 Unit }
{ }
{ Copyright (c) 2001-2001, 广东亿康公司 }
{ 实现Form中通用查询功能 }
{ Athor:乔有钢 }
{*******************************************************}
unit FindSelect;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, comctrls, DBGridEh, DBGrids, AdoDB;
type
TfrmFindSelect = class(TForm)
GroupBox1: TGroupBox;
Label1: TLabel;
btnOk: TButton;
Button2: TButton;
Label2: TLabel;
Label3: TLabel;
dtpTime: TDateTimePicker;
edtFind: TComboBox;
cmbIndex: TComboBox;
procedure btnOkClick(Sender: TObject);
procedure edtFindKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure Button2Click(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure cmbIndexChange(Sender: TObject);
procedure cmbIndexKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure dtpTimeKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
private
procedure OpenData;
public
slList: TStringList;
function Load: boolean; virtual; //要改变查询的条件只要该此方法即可
{ Public declarations }
end;
procedure FindLoad( sTable:string);
procedure Find(sIndexStr: string; sFindStr: string);
procedure OpenFindSelectForm(slStringList: TStringList);
var
frmFindSelect: TfrmFindSelect;
implementation
uses FindClass;
var
sIndex, sTableName, sGrid, sFind, sSqlText: string;
bIsOk, bIsTime: boolean;
FDBGridEh: TDBGridEh;
FDBGrid: TDBGrid;
FForm: TForm;
FAdoQuery: TAdoQuery;
{$R *.DFM}
//要使用此模块只要调用FindLoad方法即可
{sender为要查询的窗体名,sTable为要查询的数据表,adqAdoQuery为用来产生语句的adoQuery}
procedure FindLoad( sTable:string);
var
slStrList: TstringList;
i, j: integer;
begin
slStrList := TStringList.Create;
//FForm := TForm(Sender);
FForm:=gFForm;
sTableName := sTable;
// sGrid := sGridName;
// FAdoQuery := adqAdoQuery;
sGrid:=gsGridName;
FAdoQuery:=gFAdoQuery;
if gbIsDBGridEh=True then
with FForm do begin
for j := 0 to ComponentCount - 1 do
if Components[j] is TDBGridEh then begin
if (Components[j] as TDBGridEh).Name = sGrid then begin
FDBGridEh := TDBGridEh(Components[j]);
for i := 0 to FDBGridEh.Columns.Count - 1 do
begin
slStrList.Add((Components[j] as TDBGridEh).Columns[i].Title.Caption);
end;
end;
end;
end;
if gbIsDBGrid=True then
with FForm do begin
for j := 0 to ComponentCount - 1 do
if Components[j] is TDBGrid then begin
if (Components[j] as TDBGrid).Name = sGrid then begin
FDBGrid := TDBGrid(Components[j]);
for i := 0 to FDBGrid.Columns.Count - 1 do
begin
slStrList.Add((Components[j] as TDBGrid).Columns[i].Title.Caption);
end;
end;
end;
end;
OpenFindSelectForm(slStrList);
if bIsOk then
Find(sIndex, sFind);
end;
procedure Find(sIndexStr: string; sFindStr: string);
procedure OpenData;
begin
with FAdoQuery do
begin
Close;
Sql.Clear;
Sql.Text := sSqlText;
Open;
end;
end;
var
i, j: integer;
sIndex: string;
begin
if FDBGridEh <> nil then
with FForm do begin
for i := 0 to FDBGridEh.Columns.Count - 1 do begin
if FDBGridEh.Columns[i].Title.Caption = sIndexStr then begin
sIndex := FDBGridEh.Columns[i].FieldName;
sSqlText := 'select * from ' + sTableName + ' where ' + 'convert(char(16),' + sIndex + ')' + ' like ''' + sFindStr + '' + '%'' ';
if bIsTime = True then
sSqlText := 'select * from ' + sTableName + ' where ' + sIndex + '=' + QuotedStr(sFindStr);
OpenData;
if FAdoQuery.RecordCount = 0 then
// sSqlText := 'select * from ' + sTableName + ' where ' + sIndex + '=' + QuotedStr(GetJGDH(sFindStr));
OpenData;
gsCount:=IntToStr(FAdoQuery.RecordCount);
Exit;
end;
end;
end;
if FDBGrid <> nil then
with FForm do begin
for i := 0 to FDBGrid.Columns.Count - 1 do begin
if FDBGrid.Columns[i].Title.Caption = sIndexStr then begin
sIndex := FDBGrid.Columns[i].FieldName;
sSqlText := 'select * from ' + sTableName + ' where ' + 'convert(char(16),' + sIndex + ')' + ' like ''' + sFindStr + '' + '%'' ';
if bIsTime = True then
sSqlText := 'select * from ' + sTableName + ' where ' + sIndex + '=' + QuotedStr(sFindStr);
OpenData;
//如果查询结果为空,可以根据实际情况修改下面的代码
if FAdoQuery.RecordCount = 0 then
// sSqlText := 'select * from ' + sTableName + ' where ' + sIndex + '=' + QuotedStr(GetJGDH(sFindStr));
OpenData;
gsCount:=IntToStr(FAdoQuery.RecordCount);
Exit;
end;
end;
end;
end;
procedure TfrmFindSelect.btnOkClick(Sender: TObject);
var
i: integer;
begin
sFind := Trim(edtFind.Text);
sIndex := Trim(cmbIndex.Text);
if (Pos('时间', cmbIndex.Text) > 0) or (Pos('日期', cmbIndex.Text) > 0) then begin
sFind := FormatDateTime('YYYY-MM-DD', dtpTime.Date);
bIsTime := True
end else
bIsTime := False;
Close;
for i := 0 to edtFind.Items.Count - 1 do begin
if Trim(edtFind.Items[i]) = sFind then
Exit;
end;
edtFind.Items.Add(sFind); //存入以前查过的内容
end;
procedure TfrmFindSelect.edtFindKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if key = VK_RETURN then
btnOk.Click;
end;
procedure TfrmFindSelect.Button2Click(Sender: TObject);
begin
bIsOk := False;
Close;
end;
procedure TfrmFindSelect.FormShow(Sender: TObject);
begin
load;
bIsOk := True;
if cmbIndex.Items.Count > 0 then
cmbIndex.ItemIndex := 0;
end;
procedure TfrmFindSelect.FormCreate(Sender: TObject);
begin
slList := TStringList.Create;
end;
procedure OpenFindSelectForm(slStringList: TStringList);
begin
if frmFindSelect = nil then
frmFindSelect := TfrmFindSelect.Create(nil);
frmFindSelect.slList := slStringList;
frmFindSelect.ShowModal;
end;
procedure TfrmFindSelect.cmbIndexChange(Sender: TObject);
begin
if (Pos('时间', cmbIndex.Text) > 0) or (Pos('日期', cmbIndex.Text) > 0) then
dtpTime.Visible := True
else
dtpTime.Visible := False;
end;
procedure TfrmFindSelect.cmbIndexKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if key = VK_RETURN then begin
if (Pos('时间', cmbIndex.Text) > 0) or (Pos('日期', cmbIndex.Text) > 0) then
dtpTime.SetFocus
else
edtFind.SetFocus;
end;
end;
procedure TfrmFindSelect.dtpTimeKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if key = VK_RETURN then
btnOk.Click;
end;
function TfrmFindSelect.Load: boolean;
var
i: integer;
begin
cmbIndex.Items.Clear;
for i := 0 to slList.Count - 1 do
cmbIndex.Items.Add(slList[i]);
if i > 0 then Result := True;
end;
procedure TfrmFindSelect.OpenData;
begin
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -