CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C++ Builder >  基础类

DBgrid中,新增的数据显示不出来

楼主WhyAndAnswer(明白)2002-05-28 15:35:20 在 C++ Builder / 基础类 提问

有一个Query连SQL2000,requestlive已设为true.现在Append,填入数据,再Append,数据库指针指在刚才新增的记录上,刚才新增的记录在DBgrid中消失(打开sql2000,数据已更新到数据库)。  
  现在的问题是如何使那条记录正常显示出来。    
   
  下面是我的一种解决方法:    
  我现在用cachedupdates做,问题是每条记录做完后必须更新到数据库中,我applyupdate放在afterpost中做,但当我新增一条记录后,马上去修改数据,就会出现"at   end   of   table"的错误。而在applyupdate后加一个Commitupdate,上述问题不出现,但数据又不能显示出来。  
   
  问题点数:50、回复次数:39Top

1 楼rainbowcn(弱水三千,只取一瓢)回复于 2002-05-28 15:51:35 得分 2

是不是因为你的Query1中的数据没有更新的原因。  
  试试把Query1->Open()执行一下。Top

2 楼WhyAndAnswer(明白)回复于 2002-05-28 15:56:10 得分 0

怎么做?Top

3 楼WhyAndAnswer(明白)回复于 2002-05-28 16:01:08 得分 0

refresh不成功,  
  Query1->Close();  
  Query1->Open();  
  肯定是可以的,但总不能一append就做这样的工作吧。Top

4 楼rainbowcn(弱水三千,只取一瓢)回复于 2002-05-28 16:08:11 得分 2

我觉得好象没有别的办法。Top

5 楼rainbowcn(弱水三千,只取一瓢)回复于 2002-05-28 16:09:32 得分 4

Re-fetches   data   from   the   database   to   update   a   dataset抯   view   of   data.  
   
  void   __fastcall   Refresh(void);  
   
  Description  
   
  Call   Refresh   to   ensure   that   an   application   has   the   latest   data   from   a   database.   For   example,   when   an   application   turns   off   filtering   for   a   dataset,   it   should   immediately   call   Refresh   to   display   all   records   in   the   dataset,   not   just   those   that   used   to   meet   the   filter   condition.  
   
  Note: The   Refresh   method   does   not   work   for   all   TDataSet   descendants.   In   particular,   TQuery   components   do   not   support   the   Refresh   method   if   the   query   is   not   "live"?   To   refresh   a   static   TQuery,   close   and   reopen   the   dataset.Top

6 楼WhyAndAnswer(明白)回复于 2002-05-28 16:13:04 得分 0

用cachedupdates做,有没有什么办法Top

7 楼rainbowcn(弱水三千,只取一瓢)回复于 2002-05-28 16:17:41 得分 3

上面是BCB6中关于Refresh()方法的说明,看这一句:TQuery   components   do   not   support   the   Refresh   method   if   the   query   is   not   "live"?   它说TQuery不支持Refresh()如果query不是“live”,我不太明白。你认为怎么解释好呢?Top

8 楼luyd(淡儿)回复于 2002-05-28 16:21:22 得分 3

我是这么做的:  
  Query1->Enabled=false;  
  Query1->Enabled=true;Top

9 楼WhyAndAnswer(明白)回复于 2002-05-28 16:25:00 得分 0

没有唯一索引,不能refresh,这种情况也应叫"not   live".  
  live这个词很活,很难解释。Top

10 楼WhyAndAnswer(明白)回复于 2002-05-28 16:28:17 得分 0

没有唯一索引,不能refresh,这种情况也叫"not   live"?  
  live这个词很活,很难解释。Top

11 楼WhyAndAnswer(明白)回复于 2002-05-28 16:34:13 得分 0

Query1->Close();  
    Query1->Open();  
    Query1->Append();  
    这样也是没用的。Top

12 楼wooley(云玄)回复于 2002-05-28 21:07:20 得分 2

