⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 basesearch.~pas

📁 一套融入了系统营销管理思想的管理软件产品
💻 ~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 + -