📄 fastsearch.~pas
字号:
//***************************************************************************
//志强软件工作室热情奉献志强delphi开发包
//历史版本:
//v1.2
//加入多条件查询
//v1.21
// 悠改非模试窗口在顶部时压于底层看不见。
//***************************************************************************
unit FastSearch;
interface
{$R FASTSEARCH.dcr}
uses
SysUtils, Classes,DB,fsSearch;
type
TDatabaseType=(SQLServer,Access,Oracle);
TFastSearch = class(TComponent)
private
{ Private declarations }
//FQueryStr:string;
//FQuerySql:string;
FFields:TFields;
FCaption:string;
FDataSet:TDataSet;
FDatabaseType:TDatabaseType;
FDateSeparator:string;
FCompItemIndex,FConditionIndex:integer;
FCompareValue,FCompareRange1,FCompareRange2:string;
FMultiCondition:boolean;
FSaveCondition:boolean;
FQueryList:TList;
procedure SetDataSet(value:TDataSet);
procedure SetDatabaseType(value:TDatabaseType);
procedure LoadStatus(fm:TfSearchDlg);
procedure SaveStatus(fm:TfSearchDlg);
function Pos(SubStr,sourceStr:string;Index:integer=1):integer;
function AddWhere(sql,where:string):string;
protected
{ Protected declarations }
public
{ Public declarations }
QueryCondition:string;
//QuerySQl:string;
function Search():boolean;
function QuerySql(sql:string):string;
constructor Create(AOwner:TComponent);override;
destructor Destroy();override;
published
{ Published declarations }
//property Fields:TFields read FFields write SetFields;
property Caption:string Read FCaption write FCaption;
property DataSet:TDataSet read FDataSet write SetDataSet;
property DatabaseType:TDatabaseType read FDatabaseType write SetDatabaseType;
property MultiCondition:boolean read FMultiCondition write FMultiCondition default false;
property SaveCondition:boolean read FSaveCondition write FSaveCondition default true;
end;
procedure Register;
implementation
constructor TFastSearch.Create(AOwner:TComponent);
begin
inherited;
FCaption:='快速查询---ZQSoft';
SetDatabaseType(SQLServer);
FCompItemIndex:=0;
FConditionIndex:=0;
FCompareValue:='';
FCompareRange1:='';
FCompareRange2:='';
FMultiCondition:=false;
FSaveCondition:=true;
FQueryList:=TList.Create();
end;
destructor TFastSearch.Destroy();
begin
FQueryList.Free;
inherited;
end;
procedure TFastSearch.SetDataSet(value:TDataSet);
begin
if Value<>FDataSet then
begin
FDataSet:=Value;
FFields:=FDataSet.Fields;
end;
end;
procedure TFastSearch.SetDatabaseType(value:TDatabaseType);
begin
FDataBaseType:=value;
case Value of
SQLServer:FDateSeparator:='''';
Access:FDateSeparator:='#';
Oracle:FDateSeparator:='''';
end;
end;
function TFastSearch.Search():boolean;
var
fm:TfSearchDlg;
begin
fm:=TfSearchDlg.Create(nil);
try
fm.Fields:=FFields;
fm.Caption:=FCaption;
fm.DateSeparator:=FDateSeparator;
LoadStatus(fm);
fm.ShowModal;
if fm.SearchSuccess then
begin
QueryCondition:=fm.QueryStr;
SaveStatus(fm);
result:=true;
end
else
result:=false;
finally
fm.Free;
end;
end;
function TFastSearch.QuerySql(sql:string):string;
begin
if Search() then
begin
result:=AddWhere(sql,self.QueryCondition);
end
else begin
result:='';
end;
end;
function TFastSearch.AddWhere(sql,where:string):string;
var
sOrderBy,s,sSql:string;
i:integer;
begin
sSql:=sql;
if where<>'' then
begin
i:=pos('order by',sSql,-1);
if i<>0 then
begin
sOrderBy:=copy(sSql,i,MaxInt);
s:=copy(sSql,1,i-1);
end
else begin
s:=sSql;
sOrderBy:='';
end;
if pos('where',s,-1)=0 then
s:=s+' where ('+where+') '+sOrderBy
else
s:=s+' and ('+where+') '+sOrderBy;
result:=s;
end
else
result:=sql;
end;
procedure TFastSearch.LoadStatus(fm:TfSearchDlg);
begin
//加载状态信息
fm.CompItemIndex:=FCompItemIndex;
fm.ConditionIndex:=FConditionIndex;
fm.CompareValue:=FCompareValue;
fm.CompareRange1:=FCompareRange1;
fm.CompareRange2:=FCompareRange2;
fm.MultiCondition:=FMultiCondition;
fm.SaveCondition:=FSaveCondition;
if FMultiCondition and FSaveCondition then
fm.QueryList.Assign(FQueryList);
end;
procedure TFastSearch.SaveStatus(fm:TfSearchDlg);
begin
//保存状态信息
FDateSeparator:=fm.DateSeparator;
FCompItemIndex:=fm.CompItemIndex;
FConditionIndex:=fm.ConditionIndex;
FCompareValue:=fm.CompareValue;
FCompareRange1:=fm.CompareRange1;
FCompareRange2:=fm.CompareRange2;
FMultiCondition:=fm.MultiCondition;
FSaveCondition:=fm.SaveCondition;
if FSaveCondition then
FQueryList.Assign(fm.QueryList);
end;
function TFastSearch.Pos(SubStr,sourceStr:string;Index:integer=1):integer;
var
s:string;
i,j,Len:integer;
PosList:TList;
pi:^integer;
begin
s:=SourceStr;
Len:=Length(SubStr);
result:=0;
if Index>0 then
begin
for i:=1 to Index do
begin
j:=System.pos(SubStr,SourceStr);
if j>0 then
begin
result:=result+j;
delete(SourceStr,1,j+Len-1);
end
else begin
result:=0;
exit;
end;
end; //end for
result:=result+(index-1)*(len-1);
end
else begin
PosList:=TList.Create();
i:=0;
j:=System.pos(SubStr,SourceStr);
while j>0 do
begin
new(pi);
pi^:=i+j;
posList.Add(pi);
i:=j+len-1;
delete(SourceStr,1,i);
j:=System.pos(SubStr,SourceStr);
end;
index:=-index;
if posList.Count>=Index then
begin
pi:=PosList.Items[posList.count-Index];
result:=pi^;
end
else
result:=0;
for i:=posList.Count-1 downto 0 do
begin
dispose(posList.Items[i]);
PosList.Delete(i);
end;
PosList.Free;
end;
end;
procedure Register;
begin
RegisterComponents('ZQSoft', [TFastSearch]);
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -