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

📄 dbchildfrm.pas

📁 delphi 编制的服务器程序
💻 PAS
字号:
unit DbChildFrm;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ChildFrm, StdCtrls, Grids, DBGrids, ComCtrls, DBCtrls,
  DBNavPlus, Buttons, ExtCtrls, ImgList, DB, ADODB,DBDateTimePicker;

type
  TdbChildForm = class(TChildForm)
    PageControl1: TPageControl;
    TabSheet1: TTabSheet;
    TabSheet2: TTabSheet;
    DBGrid1: TDBGrid;
    Panel2: TPanel;
    ADOQuery1: TADOQuery;
    DataSource1: TDataSource;
    ImageList1: TImageList;
    Panel1: TPanel;
    sbadd: TSpeedButton;
    sbdelete: TSpeedButton;
    sbmodify: TSpeedButton;
    sbsave: TSpeedButton;
    sbcancel: TSpeedButton;
    sbquery: TSpeedButton;
    sbimport: TSpeedButton;
    sbexit: TSpeedButton;
   // DBNavPlus1: TDBNavPlus;
    procedure sbexitClick(Sender: TObject);
    procedure ADOQuery1BeforePost(DataSet: TDataSet);
    procedure ADOQuery1PostError(DataSet: TDataSet; E: EDatabaseError;
      var Action: TDataAction);
    procedure ADOQuery1AfterPost(DataSet: TDataSet);
    procedure sbaddClick(Sender: TObject);
    procedure sbdeleteClick(Sender: TObject);
    procedure sbmodifyClick(Sender: TObject);
    procedure sbsaveClick(Sender: TObject);
    procedure sbcancelClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure FormKeyPress(Sender: TObject; var Key: Char);
    procedure PageControl1Changing(Sender: TObject;
      var AllowChange: Boolean);
  private
    { Private declarations }
    procedure EnableButtons(En:Boolean);
    procedure EnableDbCtrls(En:Boolean);
  protected
    function CheckValues:Boolean;virtual;
  public
    { Public declarations }
  end;

var
  dbChildForm: TdbChildForm;

implementation

uses MainDm, PublicFunc;

{$R *.DFM}

procedure TdbChildForm.sbexitClick(Sender: TObject);
begin
  inherited;
  Close;
end;

procedure TdbChildForm.ADOQuery1BeforePost(DataSet: TDataSet);
begin
  inherited;
  DmMain.ADOConnection1.BeginTrans;
end;

procedure TdbChildForm.ADOQuery1PostError(DataSet: TDataSet;
  E: EDatabaseError; var Action: TDataAction);
begin
  inherited;
  DmMain.ADOConnection1.RollbackTrans;
  Action := DaAbort;
end;

procedure TdbChildForm.ADOQuery1AfterPost(DataSet: TDataSet);
begin
  inherited;
  DmMain.ADOConnection1.CommitTrans;
end;

procedure TdbChildForm.EnableButtons(En: Boolean);
begin
  sbAdd.Enabled := En;
  sbDelete.Enabled := En;
  sbModify.Enabled := En;
  sbSave.Enabled := not En;
  sbCancel.Enabled := not En;
  sbQuery.Enabled := En;
  sbImport.Enabled := En;
  sbExit.Enabled := En;
//  DBNavPlus1.Enabled :=  En;
end;

procedure TdbChildForm.sbaddClick(Sender: TObject);
begin
  inherited;
  EnableButtons(False);
  EnableDbCtrls(False);
  if PageControl1.ActivePageIndex = 0 then
    Dbgrid1.ReadOnly := False
  else
    DbGrid1.ReadOnly := True;
  ADOQuery1.Append;
  if PageControl1.ActivePageIndex = 0 then
    DbGrid1.SetFocus;  
end;

procedure TdbChildForm.sbdeleteClick(Sender: TObject);
begin
  inherited;
  if AdoQuery1.IsEmpty then
  begin
    MessageBoxInfo('没有要删除的记录!');
    Exit;
  end;
  if MessageBoxQuery('您确认要删除此记录吗?')<>MrYes then Exit;
  ADOQuery1.Delete;
end;

procedure TdbChildForm.sbmodifyClick(Sender: TObject);
begin
  inherited;
  if AdoQuery1.IsEmpty then
  begin
    MessageBoxInfo('没有要修改的记录!');
    Exit;
  end;
  EnableDbCtrls(False);
  EnableButtons(False);
  AdoQuery1.Edit;
  if PageControl1.ActivePageIndex = 0 then
    Dbgrid1.ReadOnly := False
  else
    DbGrid1.ReadOnly := True;
  ADOQuery1.Edit;
end;

procedure TdbChildForm.sbsaveClick(Sender: TObject);
begin
  inherited;
  if not CheckValues then Exit;
  try
   if  AdoQuery1.State in [DsEdit,DsInsert] then AdoQuery1.Post;
  except
    raise;
  end;
  EnableDbCtrls(True);
  EnableButtons(True);
end;

procedure TdbChildForm.sbcancelClick(Sender: TObject);
begin
  inherited;
  AdoQuery1.Cancel;
  EnableDbCtrls(True);
  EnableButtons(True);
end;

procedure TdbChildForm.FormCreate(Sender: TObject);
begin
  inherited;
  EnableDbCtrls(True);
  EnableButtons(True);
  AdoQuery1.Open;
  PageControl1.ActivePageIndex := 0;
end;


function TdbChildForm.CheckValues: Boolean;
begin
  Result := True;
end;

procedure TdbChildForm.FormKeyPress(Sender: TObject; var Key: Char);
begin
  inherited;
  if key = #13 then
    if not (ActiveControl is TDBMemo) and not (ActiveControl is TDBGrid) then
    begin
      key := #0;  //此键盘消息不再由其他程序处理
      Perform(WM_NEXTDLGCTL, 0, 0);  //焦点跳转到下一控件
    end
    else if (ActiveControl is TDBGrid) then
      with TDBGrid(ActiveControl) do
        if SelectedIndex < (fieldcount - 1) then
          SelectedIndex := SelectedIndex + 1  //焦点跳转到下一栏
        else
          SelectedIndex := 0;
end;

procedure TdbChildForm.EnableDbCtrls(En: Boolean);
var
  i: Integer;
  Dbe:TDbedit;
  Dbo:TDbLookupComBoBox;
  Dbt:TDBDateTimePicker;
  dbc:TDbComBoBox;
begin
  for i:=0 to Panel2.ControlCount-1 do
    if Panel2.Controls[i] is TDBDateTimePicker then
    begin
      Dbt:=TDBDateTimePicker(Panel2.Controls[i]);
      Dbt.Enabled := not En;
    end
    else if Panel2.Controls[i] is TDbEdit then
    begin
      dbe:=TDbEdit(Panel2.Controls[i]);
      dbe.ReadOnly := En;
   end
    else if Panel2.Controls[i] is TDbLookupComBoBox then
    begin
      dbo:=TDbLookupComBoBox(Panel2.Controls[i]);
      Dbo.ReadOnly := En;
   end
    else if Panel2.Controls[i] is TDbComBoBox then
    begin
      dbc:=TDbComBoBox(Panel2.Controls[i]);
      Dbc.ReadOnly := En;
   end

end;

procedure TdbChildForm.PageControl1Changing(Sender: TObject;
  var AllowChange: Boolean);
begin
  inherited;
  if AdoQuery1.State in [DsEdit,DsInsert] then
    AllowChange := False;
end;

end.

⌨️ 快捷键说明

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