只要关闭再打开就行了  
  一定可以,我就这么做的Top

13 楼rainbowcn(弱水三千,只取一瓢)回复于 2002-05-29 09:16:05 得分 2

关注!Top

14 楼WhyAndAnswer(明白)回复于 2002-05-29 09:55:32 得分 0

if(DM->Query1->Modified)    
          DM->Query1->Post();    
  DM->Query1->Close();    
  if(!DM->Query1->Prepared)    
          DM->Query1->Prepare();    
  DM->Query1->Open();    
  一定要这样,才可以,post也这样处理。    
  问题是:我通过其它方法post,如移动指针怎么处理呢?beforepost中不可以吧?  
   
  Append也要关闭再打开,真是太过分了!!!Top

15 楼dealxl(令狐肿)回复于 2002-05-29 10:32:40 得分 3

奇怪了,都没有看见你Post()啊,试试看??  
   
      Post()之后,SetKey()在GotoKey().  
   
      这样既更新,有不丢失当前位置!!  
   
  Top

16 楼WhyAndAnswer(明白)回复于 2002-05-29 11:09:46 得分 0

Sorry!   应是这样:  
  1、Append  
  if(DM->Query1->Modified)    
          DM->Query1->Post();    
  DM->Query1->Close();    
  if(!DM->Query1->Prepared)    
          DM->Query1->Prepare();    
  DM->Query1->Open();    
  DM->Query1->Append();  
  2、Post  
  ...  
  DM->Query1->Post();  
  Top

17 楼yasaka(马蹄南去人北望)回复于 2002-05-29 11:36:36 得分 2

你不用Append(),用Insert()试试看……Top

18 楼WhyAndAnswer(明白)回复于 2002-05-29 15:14:55 得分 0

没用!  
  请大家试试,不要用bcb自带的数据库。Top

19 楼RedProgramer(TST : RedSteel)回复于 2002-05-29 17:32:11 得分 2

Query1->Append();   //添加一条记录  
                  Query1->FieldByName("Type")->AsString="系统";  
                  Query1->FieldByName("EventTime")->AsDateTime=Now();  
                  Query1->FieldByName("Event")->AsInteger=100;  
                  Query1->FieldByName("UserName")->AsString="ztg";  
                  Query1->FieldByName("Description")->AsString="";  
                  Query1->FieldByName("Remark")->AsString="";  
                  Query1->Post();  
  我的程序这样DBGrid可以刷新呀,我的Query1的SQL为select   *   from   Log.db  
  Log.db是我自己的数据库  
  Top

20 楼pazee(耙子)(今年过年不收礼,收礼只收尿不湿)回复于 2002-05-29 17:57:58 得分 3

这个时候我一般用ttable,用query真的弄不明白。除非关闭再打开Top

21 楼WhyAndAnswer(明白)回复于 2002-05-29 19:15:51 得分 0

RedProgramer(RedSteel)   :我的数据全部在dbgrid中赋,没有其它的赋值过程。Top

22 楼WhyAndAnswer(明白)回复于 2002-05-29 19:18:32 得分 0

大家如觉分少,可到我另一贴子“关于DBgrid中append的问题”中回答,是同一问题。Top

23 楼tiger_qi(老虎)回复于 2002-05-30 14:52:48 得分 3

我也在做类四的操作,我去看看我的有没有问题  
  :   WhyAndAnswer(明白)别急,大家会帮你的  
   
  Top

24 楼surongqiu()回复于 2002-05-30 16:27:54 得分 3

我也碰到过这种问题,而且dbgrid   中有时候Append()之后,记录并不是在最后一条,各位大虾有没有好办法?Top

25 楼cokeclassic(灌水可乐)回复于 2002-05-30 16:40:32 得分 2

DBGrid1->Post();  
  之后  
  DBGrid1->Refresh();  
  Top

