大吓大吓快救我,分数统统给你们!(85分)

  • 主题发起人 主题发起人 jwf
  • 开始时间 开始时间
J

jwf

Unregistered / Unconfirmed
GUEST, unregistred user!
我在编程过程中经常碰到'Talbe not in Edit or Insert State'但有时我明明已打开了此表且Table.Edit,还是不行,请大吓教我绝招,若遇此问题,应该往哪里查找原因,并如何解决?
 
1)你用了多个控件指向同一个表
2)你多次用table.edit或者Table.Edit
3)请贴上源码
 
add
table.open;
table.edit;

Or 贴上源码

多次用table.edit或者Table.Edit is No Problem/
 
有时这种情况是莫名其妙的,,,最原先我编的时候也是这样,
学了几天之后,我就用如下:
ssss为其中的一个字段记录
uses xxx,xxx,xxx,xxxx,... ,Clipbrd;
....
....
Clipboard.AsText:= ssss;
dbedit1.PasteFromClipboard;
这样子是比较菜的,但挺管用。
 
我想可能是这种类型的错误吧:

Table1.Edit;
Table1.DoSomething;
Table1.Post; //这个时候不要以为Table1还是Edit状态!

因此要在Table1.Post之前再加上Table1.Edit;

试以下吧,但愿能帮你解决。
 
各位老大,我的源码如下:

procedure TEditOrdersForm.InsertBtnClick(Sender: TObject);{此EditOrdersForm为模态窗口}
begin
if Navigator.DataSource=MastData.OrdersSrc then {用Navigator来判断当前激活哪张表,Order/Items为主/细表,Items.Mastsource=Orders,Items.MastFields=OrderNo}
DataMod.Orders.Insert {这一步可以执行,且主/细表同时插入}
else if
Navigator.DataSource=DataMod.ItemsSrc{在同一OrderNo时插入多个Items记录}
then
begin
DataMod.Items.open;
DataMod.Items.edit;{到此步执行正常,并在DbGrid中能看到当前记录处于"I"状态}
DataMod.Items.Insert;{出现"Items not in edit or insert state"错误}
end;
end;

请各位老大详加指点,小生感谢不尽!
 
1、不需要在 Insert 前用 Edit, Insert会自动转入到 edit state
2. 你的 items 表的 AfterEdit/BeforeEdit/BeforeInsert/OnNewRecord事件中
是不是写了什么代码?以致使数据集的状态变化了。
 
>>
使用 Query ,习惯了就好!
 
1.我的Items的事件:
AfterEdit: Orders.edit;
BeforeEdit: Orders.edit;
BeforeInsert:Orders.edit;
BeforeDelete:Orders.edit;
OnNewRecord:ItemsOrderNo.value:=OrdersOrderNo.value;
BeforeOpen: Orders.Open;

2.请问用Query的好处在哪里,它能不管DataSet的各种状态吗?我对SQL不是很熟,像这种情况用Query怎么解决?还望老大详解一二,不胜感谢!

 
我看你你贴的代码,总感觉你没有把它贴完,好象漏了什么吧?有兴趣你把相关的程序E_mail给我,让我看一看。
 
AfterEdit: Orders.edit;BeforeEdit: -----可以不用Orders.edit;BeforeInsert:Orders.edit;------可以不用
BeforeDelete:Orders.edit;-----没用
OnNewRecord:ItemsOrderNo.value:=OrdersOrderNo.value;--------完全不必要,建立主从表后,从表的联接字段自动获得。
BeforeOpen: Orders.Open;
 
>>请问用Query的好处在哪里
好多……而且,使用 Query 后,把RepireLive设置为True;
也可以使用Table的各种事件 如: Query.Append……
如果老使用Table,会太依赖BDE的,而且,还有数据锁的问题,
当开发网络数据库时, 数据锁的问题会很突出的……
 
用SQL语句如下:
设置两个按钮,第一个用QUERY.INSERT;
第二个按钮:query.sql.text:='insert into 表名 values(值)'.
 
象这样的问题应该是
你用的table与另外的datasourse关联了
比如你的table 用了mastersourse
如果你的mastersourse变化或者与table时一对多的关系
那么你现在的table.state 不能=edit
 
请在Table1.edit之前加上Table1.open,调用完后请补一句Table1.close;
 
我认为可能是其他地方移动了记录指针,导致数据库从INSERT OR EDIT STATE转入BROWSE,
建议使用:
IF TABLE1.STATE IN [DSEDIT,DSINSERT] THEN
TABLE1.POST
ELSE
.
.
.
当然,在USER中要加入DB单元.
 
多人接受答案了。
 
后退
顶部