使用控件有:
DBNavigator1: TDBNavigator;
DBGrid1: TDBGrid;
DataSource1: TDataSource;
ADOTable1: TADOTable;
还有多个DBEDIT,每个字段对应一个,DBGrid用于浏览数据,DBEDIT用于编辑修改数据!但在更改DBGrid中数据的过程中如果误(操作)移动了DBGrid的滚动条,数据则被修改,如若不想这样(不想在移动滚动条时保存数据)该怎样做?
各位大侠请支招!在线等待
DBNavigator1: TDBNavigator;
DBGrid1: TDBGrid;
DataSource1: TDataSource;
ADOTable1: TADOTable;
还有多个DBEDIT,每个字段对应一个,DBGrid用于浏览数据,DBEDIT用于编辑修改数据!但在更改DBGrid中数据的过程中如果误(操作)移动了DBGrid的滚动条,数据则被修改,如若不想这样(不想在移动滚动条时保存数据)该怎样做?
各位大侠请支招!在线等待
解决方案 »
- 用SaveDBGridEhToExportFile方法导出数据记录到excel时,长文本字段的内容在excel单元格中不能显示,为空,咋办?
- 关于ftp下载问题
- (急) flash播放器中如何实现有文件播放列表,供用户选择播放;
- 诚征石家庄delphi高手求教、合作
- ◆◆机房设备管理,建议者有分(好建议给500分)◆◆
- type声明位置,在线等待!
- 高分寻求多国语言源码!
- 如何用代码控制fastreport里的ole控件里的OLE对象
- 进销存系统中的‘账套’一般是怎么实现的??
- 发送消息问题
- 我在File->New->other->Forms里面却看不到本来应该增加的3个组件:QuickReport List,QuickReport Labels,QuickReport Master/Details
- 拖放的问题(我查遍了都没有解决的问题)!!!
locktype 设为ltBatchOptimistic
这样便不会保存
除非运行
ADOTable1.UpdateBatch;才真正保存。
但是这样会增加并保存在编辑的字段的编辑前数据
例如设置Adotable的locktype 为ltBatchOptimistic后;
在编辑字段“姓名”(编辑前为1,编辑后为2)时,移动滚动条,虽不会使现在的这条记录变为2,但是会在DBGrid的末尾添加一条姓名为1记录
DBGrid1: TDBGrid;
DataSource1: TDataSource;
ADOTable1: TADOTable;
还有多个DBEDIT,每个字段对应一个,DBGrid用于浏览数据,DBEDIT用于编辑修改数据!注:Adotable的locktype已设为了:ltBatchOptimistic-----------------全代码如下:
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, DB, ADODB, ExtCtrls, DBCtrls, Grids, DBGrids, StdCtrls, Mask;type
TForm1 = class(TForm)
DataSource1: TDataSource;
DBGrid1: TDBGrid;
DBNavigator1: TDBNavigator;
ADOTable1: TADOTable;
Button1: TButton;
DBEdit1: TDBEdit;
DBEdit2: TDBEdit;
DBEdit3: TDBEdit;
procedure Button1Click(Sender: TObject);
procedure ADOTable1BeforePost(DataSet: TDataSet);
procedure FormCreate(Sender: TObject);
procedure DBEdit1Change(Sender: TObject);
private
{ Private declarations }
FIsPost: boolean;
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
begin
dbgrid1.Options:=[dgTitles,dgcolLines,dgRowLines,dgCancelOnExit ];
if (adotable1.State=dsEdit) or (adotable1.State=dsInsert) then
begin
ADOTable1.post;
FIsPost:=false;
end
else
showmessage('不能保存'); //FIsPost:=true;
end;procedure TForm1.ADOTable1BeforePost(DataSet: TDataSet);
begin
if FIsPost=true then
begin
FIsPost := False;
adotable1.Post; end
else
adotable1.Cancel;
end;procedure TForm1.FormCreate(Sender: TObject);
begin
FIsPost:=false;
end;procedure TForm1.DBEdit1Change(Sender: TObject);
begin FIsPost := False; //adotable1.Cancel;
end;end.但是这样会增加并保存在编辑的字段的编辑前数据
例如设置Adotable的locktype 为ltBatchOptimistic后;
在编辑字段“姓名”(编辑前为1,编辑后为2)时,移动滚动条,虽不会使现在的这条记录变为2,但是会在DBGrid的末尾添加一条姓名为1记录
post完以后,
没有用
ADOTable1.UpdateBatch;是不会保存到数据库的,虽然界面上的数据已经改动。
那还是用你那个FIsPost 变量控制吧,也不用把Adotable的locktype设成ltBatchOptimistic了。
procedure TForm1.ADOTable1BeforePost(DataSet: TDataSet);
begin
if not FIsPost then
begin
adotable1.Cancel;
adotable1.edit;
end;
end;
//注意,beforepost里不要再加post了。
你之前说“会在DBGrid的末尾添加一条姓名为1记录”就是这个原因。