📄 dbchildfrm.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 + -