26 楼surongqiu()回复于 2002-05-30 16:48:52 得分 3

但是这样的话记录显示的位置就不对了Top

27 楼WhyAndAnswer(明白)回复于 2002-05-31 17:05:09 得分 0

我试试Top

28 楼WhyAndAnswer(明白)回复于 2002-05-31 19:33:13 得分 0

if(Query1->Modified)  
  {  
  Query1->Post();  
  DBGrid1->Refresh();  
  }  
  Query1->Append();  
  这样做是一样的,结果也不对。  
  Table好象是没问题。Top

29 楼li_aiwu(小李子)回复于 2002-05-31 20:03:26 得分 1

up!Top

30 楼WhyAndAnswer(明白)回复于 2002-06-01 17:05:37 得分 0

我通过其他方法新增的数据(如:向下键)该如何刷新呢,另外记录位置也不对?  
  是borland的产品bug?Top

31 楼PPower(月亮光光,照地堂)回复于 2002-06-03 10:00:36 得分 3

使用ADO就好了。  
  BDE 連SQL SERVER2000是有點那個啊。有些字段類型支持不好,或不支持。  
  不過如果打完所有補丁,還出現這種問題的話,我建議你新建一項目,專門測試一下這個功能,往往能找出問題所在。看看是哪些表,哪些查詢會產生這種結果。Top

32 楼atdawn(请稍候...)回复于 2002-06-03 10:15:13 得分 2

我用的是ADO,在Append后,用Post是可以的。  
  RedProgramer(RedSteel)说得完全跟我的一样。Top

33 楼atdawn(请稍候...)回复于 2002-06-03 10:17:39 得分 2

关于新增一条记录后的位置问题,是因为排序和索引的问题。Top

34 楼WhyAndAnswer(明白)回复于 2002-06-03 11:50:20 得分 0

borland的产品bug!!!Top

35 楼WhyAndAnswer(明白)回复于 2002-06-03 17:19:50 得分 0

大家都遇到过?Top

36 楼CityHost(市长)回复于 2002-06-12 21:32:13 得分 1

救命了Top

37 楼WhyAndAnswer(明白)回复于 2002-06-13 09:57:14 得分 0

找borland服务中心去!Top

38 楼WhyAndAnswer(明白)回复于 2002-07-04 10:16:30 得分 0

ADO下好象没有这个问题Top

39 楼dejoy(燕青)回复于 2002-07-04 17:14:38 得分 2

建设使用adoTop

40 楼WhyAndAnswer(明白)回复于 2002-07-05 12:30:05 得分 0

我认为是一个bugTop

41 楼WhyAndAnswer(明白)回复于 2002-07-05 12:31:34 得分 0

结贴了Top

相关问题

  • DBGrid中的数据显示
  • DBGrid不能显示数据
  • dbgrid显示数据问题
  • delphi 里 用DBGRID显示数据问题
  • 为什么DBgrid不显示数据?
  • 如何在dbgrid中显示数据!!!!!
  • DBGRID的数据显示问题
  • 关于DBGrid数据显示问题
  • 数据库查询,DBGrid显示问题
  • dbgrid数据分页显示问题

关键词

  • sql2000
  • 数据
  • 数据库
  • live
  • query1
  • dm
  • refresh
  • 新增
  • dbgrid
  • 记录

得分解答快速导航

  • 帖主:WhyAndAnswer
  • rainbowcn
  • rainbowcn
  • rainbowcn
  • rainbowcn
  • luyd
  • wooley
  • rainbowcn
  • dealxl
  • yasaka
  • RedProgramer
  • pazee
  • tiger_qi
  • surongqiu
  • cokeclassic
  • surongqiu
  • li_aiwu
  • PPower
  • atdawn
  • atdawn
  • CityHost
  • dejoy

相关链接

  • CSDN Blog
  • 技术文档
  • 代码下载
  • 第二书店
  • 读书频道

广告也精彩

反馈

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