解决方案 »
- 关于Delphi XE2 在制作在iphone上的软件,有成功的么?
- 如何在DELPHI2007中新建CLX APPLICATION?
- 网络编程经验的高手看进来,请教问题(极具挑战性,请求帮助)
- 如何在一个窗体加快捷键,比如按f9触发“确定“按钮事件
- 兄弟们,想请问一下,如何在一个richedit编辑框中屏蔽掉回车键,即按回车时不起任何作用,该如何做?
- 如何让状态栏显示实时的时间
- 为什么我的专家分不增加,反而会减少? 斑竹知道吗?
- 麻烦高手批改作业。(winsocket问题)
- ISAPI/NSAPI 的开发
- 数据库文件替换问题
- 拷贝文件夹xp可以win7不行
- 关于delphi中fastreport的问题
Insert ->Post;
append ->Post;
edit ->Post;
每个操作都和post对应的。
append:新增操作,数据集指针会指向数据集的最后一条,此时每个字段都能编辑、修改,但是还没有保存到数据集中,对应Post后,这条记录才算新增完成
Insert和append概念上差不多,但是Insert插入就不是在最后一条,而是当前指针的前面插入一条新增的记录
Edit:编辑指针指向的记录,同样也要Post,才算修改完成。你上面的Edit后append,这个当然没有作用,相当与edit没有任何值修改的操作
像楼上说的append、Insert、edit要用post来结束当前的dsinsert或者dsedit状态,变为dsbrowser状态,第二条记录没有Post,那记录当然处于编辑状态
所以 大概是这个外部dbgrid用了beforpost,还是afterpost,还是beforeappend 什么的事件,
如果真是这样, 又该怎么解决呢?
用DBNavigator工具条上的几个按钮, 都是没问题的.
楼主,一般的操作如上。 每操作完一次,就POST。
DataSet.Fields[0].AsString := '测试1';
DataSet.Fields[1].AsString := '测试1';
DataSet.Fields[2].AsString := '测试1';
DataSet.Post; //加不加这代码, 都一样效果DataSet.Append; //第2条记录
DataSet.Fields[0].AsString := 'test2';
DataSet.Fields[1].AsString := 'test2';
DataSet.Fields[2].AsString:='test2';
//DataSet.Post;我就这这么写的啊, 问题是 最后这条post 就是会产生问题, 问题情形就是我在主贴上的图片所示的, 指针会跑到第一行, 本来输入的两行不同的内容, 结果被覆盖成一模一样的了
我自己弄了个测试的dbgrid, 数据库连个access, 可以成功append -> 赋值 -> post -> 再append下一条, 测试了3条以上 都没问题, 这个测试dbgrid是插入一条,结束时候就保存到access里面的.
而我最终的目标程序上的dbgrid, 是在输入了n条后,想真正存入数据库, 需通过一个入库按钮.这也说明我的对外部dbgrid赋值的程序代码, 是可以正常工作的(至少在我另外写的测试dbgrid上可以)
猜想可能是由于目标程序的dbgrid上有些比如beforepost,还是afterpost等这样的事件作怪, 因为我做了个测试, 手工录入了几行记录后, 全部生效(还正式未存入数据库), 然后只给这个dbgrid发送了一条dataset.post代码, 结果 本来指针是在最底下一条记录的, 跑到了第一条. 当然由于所有已经录入的记录都是浏览状态, 所以值没得改变.
可是如果是我用代码赋值的话, append第2条然后赋值后, 由于第2条还在插入状态, 可以修改, 结果被第一条的值给覆盖了. 这接下来的代码就进行不下去了.请问这些情况, 是不是可以确定我的目标dbgrid存在着一些beforepost等等的事件, 我可以把这些事件都找出来吗, 再屏蔽掉?
如果不是这些事件作怪, 又是哪里的问题?
BeforePost := nil;
// BeforeInsert := nil;
BeforeDelete := nil;
BeforeScroll := nil;
BeforeRefresh := nil;
BeforeOpen := nil;
BeforeClose:= nil;
BeforeEdit := nil;
BeforeCancel:= nil;
OnPostError := nil;
OnCalcFields := nil;
OnDeleteError:=nil;
OnNewRecord:=nil;
OnFilterRecord:=nil;
OnEditError:=nil;AfterPost := nil;
AfterInsert := nil;
AfterDelete := nil;
AfterScroll := nil;
AfterRefresh := nil;
AfterOpen:= nil;
AfterClose := nil;
AfterEdit:= nil;
AfterCancel:= nil;把找得到的什么事件都屏蔽了, 还是没作用, 晕了
首先,dbgrid只是一个数据感知组件,append 是数据集的功能,你把2者弄混淆了。其次,数据集的工作方式就是:你说的(我自己弄了个测试的dbgrid, 数据库连个access, 可以成功append -> 赋值 -> post -> 再append下一条, 测试了3条以上 都没问题, 这个测试dbgrid是插入一条,结束时候就保存到access里面的.)
不可能你append很多条以后,再一次性POST
我大概知道是用了缓存的方式, 然后再最后保存进数据的时候, 有一些beforepost等事件在起作用, 但是是外部程序的事件, 也不知道怎么弄. 先结了