首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ Builder >

怎么针对性修改DBGridEh对数据库的修改

2013-07-09 
如何针对性修改DBGridEh对数据库的修改不太用CB,感觉DBGridEh与数据库表的连接太紧密。不知道如何改变该控

如何针对性修改DBGridEh对数据库的修改
不太用CB,感觉DBGridEh与数据库表的连接太紧密。不知道如何改变该控件对表的更新修改。
情况是这样的,某个字段有一定的格式需求,比如第一个符号不能为数字,但客户的输入有可能第一个符号为数字,那么想自动在其前面插入一个字母。DBGridEh的UpdateData事件响应里不能得到是哪条记录正在被更新,而且也不知道在此事件响应里数据库是否已经被更新。控件的关系链是ADOTable->DataSource->DBGridBh.
[解决办法]
某个字段有一定的格式需求: 用Field事件来控制。OnFieldChange 
数据库是否已经被更新:可用DataSet事件,BeforePost与AfterPost。

DBGridEh只用于显示。
[解决办法]
对象各司其职,要实现一定的功能,首先要找对对象,不然就是对牛弹琴。
[解决办法]
在ADOTable控件的BeforePost事件里写
[解决办法]
BeforePost肯定是当前行。你要判断
DataSet->FieldByName("字段名")->Value == ...
这样就可以了
[解决办法]
TField::OnChange事件。

BeforePost 事件中,如果不想Post , 则用 Abort() 中止提交过程,或用Cancel() , 取消回归原始记录。

TField:OldValue 原记录的值 Value 当前值。如果 OldValue != Value 则值被修改。

当字段的值被修改后,触发 TField::OnChange事件。这里可用来根据字段A自动生成其他字段的值。
当字段进行输入后,赋值前会触发OnSetText事件。
对字段的值可输入格式有要求时,可用 TField::OnSetText 事件,在事件中用代码对字段进行赋值。

有关字段与数据集的操作,基本上都集中在 TDataSet TField 这两个类上,基本上DBGrid类只是控制显示界面。


[解决办法]
ABort();
直接调用此方法,它并不是某个类的方法。
[解决办法]

void __fastcall TForm1::ADOQuery1BeforePost(TDataSet *DataSet)
{
  if( DataSet->FieldByName("MFN")->AsString.Trim().SubString(1,1) == "1"  )
     DataSet->FieldByName("MFN")->AsString = "a"+DataSet->FieldByName("MFN")->AsString;        
}

以让例子我测试通过了啊,可以修改数据

热点排行