用DBEdit在修改一个字段时,如果用户输入的数据不符,如何恢复原来的数据?我是用ADO连接数据表的,并且采用了缓存模式,且DBEdit1的Field是一对多关系中的主表中的关联字段。
试了以下几种方法都不行
我在OnExit中输入如下代码
if xxxxxxxxxxxxx then
begin
DBEdit1.SetFocus;
DBEdit1.Refresh; //让DBEdit1显示未修改前的数据,这样不行。
ShowMessage('输入的数据重复,请重新输入');
end;
改成
if XXXXX then
begin
DBEdit1.SetFocus;
DBEdit1.Text:=DBEdit1.Field.OldValue;
DBGridEh1.Refresh;
ShowMessage('您输入的数据重复');
end;
end;
执行这段代码报错:
Project Project1.exe raised exception class EDatabaseError with
message 'ADODataSet1:Dataset not in edit or insert mode'. Process
stopped. Use Step or Run to continue.改成
if XXXXX then
begin
DBEdit1.SetFocus;
DBEdit1.DataSource.DataSet.Refresh;
DBEdit1.DataSource.DataSet.Edit;
ShowMessage('输入的数据错误,请重新输入');
end;
end;
执行这段代码报错:
Project Project1.exe raised exception class EDatabaseError with
message '缺少更新或刷新的键列信息。'Process stopped. Use Step or
Run to continue.
该怎么办呐?大侠们帮着来看看。
试了以下几种方法都不行
我在OnExit中输入如下代码
if xxxxxxxxxxxxx then
begin
DBEdit1.SetFocus;
DBEdit1.Refresh; //让DBEdit1显示未修改前的数据,这样不行。
ShowMessage('输入的数据重复,请重新输入');
end;
改成
if XXXXX then
begin
DBEdit1.SetFocus;
DBEdit1.Text:=DBEdit1.Field.OldValue;
DBGridEh1.Refresh;
ShowMessage('您输入的数据重复');
end;
end;
执行这段代码报错:
Project Project1.exe raised exception class EDatabaseError with
message 'ADODataSet1:Dataset not in edit or insert mode'. Process
stopped. Use Step or Run to continue.改成
if XXXXX then
begin
DBEdit1.SetFocus;
DBEdit1.DataSource.DataSet.Refresh;
DBEdit1.DataSource.DataSet.Edit;
ShowMessage('输入的数据错误,请重新输入');
end;
end;
执行这段代码报错:
Project Project1.exe raised exception class EDatabaseError with
message '缺少更新或刷新的键列信息。'Process stopped. Use Step or
Run to continue.
该怎么办呐?大侠们帮着来看看。
begin
DBEdit1.SetFocus;
adoquery1.close;
adoquery1.open; //这样试试。
ShowMessage('输入的数据重复,请重新输入');
end;
if XXXXX then
begin
DBEdit1.SetFocus;
DBEdit1.text:=ADOquery.parambyname('字段名').asstring;
//直接去数据表中提取值;
ShowMessage('输入的数据错误,请重新输入');
end;
用 wellshddelphi(wellshd)的方法,从表却不能够与主表保持关联。
f XXXXX then
begin
DBEdit1.SetFocus;
DBEdit1.text:=ADOquery.parambyname('字段名').asstring;
//直接去数据表中提取值;
ShowMessage('输入的数据错误,请重新输入');
end;
可以搞定,只是提取当前行的某个字段值,没有影响主从表关系。
你的主从表不能保持关联,肯定另有其它原因。
如果真的不行,就用个变量吧,在onenter事件中记录原始值,
输入不正时,再还原