如何在 Tclientdataset 中插入数据(100分)

  • 主题发起人 主题发起人 k474
  • 开始时间 开始时间
K

k474

Unregistered / Unconfirmed
GUEST, unregistred user!
我的TClientdataset 通过dcomconnection与应用服务器相连,
当我从数据库服务器得到所需数据之后
,数据存在TClientdataset中,我想在Tclientdataset 中特定记录后插入一条记录,
但他显示时,总是插在所有记录之后,我该怎么办?
 
如果你保证在数据库中记录的排列顺序就是你想要的。
可以在insert之后加入:
ClientDataSet1.Close;
ClientDataSet1.Open;
如果你可以用Order by后得到理想的数据排列顺序。
可以在insert之后加入:
ClientDataSet1.Close;
ClientDataSet1.CommandText:='select * from table Order by field'
ClientDataSet1.Open;
如果你无法用语句得到理想的数据排列顺序,也就没办法了。
 
但他显示时,总是插在所有记录之后,我该怎么办?
close,open后顺序就是数据库服务器里的顺序,在数据库服务器里排序
的规则决定了现在你输入的成最后一条。
以上是我自己认为的,不知道对不对,呵呵
 
我也遇过同样的问题,我用了加序号字段的办法解决,
先Insert
然后取TClientdataset 的记录数,在从最后一条开始重新写序号
//tabtmp 是tclientdataset
begin
i:=tabtmp.RecordCount;
with DMdo
begin
tabtmp.DisableControls ;
tabtmp.last ;
//注意这里一定要倒过来写 否则,嘿嘿
while not tabtmp.bof do
begin
tabtmp.Open ;
tabtmp.edit;
das:=tabtmp.fieldbyname('xuhao').asstring;
tabtmp.FieldByName ('xuhao').asinteger:=i;
i:=i-1;
tabtmp.Prior ;
end;
tabtmp.EnableControls ;
end;

end;
 
烂泥:
das 起到了什么作用?
你的方法发我已试过了,但不好使.但我显示Tclientdataset中的数据时,
我插入的数据仍然是在最后.
 
das再这里没有用,
xuhao字段为ftfloat
在调用上面的过程前,
xh:=tabtmp.fieldbyname('xuhao').asstring;
tabtmp.Insert;
//将插入的数据的序号比插入位置的序号-0.1
tabtmp.fieldbyname('xuhao').asfloat:=strtofloat(xh)-0.1;
tabtmp.post;
changexh();
《--再调用
 
你用的是Table联数据库,还是Query?
如果用的是Query,应该没这样的问题吧!
 
使用索引。
FORM CREATE 时建立索引,然后插入(INSETER)
重建索引,哈哈——OK!
 
大家好,谢谢你们的关心.
我现在再增加一些说明 ,我的库中没有任何索引,并且我的最终TClientdataset中没有序号字段,
我的最终结果是用于报表.
 
就DELPHI而言你可以在程序中动态创建索引,他与你的DATABASE的TABLE没有什么关系。
还有一种方法是,如果使用GRID控件显示数据的话,你可以操作GRID控件。
 
wangjerry的方法效率成问题
忠告:每一张表都要有键值字段
 
fax:
如何操作grid.
 
多人接受答案了。
 
后退
顶部