📄 basesearch.~pas
字号:
unit BaseSearch;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
BaseDialog, Db, StdCtrls, Buttons, Grids, DBGrids, DBTables, Mask,
DBCtrls;
type
TfmBaseSearch = class(TfmBaseDialog)
gdBrowse: TDBGrid;
EDA: TEdit;
Label1: TLabel;
EDB: TComboBox;
Label2: TLabel;
bnRefresh: TBitBtn;
dsTemp: TDataSource;
bnEdit: TBitBtn;
procedure EDBChange(Sender: TObject);
procedure EDAChange(Sender: TObject);
procedure bnRefreshClick(Sender: TObject);
procedure gdBrowseDblClick(Sender: TObject);
procedure bnOKClick(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure bnEditClick(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
private
{ Private declarations }
FSQL, FOrderSQL : String;
function GetSQL: String;
procedure SetSQL(ASQL: String);
procedure SetOrderBySQL(AOrderSQL: String);
public
{ Public declarations }
property SQLText : String read GetSQL write SetSQL;
property OrderBySQL : String write SetOrderBySQL;
end;
function SearchData(ADBEdit: TDBEdit; ADataSet: TDataSet): String;
var
fmBaseSearch: TfmBaseSearch;
implementation
uses Loading, Main, PublicFunction, BA010, BA020, BA030, BA040, BA050,
BA060, BA070, SY150;
var
EditForm : TFormClass;
sOldValue : String;
PrevSQL : String;
{$R *.DFM}
function SearchData(ADBEdit: TDBEdit; ADataSet: TDataSet): String;
begin
if not (ADBEdit.DataSource.DataSet.State in [dsInsert, dsEdit]) then
Abort;
if ADBEdit.ReadOnly then
Abort;
try
fmBaseSearch := TfmBaseSearch.Create(Application);
fmBaseSearch.Caption := '查询' + ADBEdit.DataSource.DataSet.FieldByName(ADBEdit.DataField).DisplayLabel;
fmBaseSearch.dsTemp.DataSet := ADataSet;
sOldValue := ADBEdit.DataSource.DataSet.FieldByName(ADBEdit.DataField).AsString;
if fmBaseSearch.ShowModal = mrOK then
begin
ADBEdit.DataSource.DataSet.FieldByName(ADBEdit.DataField).AsString :=
fmBaseSearch.dsTemp.DataSet.Fields[0].AsString;
Result := fmBaseSearch.dsTemp.DataSet.Fields[0].AsString;
end
else
begin
ADBEdit.DataSource.DataSet.FieldByName(ADBEdit.DataField).AsString := sOldValue;
Result := sOldValue;
end;
if ADBEdit.Visible then
ADBEdit.SetFocus;
finally
fmBaseSearch.Free;
end;
end;
procedure TfmBaseSearch.FormShow(Sender: TObject);
var
i : Integer;
begin
inherited;
try
fmLoading := TfmLoading.Create(Self);
fmLoading.Show;
fmLoading.Update;
PrevSQL := ((dsTemp.DataSet) as TQuery).SQL.Text;
SQLText := ((dsTemp.DataSet) as TQuery).SQL.Text;
FOrderSQL := dsTemp.DataSet.Fields[0].FieldName;
dsTemp.DataSet.Close;
dsTemp.DataSet.Open;
for i := 0 to dsTemp.DataSet.FieldCount - 1 do
EDB.Items.Add(dsTemp.DataSet.Fields[i].DisplayLabel);
EDB.DropDownCount := dsTemp.DataSet.FieldCount;
EDB.ItemIndex := 0;
dsTemp.DataSet.Locate(dsTemp.DataSet.Fields[EDB.ItemIndex].FieldName,
LeftStr(sOldValue, dsTemp.DataSet.Fields[EDB.ItemIndex].Size),
[loCaseInsensitive, loPartialKey]);
EditForm := nil;
if dsTemp.DataSet.Name = 'qyRegion' then
EditForm := TfmBA010;
if dsTemp.DataSet.Name = 'qyCustomerType' then
EditForm := TfmBA020;
if dsTemp.DataSet.Name = 'qySupplierType' then
EditForm := TfmBA030;
if dsTemp.DataSet.Name = 'qyInventoryChange' then
EditForm := TfmBA040;
if dsTemp.DataSet.Name = 'qyWarehouse' then
EditForm := TfmBA050;
if dsTemp.DataSet.Name = 'qyProductType' then
EditForm := TfmBA060;
if dsTemp.DataSet.Name = 'qyBank' then
EditForm := TfmBA070;
if (dsTemp.DataSet.Name = 'qyCompany') and (sUserID = 'SUPERVISOR') then
EditForm := TfmSY150;
if EditForm = nil then
bnEdit.Visible := False;
finally
fmLoading.Hide;
fmLoading.Update;
fmLoading.Free;
end;
end;
procedure TfmBaseSearch.EDBChange(Sender: TObject);
begin
inherited;
try
dsTemp.DataSet.DisableControls;
fmLoading := TfmLoading.Create(Self);
fmLoading.Show;
fmLoading.Update;
dsTemp.DataSet.Close;
OrderBySQL := dsTemp.DataSet.Fields[EDB.ItemIndex].FieldName;
((dsTemp.DataSet) as TQuery).SQL.Text := SQLText;
dsTemp.DataSet.Open;
finally
dsTemp.DataSet.EnableControls;
fmLoading.Hide;
fmLoading.Update;
fmLoading.Free;
end;
end;
procedure TfmBaseSearch.EDAChange(Sender: TObject);
begin
inherited;
dsTemp.DataSet.Locate(dsTemp.DataSet.Fields[EDB.ItemIndex].FieldName,
LeftStr(EDA.Text, dsTemp.DataSet.Fields[EDB.ItemIndex].Size),
[loCaseInsensitive, loPartialKey]);
end;
function TfmBaseSearch.GetSQL: String;
begin
Result := FSQL + FOrderSQL;
end;
procedure TfmBaseSearch.SetOrderBySQL(AOrderSQL: String);
begin
if Trim(AOrderSQL) = '' then
FOrderSQL := ' '
else
FOrderSQL := ' ORDER BY ' + AOrderSQL;
end;
procedure TfmBaseSearch.SetSQL(ASQL: String);
begin
FSQL := ASQL
end;
procedure TfmBaseSearch.bnRefreshClick(Sender: TObject);
begin
inherited;
try
fmLoading := TfmLoading.Create(Self);
fmLoading.Show;
fmLoading.Update;
dsTemp.DataSet.Close;
dsTemp.DataSet.Open;
finally
fmLoading.Hide;
fmLoading.Update;
fmLoading.Free;
end;
end;
procedure TfmBaseSearch.gdBrowseDblClick(Sender: TObject);
begin
inherited;
ModalResult:= mrOK;
end;
procedure TfmBaseSearch.bnOKClick(Sender: TObject);
begin
//inherited;
end;
procedure TfmBaseSearch.bnEditClick(Sender: TObject);
begin
inherited;
if EditForm <> nil then
begin
ExecuteForm(EditForm);
try
dsTemp.DataSet.DisableControls;
fmLoading := TfmLoading.Create(Self);
fmLoading.Show;
fmLoading.Update;
dsTemp.DataSet.Close;
dsTemp.DataSet.Open;
finally
dsTemp.DataSet.EnableControls;
fmLoading.Hide;
fmLoading.Update;
fmLoading.Free;
end;
end;
end;
procedure TfmBaseSearch.FormClose(Sender: TObject;
var Action: TCloseAction);
begin
inherited;
((dsTemp.DataSet) as TQuery).SQL.Text := PrevSQL;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -