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

📄 infobase.~pa

📁 Barcode And LabelPrint
💻 ~PA
字号:
unit InfoBase;


interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Base, ComCtrls, ToolWin, ActnList, DB, ADODB, StdCtrls,
  Mask, DBCtrls, wwDialog, wwidlg,
  ImgList, ExtCtrls;

type
  TfrmInfoBase = class(TfrmBase)
    ToolBar: TToolBar;
    tbtNew: TToolButton;
    tbtModify: TToolButton;
    tbtDelete: TToolButton;
    ALToolbar: TActionList;
    acNew: TAction;
    acModify: TAction;
    acDelete: TAction;
    acSave: TAction;
    acPrior: TAction;
    acFirst: TAction;
    acNext: TAction;
    acLast: TAction;
    acFind: TAction;
    acPrint: TAction;
    acExit: TAction;
    acCancel: TAction;
    tbtDivider1: TToolButton;
    tbtFirst: TToolButton;
    tbtPrior: TToolButton;
    tbtNext: TToolButton;
    tbtLast: TToolButton;
    tbtDivider: TToolButton;
    tbtSave: TToolButton;
    tbtCancel: TToolButton;
    tbtFind: TToolButton;
    tbtDivider3: TToolButton;
    tbtExit: TToolButton;
    QBaseInfo: TADOQuery;
    dsBaseInfo: TDataSource;
    QIsUnique: TADOQuery;
    wwLookupDlg: TwwLookupDialog;
    acFilter: TAction;
    tbtFilter: TToolButton;
    StatusBar1: TStatusBar;
    Panel1: TPanel;
    Panel2: TPanel;
    Panel3: TPanel;
    Panel4: TPanel;
    Panel5: TPanel;
    procedure acFirstExecute(Sender: TObject);
    procedure acPriorExecute(Sender: TObject);
    procedure acNextExecute(Sender: TObject);
    procedure acLastExecute(Sender: TObject);
    procedure acExitExecute(Sender: TObject);
    procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
    procedure dsBaseInfoStateChange(Sender: TObject);
    procedure acNewExecute(Sender: TObject);
    procedure acModifyExecute(Sender: TObject);
    procedure acDeleteExecute(Sender: TObject);
    procedure acSaveExecute(Sender: TObject);
    procedure acCancelExecute(Sender: TObject);
    procedure QBaseInfoBeforePost(DataSet: TDataSet);
    procedure QBaseInfoAfterPost(DataSet: TDataSet);
    procedure QBaseInfoBeforeDelete(DataSet: TDataSet);
    procedure QBaseInfoPostError(DataSet: TDataSet; E: EDatabaseError;
      var Action: TDataAction);
    procedure QBaseInfoDeleteError(DataSet: TDataSet; E: EDatabaseError;
      var Action: TDataAction);
    procedure FormCreate(Sender: TObject);
    procedure dsBaseInfoDataChange(Sender: TObject; Field: TField);
    procedure acFindExecute(Sender: TObject);
  private
    { Private declarations }
  protected
    //iFunctionID :Integer;
    sSql: string;
    bCanNew, bCanModify, bCanDelete, bCanPrint: Boolean;
    function IsUnique(ParamName, ParamValue: string): Boolean; {检测编号是否重复}
    function CheckSave: Boolean; {检测当前数据是否保存函数}
    function GetErrorInfo(E: EDatabaseError): string; {取错误描述信息和错误原码}

  public
    { Public declarations }
  end;

var
  frmInfoBase: TfrmInfoBase;

implementation

uses StockDataModel, StockMain;


{$R *.dfm}

{检测编号是否重复}

function TfrmInfoBase.IsUnique(ParamName, ParamValue: string): Boolean; {检测代码是否重复}
begin
  Result := True;
//if QBaseInfo.State = dsInsert then
  with QIsUnique do
  begin
    parameters.ParamValues[ParamName] := ParamValue;
    if Active then Requery else Open;
    if RecordCount > 0 then Result := False;
  end
end;

{检测当前数据是否保存函数}

function TfrmInfoBase.CheckSave: Boolean;
begin
  Result := true;
  if QBaseInfo.State in [dsInsert, dsEdit] then //判断当前状态
    case Messagedlg('是否保存当前的修改?', mtWarning, [mbYes, mbNo, mbCancel], 0) of
      mrYes:
        begin
          QBaseInfo.Post;
          Result := QBaseInfo.State = dsBrowse; //状态是否为Browse
        end;
      mrNo:
        begin
          QBaseInfo.Cancel;
          Result := QBaseInfo.State = dsBrowse; //状态是否为Browse
        end;
      mrCancel:
        Result := False;
    end
end;

{取错误描述信息和错误原码}

function TfrmInfoBase.GetErrorInfo(E: EDatabaseError): string;
var
  AdoErrors: Errors; //ado的错误信息对象
  sError: string;
//  i :Integer;
begin
  inherited;
{取得错误信息}
  AdoErrors := StockDM.ADOConn.Errors;
//for i:=0 to AdoErrors.Count-1 do
  if AdoErrors.Count > 0 then //可能有多个错误信息,这里只取第一个
    sError := sError + #10#13 + AdoErrors.Item[0].Description + ' (错误码:' + InttoStr(AdoErrors.Item[0].NativeError) + ')'
  else if (E is EDatabaseError) then
    sError := E.Message;

  Result := sError;
end;

