CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Delphi >  数据库相关

ADOTABLE改写数据库的数据(通过EDIT和POST),有没有真正写入数据库?

楼主stall(蜡笔小新)2002-03-09 17:18:14 在 Delphi / 数据库相关 提问

我在某窗体上有一timer和一个adotable。窗体初加载时用adotable给数据库的某记录赋值,然后启动timer,每隔一段时间探测一下那个数据库的那个记录的值。其间,我通过另一个程序(如ACCESS或其它我自已做的程序)改写那个记录的值,但后来尽管adotable每隔一段时间进行探测,但探测出来的那个记录的值总保持窗体初加载时的值。直到重新启动程序,改过的记录才被看见。为何? 问题点数:20、回复次数:9Top

1 楼ihihonline(潇潇->戒烟)回复于 2002-03-09 17:45:36 得分 0

当然不可以了,你肯定用的是  
  AdoTable.post;  
  这样,就没有提交上去,试一试如下:  
  procedure   TForm1.Button1Click(Sender:   TObject);  
  begin  
        adotable1.UpdateBatch//不用Post;  
        adotable1.UpdateRecord;//如果用post,则用它就可以了;  
  end;Top

2 楼johnwesley(我心荡漾(终于发现无界限))回复于 2002-03-09 17:50:12 得分 0

会不会和游标类型没有用dynamic型有关?  
  不过我记得以前用了dynamic好象也没有用。不知道为什么。Top

3 楼ihihonline(潇潇->戒烟)回复于 2002-03-09 18:15:31 得分 5

呵呵  
  你可以先试一试更新对不对:)  
  其实,应该就是没有进行更新,没有进行及时的将绶存中的数据写到库里边,关闭程序时,才写进行的;  
   
  这样试一试吧  
    然后启动timer中写入更新语句就可以了,保证对的;  
  Top

4 楼stall(蜡笔小新)回复于 2002-03-09 19:24:46 得分 0

再次感谢小小!!!!!!  
  你所说的更新是用REFRESH吗?我以前在ADOTABLE。POST;后面跟着用ADOTABLE。REFRESH。系统总提示出错,不知为何?  
   
  另外,据我所知UpdateBatch方法是对整个数据表进行更新,当数据量大时,会不会效率很低?  
   
  请教小小或其它高手,我怎样对刚写入的数据有效进行更新,及时的将绶存中的数据写到库里边。这是我很久以来的梦想。(不好意思,我太菜了)  
   
  以前我是学VB   的,在VB中,我用DAO。用得很顺利,但转到DELPHI后,一直被DELPHI中的ADO搞得头大,关键问题是往数据库中写了东东,但往往总是不立即更新,引发很多错误,我现在边学DELPHI边用它重写我以前用VB   作的一个程序,本应早就完工,但总是被更新问题卡住。看来此问题不解决,我就没法更快地往前走了,多谢小小帮助!  
  Top

5 楼tob(gcc)回复于 2002-03-10 01:57:31 得分 0

把adotable   close   再open   试试Top

6 楼winglion(铁石)回复于 2002-03-10 09:18:14 得分 5

你的timer   取的是那里的数据阿!如果你不更新TABLE,程序外的改变当然无法反映出来啦!每次读的时候先关闭数据集再打开试试!Top

7 楼ihihonline(潇潇->戒烟)回复于 2002-03-10 09:29:56 得分 5

如果你觉的更新太浪费时间的话,也正如TOB所说,  
  CLOSE;  
  OPEN;  
  呵呵,但是一个重新连接过程也有点浪费呀;Top

8 楼jianlei(剑雷)回复于 2002-03-10 10:40:37 得分 5

如果使用了缓存更新的话,就应使用更新操作。  
  游标类型为服务器型则使用UpdateBatch  
  游标类型为其它则使用UpdateRecord  
  Top

9 楼stall(蜡笔小新)回复于 2002-03-10 12:21:54 得分 0

各位前辈说的有道理,如果不更新TABLE,程序外的改变的确无法反映出来。试了一试解决,过程如下:  
   
          我试着在程序中的TIMER事件的开头加入把上面的数据控件CLOSE一下再OPEN一下的代码(即每次读数据库之前先关闭数据集再打开),此后情况有了转机,程序能检测到数据库的数据是的改变了的数据。但新的问题又出来了,此时若再用上面所说的另一个程序   想往数据库写入东东,数据又写不进去了,系统提示出错(错误类型与两个不同窗体,让它们对同一个数据库的同一个数据进行写操作时出的问题类似,“无法为更新行集定位,一些值可能已在最后读取后改变”)。问题出在哪呢,后来想到上面所说的那另一个程序好像在试图第二次写东东进数据库前好像也没有更新数据控件,是不是这里有问题,试了一下,果然如所料,问题解决了!!  
        在这里的结论是:在有可能有不同窗体或不同程序对同一个数据库进行写操作的情况下,不管哪个窗体(或程序),在每次要对此数据库进行读写操作前后应把进行操作的数据控件进行CLOSE及OPEN操作,以更新数据库。                       不知这个结论是否正确????  
          另外问一下,这样的一个以数据控件CLOSE又OPEN的过程是否有副作用,即太耗资源?谢谢各位。Top

相关问题

  • 写入数据库!
  • 如何用adoTable讲一个文件内容写入数据库?
  • ADODataSet ADOTable 在insert的时候、不用post自动就写入数据库????
  • vc下写入数据库
  • 如何写入数据库?
  • 数据写入数据库
  • 数据库写入问题
  • 数据库写入错误:
  • 写入数据库问题
  • 数据库无法写入

关键词

  • 数据库
  • 数据
  • 控件
  • 解决
  • adotable
  • 更新
  • 窗体
  • 程序
  • 写入
  • 操作

得分解答快速导航

  • 帖主:stall
  • ihihonline
  • winglion
  • ihihonline
  • jianlei

相关链接

  • Delphi类图书
  • Delphi类源码下载
  • Delphi控件下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo