如上了
解决方案 »
- 这儿的file name是指什么意思,,详说下。。多谢。
- Ehlib4.14版本,在TDBGrideh上使用过滤功能,用Crtl+Shift切换输入法,此时输入第一个字母总是打出英文字母,第二个字母才进入输入法,有
- 单元文件中定义对象是的问题 。。。急 。。。求助
- 支持三箭做斑竹!
- ■ 请问如何设置EDIT文本框上中下对齐,不是左中右对齐■
- 有没有判断目录为空的API??
- 网络游戏的地图应该怎么搞?
- delphi 的优越性在哪方面体现的最好?
- 请问:TwebBrowser的属性和事件的详细资料说明?
- 关于十六进制的一些问题!!!!!!UP给分的
- 大家帮忙呀!如何获得文件及文件夹的各种属性
- 气人!!!D6的ADO是不是有BUG啊???
Query.RequestLive:=True;
可以在Query.Delete前加上
if NOT Query.CanModify then
Query.Edit;
var
departdel,content:string;
query1:tquery;
//TEMPtable:ttable;
begin
departdel:=person.TreeView1.Selected.Text;
content:='确认删除:'+departdel;
if Application.MessageBox(pchar(content),'提示',mb_okcancel or mb_iconinformation)=mrok then
try
try
xldm.DB_XL.StartTransaction;
query1:=tquery.Create(self);
query1.Databasename:='DBXL';
//query1.Database.ReadOnly:=false;
query1.Close; //delete the department
query1.SQL.Clear;
query1.SQL.Add('delete from department where id=:departID');
query1.ParamByName('departID').AsString:=pstring(person.TreeView1.Selected.Data)^;
//query1.Prepare;
query1.RequestLive:=true; query1.ExecSQL;
//query1.Edit;
query1.Post; query1.Close; //delete the relation person
query1.SQL.Clear;
query1.SQL.Add('delete from person where id=:departID');
query1.ParamByName('departID').AsString:=pstring(person.TreeView1.Selected.Data)^;
//query1.Prepare;
query1.RequestLive:=true;
query1.ExecSQL;
query1.post;
xldm.DB_XL.Commit; treeview1.Items.Delete(treeview1.Selected);
table1.close;
table1.open;
table2.close;
table2.Open;
finally
query1.Free;
end; except
xldm.DB_XL.Rollback; end;end;
Query1.Close;
Query1.Open;
procedure TDataSet.Post;
begin
UpdateRecord;
case State of
dsEdit, dsInsert:
begin
DataEvent(deCheckBrowseMode, 0);
CheckRequiredFields;
DoBeforePost;
CheckOperation(InternalPost, FOnPostError);
FreeFieldBuffers;
SetState(dsBrowse);
Resync([]);
DoAfterPost;
end;
end;
end;
而UpdateRecord的代码如下:
procedure TDataSet.UpdateRecord;
begin
if not (State in dsEditModes) then DatabaseError(SNotEditing, Self);
DataEvent(deUpdateRecord, 0);
end;
其中 dsEditModes = [dsEdit, dsInsert, dsSetKey];
所以当Query1的State不在dsEdit,dsInsert和dsSetKey时会调用
DatabaseError(SNotEditing, Self);这一句SNotEditing在DbConsts.pas单元定义如下:SNotEditing = 'Dataset not in edit or insert mode';
也就是你所碰到的“数据集状态不可编辑”的错误
这样的解释满意了吗?
if Query.State<>dsEdit then
Query.Edit
Query.Delete
后才需要使用Query.Post;
在执行Query.Delete语句前,必须保证Query处于编辑状态,否则也会出错。