DBgrid中,新增的数据显示不出来
有一个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




