Table的Post问题(100分)

  • 主题发起人 主题发起人 leonstart
  • 开始时间 开始时间
L

leonstart

Unregistered / Unconfirmed
GUEST, unregistred user!
我写的一个数据库程序,其中Table在post时有时正常,有时出现Dataset not in edit or
insert mode的错误提示,可是我每次都调用了EDIT方法的啊。而且Append后调用post一般
都没问题,只有delete后post是这样(有时修改后post也是如此)。我实在是不知道怎么
回事。盼望各位高手解答!
 
贴出源码。
 
建议你在edit事件前close一下。
 
在调用POST前,请试一下
Table.Modified, 看一下是否每一次都为真.
 
oracle??

indexFieldnames:=...

or add patches
 
with Table do if State in [dsEdit, dsInsert] then Post;
这是标准写法
 
奇怪,Delete之后还需要Post吗?Edit后Table.state是dsEdit,Insert后是dsInsert.
delete之后是dsBrowse,当然不在修改状态.所以你不用POST.只是删除前要提示别人要不要
删除.若你还想保险一点,加上事务处理.
Database.Commit,Rollback,Intranstracion,StartTranscation;等等.
 
把EXCLUSIVE属性改为TRUE试试。
 
Delete前不加Edit后不加Post.否则就是这样的错误
Dataset not in edit or insert mode

对比一下zhangkan说的,不正是这道理。
 
多谢各位,其实DELETE倒不是主要的问题。主要就是有时修改时也会这样啊。
操作的是PARADOX表。代码如下
Table1.Edit;
Table1.First;
While Not Table1.Eof do
begin
if Length(Table1.FieldByName('Fs_Time').AsString)=7 then
Table1.FieldByName('Fs_Time').AsString:='0'+Table1.FieldByName('Fs_Time').AsString;
Table1.Next;
end;

to nsj
你则思路我也想过,但是不行。
 
多谢各位的参与,问题我昨天下午自己解决了(不过DFW好像从昨天下午开始都上不来)
其实改一行代码就可以了:
Table1.First;
While Not Table1.Eof do
begin
if Length(Table1.FieldByName('Fs_Time').AsString)=7 then
begin
Table1.Edit;
Table1.FieldByName('Fs_Time').AsString:='0'+Table1.FieldByName('Fs_Time').AsString;
end;
Table1.Next;
end;

也就是把EDIT放在每一个修改的前面就OK了。
再次感谢各位!发分吧!
 
多人接受答案了。
 
后退
顶部