Table1.post编译后运行时出错:‘Dataset not in edit or insert mode’(50分)

  • 主题发起人 主题发起人 631229
  • 开始时间 开始时间
6

631229

Unregistered / Unconfirmed
GUEST, unregistred user!
我的练习:数据编辑器。Form1里有‘文件’菜单,其下级菜单有新建、打开、导入、导出、
保存、退出。另外var:Table1:TTable1;Dbgrd1:TDbgrid;DbNavigator1:TDbNavigator;
DataBase1:TDataBase;它们在Form1的Oncreate中通过Table1:=TTable.Create(self);的方
法动态创建并设置好相关属性。在‘文件->新建’的响应代码中设Table1.tablename:=您的
键盘输入,还有另外一些属性,这些都没有语法问题,但‘文件->保存’的响应代码:
Table1.post;却在编译后运行时出错:‘Dataset not in edit or insert mode’(运行时已
能在Dbgrid1中输入数据,然后选文件->保存’时出错)。请各位大虾帮忙分析是何原因!(这
个练习的原代码总共不到20K,如有热心大虾我可以发过去请他分析)
这个问题在csdn论坛中没有得到满意答案,我就到这儿来了!
 
你在Table1.Post前加上

Table1.Edit;

将数据集置成编辑状态
 
table的state必须是处于insert或edit时候才可以post
 
上面两位的答案都是对的,,如果你有特殊要求的话,可以采用把数据copy到剪贴板,再用
再传送到Table中( dbedit.PasteFromClipboard )
 
hnzgf和luyear的回答在Csdn论坛上也有,但我在Table1.post之前有Table1.edit;Table1.append;等
因此问题可能没有那么简单。哪位大虾肯留下Email我发代码过去请他分析?(大约10k)
hnzgf和luyear:虽然我不能给你加分(问题没解决),但可以给你推荐一个Freepascal:
http://www.freepascal.org,我最近很忙,但我想有时间时将它的User's Manual 翻译,
个人能力有限,不知有谁愿意与我合作(可别指望肯定有名利哦)?
 
当table处于edit状态时,调用post方法,将当前记录的修改写入数据表
当table处于insert状态时,调用post方法,将新记录写入数据表
当table处于setkey状态时,调用post方法,将table变为浏览状态
因此,你必须使table变成edit或insert状态,才能用post修改记录
 
可能是在Table1.post之前程序已经提交过Table1了(不知道源代码如何,故这样分析)。
你试试这样写:if (Table1.state=dsEdit) or (Table1.state=dsInsert)
then Table1.post;
如果还不行,请将源代码email给我。
 
你放一个DBNavigator在表单里,设好DataSource,就可以看到当前Table的状态.
 
当table处于edit状态时,调用post方法,将当前记录的修改写入数据表
当table处于insert状态时,调用post方法,将新记录写入数据表
当table处于setkey状态时,调用post方法,将table变为浏览状态
因此,你必须使table变成edit或insert状态,才能用post修改记录

 
post前一定要处于EDIT状态!
还有TABLE的属性REQUEST要为TRUE.
 
在做两层结构程序时或以使用
if table.state in (dsedit,dsinsert) then table.post
三层结构时,有时状态反映不确切,如果你确实做三层结构,我再给出建议!
 
原码
ok923@163.net
 
如果表单上有DBGrid1之类与table相连,在用户移动光标时,会自动post的。
这影响了table的状态。
如果不是这个原因,请e-mail:jianl@163.net
 
多人接受答案了。
 
后退
顶部