三层应用中clientDataSet控件的问题 找管家婆软件下载
我只要将鼠标点击其他控件,则DBEdit1中的值就反应到DBGrid1中了。
我试着在DBedit1的事件onExit中加入对其值加密代码也没有用。在ClientDataSet的BeforePost中加入代码也没有用。
不知哪位大侠能指点一下,谢谢!
2楼: 在ClientDataSet中添加所有的表字段,然后找到需要加密字段的Onchange事件,在这个事件中将值加密后再赋值,出现的就是加密后的了。大致方法如下
procedure form1.Field1onchange(Sender:TField,....)
var
tpEvent:TNotifyFieldEvent;
begin
with Sender do
Try
TpEvent:=OnChange;
OnChange:=nil; //加把原来的onChange禁用一下,否则下一句重新赋值会引起多次事件触发
AsString:=Encode(AsString); //加密后重新赋值
Finally
OnChange:=tpEvent;
tpEvent:-nil
end;
end;
以上代码基本正确,但不排除拼写错误 如管家婆软件下载
3楼: 但我的ClientDataSet是动态取数据呀,也就是指定了commandtext值来取数据的。
那如何来取所有字段呢?
4楼: private
{ Private declarations }
Procedure MyOnChange(Sender:TField); //定义一个用于加密数据的过程
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
Procedure TForm1.MyOnChange(Sender:TField);
var tpEvent:TFieldNotifyEvent;
begin
With Sender do
try
tpEvent:=OnChange;
OnChange:=nil;
AsString:=''<''+AsString+''>''; //加密函数
Finally
OnChange:=tpEvent;
tpEvent:=nil;
end;
end;
procedure TForm1.ClientDataSet1AfterOpen(DataSet: TDataSet);
begin //在打开表之后找到那个要加密的字段,然后把过程入口赋值给加密字段
with Self.ClientDataSet1 do
if Assigned(FindField(''Code'')) then
FindField(''Code'').OnChange:=MyOnChange;
end;
以上实际测试过了,在D7 +XP 下通过
5楼: 不要跟我说动态的语句字段名也不知道哦
6楼: 为什么在ClientDataset的BeforePost中加入代码没有用?
库存管理软件版7楼: beforePost只有在记录被POST之前才会执行,此时如要你只改了字段值,但又没POST时(如state 是dsInsert 或者 dsEdit, 可以看表格的分隔栏,看是不是还是"I"样),输入数据就会在未加密前被显示
onChange的执行时机是在数据被改变,从键盘缓冲区进入内存后立即执行的,所以时机上比较好
8楼: 难道我修改了DBEdit1中的值后,再点击其他的控件,没有进行post吗?那为何DBGrid1中显示的是修改后的值?我理解是应该是post之后才会将修改后的数据显示在DBGrid1中呀?
实在愚笨,还请指点,谢谢!
9楼: 接受答案了.