procedure TfrmInfoBase.acFirstExecute(Sender: TObject);
begin
  inherited;
  QBaseInfo.First;
end;

procedure TfrmInfoBase.acPriorExecute(Sender: TObject);
begin
  inherited;
  QBaseInfo.Prior;
end;

procedure TfrmInfoBase.acNextExecute(Sender: TObject);
begin
  inherited;
  QBaseInfo.Next;
end;

procedure TfrmInfoBase.acLastExecute(Sender: TObject);
begin
  inherited;
  QBaseInfo.Last;
end;

procedure TfrmInfoBase.acExitExecute(Sender: TObject);
begin
  inherited;
  Close;
end;

procedure TfrmInfoBase.FormCloseQuery(Sender: TObject;
  var CanClose: Boolean);
begin
  inherited;
  CanClose := CheckSave; //未保存则不能退出
end;

procedure TfrmInfoBase.dsBaseInfoDataChange(Sender: TObject;
  Field: TField);
begin
  inherited;
{调用状态变化过程}
  dsBaseInfoStateChange(Self);
end;

procedure TfrmInfoBase.dsBaseInfoStateChange(Sender: TObject);
begin
  inherited;
{设置功能按钮的有效性}
  acSave.Enabled := QBaseInfo.State in [dsInsert, dsEdit];
  acNew.Enabled := bCanNew and not acSave.Enabled;
  acModify.Enabled := bCanModify and not acSave.Enabled;
  acCancel.Enabled := acSave.Enabled;
  acDelete.Enabled := bCanDelete;
  acPrint.Enabled := bCanPrint;

  acFind.Enabled := not acSave.Enabled;
  acFilter.Enabled := not acSave.Enabled;

{设置导航按钮的有效性}
  acFirst.Enabled := (not QBaseInfo.Bof) and (not acSave.Enabled);
  acLast.Enabled := (not QBaseInfo.Eof) and (not acSave.Enabled);
  acPrior.Enabled := (acFirst.Enabled) and (not acSave.Enabled);
  acNext.Enabled := (acLast.Enabled) and (not acSave.Enabled);
end;

procedure TfrmInfoBase.acNewExecute(Sender: TObject);
begin
  inherited;
  QBaseInfo.Append;
end;

procedure TfrmInfoBase.acModifyExecute(Sender: TObject);
begin
  inherited;
  QBaseInfo.Edit;
end;

procedure TfrmInfoBase.acDeleteExecute(Sender: TObject);
begin
  inherited;
  if QBaseInfo.RecordCount > 0 then
    if messagedlg('您确定要删除当前记录吗?', mtWarning, [mbOk, mbCancel], 0) = mrOk then
      QBaseInfo.Delete;
end;

procedure TfrmInfoBase.acSaveExecute(Sender: TObject);
begin
  inherited;
  if QBaseInfo.State in [dsInsert, dsEdit] then
    QBaseInfo.Post;

end;

procedure TfrmInfoBase.acCancelExecute(Sender: TObject);
begin
  inherited;
  if messagedlg('您确定要取消修改吗?', mtWarning, [mbOk, mbCancel], 0) = mrOk then
    QBaseInfo.Cancel;
end;

procedure TfrmInfoBase.QBaseInfoBeforePost(DataSet: TDataSet);
begin
  inherited;
  if not StockDM.ADOConn.InTransaction then
    StockDM.ADOConn.BeginTrans;
end;

procedure TfrmInfoBase.QBaseInfoAfterPost(DataSet: TDataSet);
begin
  inherited;
  if StockDM.ADOConn.InTransaction then
    StockDM.ADOConn.CommitTrans;
end;

procedure TfrmInfoBase.QBaseInfoBeforeDelete(DataSet: TDataSet);
begin
  inherited;
  if not StockDM.ADOConn.InTransaction then
    StockDM.ADOConn.BeginTrans;
end;

procedure TfrmInfoBase.QBaseInfoPostError(DataSet: TDataSet;
  E: EDatabaseError; var Action: TDataAction);
begin
  inherited;
{提示错误描述信息和错误原码}
  messagedlg('删除失败!' + GetErrorInfo(E), mtError, [mbOk], 0);
  Action := daAbort; //终止存盘

  if StockDM.ADOConn.InTransaction then
    StockDM.ADOConn.RollbackTrans;
end;

procedure TfrmInfoBase.QBaseInfoDeleteError(DataSet: TDataSet;
  E: EDatabaseError; var Action: TDataAction);
begin
  inherited;
{提示错误描述信息和错误原码}
  messagedlg('删除失败!' + GetErrorInfo(E), mtError, [mbOk], 0);
  Action := daAbort; //终止存盘

  if StockDM.ADOConn.InTransaction then
    StockDM.ADOConn.RollbackTrans;
end;

procedure TfrmInfoBase.FormCreate(Sender: TObject);
var
  G_bAdmin: boolean;
begin
  inherited;
  G_bAdmin := true;
  bCanNew := G_bAdmin;
  bCanModify := G_bAdmin;
  bCanDelete := G_bAdmin;
  bCanPrint := G_bAdmin;

  if not QBaseInfo.Active then
    QBaseInfo.Open
  else
    dsBaseInfoStateChange(Sender); {调用状态变化过程}
end;

procedure TfrmInfoBase.acFindExecute(Sender: TObject);
begin
  inherited;
  if wwLookupDlg.Execute then
  begin
  end;
end;

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -