📄 findmultiselect.~pa
字号:
{*******************************************************}
{ 查询基类 Unit }
{ }
{ Copyright (c) 2001-2001, 广东亿康公司 }
{ 实现Form中通用查询功能 }
{ Athor:乔有钢 }
{*******************************************************}
unit FindMultiSelect;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ComCtrls, StdCtrls, ExtCtrls;
type
TfrmMultiFindSelect = class(TForm)
pn1: TPanel;
lbDate: TLabel;
dtpBegin: TDateTimePicker;
dtpEnd: TDateTimePicker;
pn2: TPanel;
Label1: TLabel;
Edit1: TEdit;
Label2: TLabel;
Edit2: TEdit;
Label3: TLabel;
Edit3: TEdit;
Bevel1: TBevel;
pn3: TPanel;
btnOK: TButton;
btnCancel: TButton;
procedure FormShow(Sender: TObject);
procedure btnCancelClick(Sender: TObject);
procedure FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure dtpEndKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure btnOKClick(Sender: TObject);
private
{ Private declarations }
public
slList: TStringList; { Public declarations }
procedure load;
function GetFildName(sTitle: string): string;
procedure Find; virtual; //可以在子类中重载
end;
var
frmMultiFindSelect: TfrmMultiFindSelect;
implementation
uses FindClass;
var bIsTime:Boolean;
sSqlText:string;
{$R *.DFM}
procedure TfrmMultiFindSelect.FormShow(Sender: TObject);
begin
load;
// bIsOk := True;
ShortDateFormat := 'YYYY-MM-DD';
dtpBegin.DateTime := Date-30;
dtpend.DateTime := Date;
// bIsTime := (Pos('时间', cmbIndex.Text) > 0) or (Pos('日期', cmbIndex.Text) > 0);
pn1.Visible := bIsTime;
if pn1.Visible=False then begin
pn1.Height:=3;
Edit1.SetFocus;
end;
frmMultiFindSelect.Height:=pn1.Height+ pn2.Height+pn3.Height+25;
Update;
gsSQLText:='';
end;
procedure TfrmMultiFindSelect.btnCancelClick(Sender: TObject);
begin
gsSqlText := ''; //取消
Close;
end;
procedure TfrmMultiFindSelect.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if (Key = VK_RETURN) or (Key = VK_DOWN) then //按回车键或向下键自动跳到下一输入控件
SendMessage(Handle, WM_NEXTDLGCTL, 0, 0);
if Key = VK_UP then //按向上键自动跳到上一输入控件
SendMessage(Handle, WM_NEXTDLGCTL, 1, 0);
if Key = VK_ESCAPE then
Close;
end;
procedure TfrmMultiFindSelect.load;
var
i: integer;
begin
Edit1.Text:='';
Edit2.Text:='';
Edit3.Text:='';
if slList.Count > 0 then begin
// for i := 0 to slList.Count - 1 do
// cmbIndex.Items.Add(slList[i]);
if (Pos('时间',slList[0])>0) or (Pos('日期',slList[0])>0) then begin
pn1.Visible:=True;
bIsTime:=True;
lbDate.Caption:=slList[0];
label1.Caption:=slList[1];
label2.Caption:=slList[2];
label3.Caption:=slList[3];
Exit;
end;
if (Pos('时间',slList[1])>0) or (Pos('日期',slList[1])>0) then begin
pn1.Visible:=True;
bIsTime:=True;
lbDate.Caption:=slList[1];
label1.Caption:=slList[0];
label2.Caption:=slList[2];
label3.Caption:=slList[3];
Exit;
end;
if (Pos('时间',slList[2])>0) or (Pos('日期',slList[2])>0) then begin
pn1.Visible:=True;
bIsTime:=True;
lbDate.Caption:=slList[2];
label1.Caption:=slList[0];
label2.Caption:=slList[1];
label3.Caption:=slList[3];
Exit;
end;
if (Pos('时间',slList[3])>0) or (Pos('日期',slList[3])>0) then begin
pn1.Visible:=True;
bIsTime:=True;
lbDate.Caption:=slList[3];
label1.Caption:=slList[0];
label2.Caption:=slList[1];
label3.Caption:=slList[2];
Exit;
end;
label1.Caption:=slList[0];
label2.Caption:=slList[1];
label3.Caption:=slList[2];
end;
end;
procedure TfrmMultiFindSelect.dtpEndKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if key = VK_Return then begin
Edit1.SetFocus;
end;
end;
function TfrmMultiFindSelect.GetFildName(sTitle: string): string;
var
i, j: integer;
sIndex: string;
begin
with gFForm do begin //取得列头相对应的字段名
if FDBGridEh <> nil then
for i := 0 to FDBGridEh.Columns.Count - 1 do begin
if FDBGridEh.Columns[i].Title.Caption = sTitle then begin
sIndex := FDBGridEh.Columns[i].FieldName;
Result := sIndex;
Exit;
end;
end;
if FDBGrid <> nil then
for i := 0 to FDBGrid.Columns.Count - 1 do begin
if FDBGrid.Columns[i].Title.Caption = sTitle then begin
sIndex := FDBGrid.Columns[i].FieldName;
Result := sIndex;
Exit;
end;
end;
end;
end;
procedure TfrmMultiFindSelect.btnOKClick(Sender: TObject);
begin
Find;
end;
procedure TfrmMultiFindSelect.Find;
begin
sSqlText:= '';
if Edit1.Text<>'' then
sSqlText := 'convert(char(50),' + GetFildName(Trim(label1.Caption)) + ')' + ' like ''' + Trim(Edit1.Text) + '' + '%'' ';
if Edit2.Text<>'' then
if sSqlText<>'' then
sSqlText:=sSqlText+' and convert(char(50),' + GetFildName(Trim(label2.Caption)) + ')' + ' like ''' + Trim(Edit2.Text) + '' + '%'' '
else
sSqlText:='convert(char(50),' + GetFildName(Trim(label2.Caption)) + ')' + ' like ''' + Trim(Edit2.Text) + '' + '%'' ';
if Edit3.Text<>'' then
if sSqlText<>'' then
sSqlText:=sSqlText+' and convert(char(50),' + GetFildName(Trim(label3.Caption)) + ')' + ' like ''' + Trim(Edit3.Text) + '' + '%'' '
else
sSqlText:='convert(char(50),' + GetFildName(Trim(label3.Caption)) + ')' + ' like ''' + Trim(Edit3.Text) + '' + '%'' ';
if pn1.Visible then
if sSqlText<>'' then
sSqlText:=sSqlText+' and convert(char(10),' + GetFildName(Trim(lbDate.Caption)) +
',121)>=' + QuotedStr(FormatDateTime('YYYY-MM-DD',dtpBegin.Date))+' and convert(char(10),' +
GetFildName(Trim(lbDate.Caption)) + ',121)<=' + QuotedStr(FormatDateTime('YYYY-MM-DD',dtpEnd.Date))
else
sSqlText:='convert(char(10),' + GetFildName(Trim(lbDate.Caption)) +
',121)>=' + QuotedStr(FormatDateTime('YYYY-MM-DD',dtpBegin.Date))+' and convert(char(10),' +
GetFildName(Trim(lbDate.Caption)) + ',121)<=' + QuotedStr(FormatDateTime('YYYY-MM-DD',dtpEnd.Date));
if sSqlText='' then//条件为空时查询所有的
sSqlText:= 'convert(char(50),' + GetFildName(Trim(label1.Caption)) + ')' + ' like ''' + Trim(Edit1.Text) + '' + '%'' ';
gsSQLText:=sSQLText;;
Close;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -