📄 main.~pas
字号:
unit main;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, DB, ADODB, Grids, DBGrids, StdCtrls;
type
TForm1 = class(TForm)
ADOConnection1: TADOConnection;
ADOTable1: TADOTable;
DBGrid1: TDBGrid;
DataSource1: TDataSource;
btnEdit: TButton;
btnCancel: TButton;
btnSave: TButton;
btnClose: TButton;
procedure btnEditClick(Sender: TObject);
procedure btnCancelClick(Sender: TObject);
procedure btnSaveClick(Sender: TObject);
procedure btnCloseClick(Sender: TObject);
procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
//当用户单击“编辑”按钮时,触发该事件
procedure TForm1.btnEditClick(Sender: TObject);
begin
//开始新事务
with ADOConnection1 do
begin
if not InTransaction then
BeginTrans;
//设置按钮和DBGrid状态
if InTransaction then
begin
btnSave.Enabled := True;
btnCancel.Enabled := True;
btnEdit.Enabled := False;
//允许用户编辑
DBGrid1.ReadOnly := False;
end;
end;
end;
//当用户单击“取消”按钮时,触发该事件
procedure TForm1.btnCancelClick(Sender: TObject);
begin
//取消修改
With ADOTable1 do
if State = dsEdit then
Cancel;
//回滚事务
with ADOConnection1 do
begin
//取消所有修改
if InTransaction then
RollbackTrans;
//设置按钮和DBGrid状态
if not InTransaction then
begin
btnEdit.Enabled := True;
btnSave.Enabled := False;
btnCancel.Enabled := False;
//刷新数据
With ADOTable1 do
begin
DisableControls;
Refresh;
CancelUpdates;
EnableControls;
end;
//不允许用户编辑
DBGrid1.ReadOnly := True;
end;
end;
end;
//当用户单击“保存”按钮时,触发该事件
procedure TForm1.btnSaveClick(Sender: TObject);
begin
//更新数据
With ADOTable1 do
if State = dsEdit then
Post;
//提交事务
with ADOConnection1 do
begin
//保存所有修改
if InTransaction then
CommitTrans;
//设置按钮和DBGrid状态
if not InTransaction then
begin
btnEdit.Enabled := True;
btnSave.Enabled := False;
btnCancel.Enabled := False;
//不允许用户编辑
DBGrid1.ReadOnly := True;
end;
end;
end;
//当用户单击“关闭”按钮时,触发该事件
procedure TForm1.btnCloseClick(Sender: TObject);
begin
Close;
end;
procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
var ret:Integer;
begin
if ADOConnection1.InTransaction then
begin
ret := MessageBox(handle, '要退出程序,是否选择保存修改?',
'数据保存', MB_YESNOCANCEL+MB_ICONQUESTION );
case ret of
//保存修改
IDYES: btnSaveClick(self);
//不保存
IDNO: btnCancelClick(self);
//取消操作
IDCANCEL: CanClose := False;
end;
end;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -