我的完全代码如下,要求根据用户在picklist下拉框的不同选择,改变不同数据格里的值,注意不是只改当前纪录行,是任意行的记录。中间涉及到当前记录行的切换。前面代码都没问题了,就是要存库时报错!!我也知道要ADOQuery.edit,但还是总出错?
是不是ADOQuery.first,moveby,next等也要edit?我调试时发现post语句执行没有错,乃至DBGridEh_BijiaoColumnsUpdateData整个过程都执行完都没错,而且到sql里看数据库表里的值也都更改而且存了!!!但在这个过程执行完后,要调用DBGridEh里的UpdateValues时出错!!说‘dataset not in edit or insert’,肯定不是控件的错,但不知道错哪里了。帮帮忙!!
procedure TForm_Bijiao.DBGridEh_BijiaoColumnsUpdateData(Sender: TObject;
var Text: String; var Value: Variant; var UseText, Handled: Boolean);
var
s:String;
m,n,i:integer;
begin
if DBGridEh_Bijiao.SelectedIndex > 0 then
begin for i:=0 to DBGridEh_Bijiao.ComponentCount-1 do
if DBGridEh_Bijiao.Components[i] is TInplaceEdit then
s:= TEdit(DBGridEh_Bijiao.Components[i]).Text; m:=DBGridEh_Bijiao.Row-1;
n:=DBGridEh_Bijiao.Col-1;
n:=(n-1) DIV 2; if s='极其重要' then
begin DBGridEh_Bijiao.SelectedField.Value:=s; //将当前编辑格的值写进库 if n=0 then
ADOQuery_Bijiao.First
else ADOQuery_Bijiao.MoveBy(n-m); //移动当前记录到指定行
ADOQuery_Bijiao.Fields[2*m+1].Value:='极其次要'; //写指定格的值 if not (ADOQuery_Bijiao.State in [dsEdit, dsInsert]) then ADOQuery_Bijiao.Edit;
ADOQuery_Bijiao.Post; end; end; {if DBGridEh_Bijiao.SelectedIndex > 0}
end;{procedure}
是不是ADOQuery.first,moveby,next等也要edit?我调试时发现post语句执行没有错,乃至DBGridEh_BijiaoColumnsUpdateData整个过程都执行完都没错,而且到sql里看数据库表里的值也都更改而且存了!!!但在这个过程执行完后,要调用DBGridEh里的UpdateValues时出错!!说‘dataset not in edit or insert’,肯定不是控件的错,但不知道错哪里了。帮帮忙!!
procedure TForm_Bijiao.DBGridEh_BijiaoColumnsUpdateData(Sender: TObject;
var Text: String; var Value: Variant; var UseText, Handled: Boolean);
var
s:String;
m,n,i:integer;
begin
if DBGridEh_Bijiao.SelectedIndex > 0 then
begin for i:=0 to DBGridEh_Bijiao.ComponentCount-1 do
if DBGridEh_Bijiao.Components[i] is TInplaceEdit then
s:= TEdit(DBGridEh_Bijiao.Components[i]).Text; m:=DBGridEh_Bijiao.Row-1;
n:=DBGridEh_Bijiao.Col-1;
n:=(n-1) DIV 2; if s='极其重要' then
begin DBGridEh_Bijiao.SelectedField.Value:=s; //将当前编辑格的值写进库 if n=0 then
ADOQuery_Bijiao.First
else ADOQuery_Bijiao.MoveBy(n-m); //移动当前记录到指定行
ADOQuery_Bijiao.Fields[2*m+1].Value:='极其次要'; //写指定格的值 if not (ADOQuery_Bijiao.State in [dsEdit, dsInsert]) then ADOQuery_Bijiao.Edit;
ADOQuery_Bijiao.Post; end; end; {if DBGridEh_Bijiao.SelectedIndex > 0}
end;{procedure}
ADOQuery_Bijiao.Post; ADOQuery_Bijiao.Edit;
这样?
ADOQuery_Bijiao.Post;
ADOQuery_Bijiao.Post;
ADOQuery_Bijiao.Fields[2*m+1].Value:='极其次要'; //写指定格的值这句话之前要先edit!再赋字段值
楼主你太不仔细了!
然后再修改数据
再:ADOQuery_Bijiao.Post;
begin
ADOQuery_Bijiao.Append;
ADOQuery_Bijiao.Edit;
ADOQuery_Bijiao.Fields[2*m+1].Value:='极其次要';
.....
ADOQuery_Bijiao.Post;
end;
我的procedure TForm_Bijiao.DBGridEh_BijiaoColumnsUpdateData(Sender: TObject;
var Text: String; var Value: Variant; var UseText, Handled: Boolean);
var
s:String;
m,n,i:integer;
begin
if DBGridEh_Bijiao.SelectedIndex > 0 then
begin for i:=0 to DBGridEh_Bijiao.ComponentCount-1 do
if DBGridEh_Bijiao.Components[i] is TInplaceEdit then
s:= TEdit(DBGridEh_Bijiao.Components[i]).Text; m:=DBGridEh_Bijiao.Row-1;
n:=DBGridEh_Bijiao.Col-1;
n:=(n-1) DIV 2; if s='极其重要' then
begin
ADOQuery_Bijiao.Edit; DBGridEh_Bijiao.SelectedField.Value:=s; //将当前编辑格的值写进库 if n=0 then
ADOQuery_Bijiao.First
else ADOQuery_Bijiao.MoveBy(n-m); //移动当前记录到指定行
ADOQuery_Bijiao.Fields[2*m+1].Value:='极其次要'; //写指定格的值 if not (ADOQuery_Bijiao.State in [dsEdit, dsInsert]) then ADOQuery_Bijiao.Edit;
ADOQuery_Bijiao.Post; end; end; {if DBGridEh_Bijiao.SelectedIndex > 0}
end;{procedure}
我上面的代码是我将edit代码无数次移动中的一次,
我甚至在所有修改前都加过,也不行啊: 而且要特别指出的是,我在单步执行的时候都没有报错哦,只有在该过程执行完后,去DBGridEh里的ColumnsUpdateValues里才出错的!!
procedure TForm_Bijiao.DBGridEh_BijiaoColumnsUpdateData(Sender: TObject;
var Text: String; var Value: Variant; var UseText, Handled: Boolean);
var
s:String;
m,n,i:integer;
begin
if DBGridEh_Bijiao.SelectedIndex > 0 then
begin
for i:=0 to DBGridEh_Bijiao.ComponentCount-1 do
if DBGridEh_Bijiao.Components[i] is TInplaceEdit then
s:= TEdit(DBGridEh_Bijiao.Components[i]).Text;
m:=DBGridEh_Bijiao.Row-1;
n:=DBGridEh_Bijiao.Col-1;
n:=(n-1) DIV 2;
if s='极其重要' then
begin ADOQuery_Bijiao.Edit;
DBGridEh_Bijiao.SelectedField.Value:=s; //将当前编辑格的值写进库
if n=0 then
ADOQuery_Bijiao.First
else ADOQuery_Bijiao.MoveBy(n-m); //移动当前记录到指定行 ADOQuery_Bijiao.Edit;
ADOQuery_Bijiao.Fields[2*m+1].Value:='极其次要'; //写指定格的值
ADOQuery_Bijiao.Edit;
ADOQuery_Bijiao.Post;
end;
end; {if DBGridEh_Bijiao.SelectedIndex > 0}
end;{procedure}
var Text: String; var Value: Variant; var UseText, Handled: Boolean);
var
s:String;
m,n,i:integer;
begin
if DBGridEh_Bijiao.SelectedIndex > 0 then
begin for i:=0 to DBGridEh_Bijiao.ComponentCount-1 do
if DBGridEh_Bijiao.Components[i] is TInplaceEdit then
s:= TEdit(DBGridEh_Bijiao.Components[i]).Text; m:=DBGridEh_Bijiao.Row-1;
n:=DBGridEh_Bijiao.Col-1;
n:=(n-1) DIV 2; if s='极其重要' then
begin
ADOQuery_Bijiao.Edit;
DBGridEh_Bijiao.SelectedField.Value:=s; //将当前编辑格的值写进库
ADOQuery_Bijiao.Post; //----post here if n=0 then
ADOQuery_Bijiao.First
else
ADOQuery_Bijiao.MoveBy(n-m); //移动当前记录到指定行 ADOQuery_Bijiao.Edit; //--edit here
ADOQuery_Bijiao.Fields[2*m+1].Value:='极其次要'; //写指定格的值
ADOQuery_Bijiao.Post; //----post here
end; end; {if DBGridEh_Bijiao.SelectedIndex > 0}
end;{procedure}