DBgrid点击字段标题栏的插入排序问题!(15分)

  • 主题发起人 主题发起人 jtys
  • 开始时间 开始时间
J

jtys

Unregistered / Unconfirmed
GUEST, unregistred user!
我用ACCess做数据库,用ADOTAble或ADOQyery连接。
按照书中的说明,如果有索引,那么Insert和Append的效果是一样的,也就是说用
insert()不起作用,插入的记录会象Append()一样排在最尾。
我的主键是“磁带编号”,采用长整形,希望按照升序排列,特别是能够插入操作
并能保障从小到大的顺序在DGGrid中排列,但是实践结果是乱排。取消主键和索引
后也是如此,怎样实现插入操作后也能按照升序排列呢?
 不知道这是ACCESS的缺陷还是ADOTable组件的功能不够强大?
 
我在csdn论坛上找到这样一些讨论,不太明白,请大虾详细解释一下,我相信这个问题
在实际做数据库时是很有意义的!
主  题: 怎么在DBGRID来排序呀?
作  者: lwjhugo (Alvin)
所属论坛: C++ Builder DataBase
----------------------------------------------------------------------我用BDE的query来连接DBGRID,现想对数据进行排序.我的记录设有主键的,也用了sql语句(Orderby)来排序,但不论怎样都系按原来的主键按序的.怎么样解决????
-------------------------------------------------------------------
回复人: watercelery(空心菜) ( ) 信誉:100

在DBGrid的 DBGridTitleClick事件中写就可以了
TADOQuery* temp=(TADOQuery*)DBGrid1->DataSource->DataSet;
if(flag==1)//当前是升序
{
temp->Sort=Column->FieldName+" DESC";
flag=0;
}
else
if(flag==0)//当前是降序
{
temp->Sort=Column->FieldName+" ASC";
flag=1;
}
-----------------------------------------------------------------
回复人: yui() ( ) 信誉:100
你的办法不可实现的,column是什么?无论是tadotable还是tadoquery还是tdbgrid都没有这个属性
-----------------------------------------------------------------
回复人: huang_jihua(不懂...学习) ( ) 信誉:100
DBGrid的ONTitleClick里面就有Column

-----------------------------------------------------------------
回复人: yui() ( ) 信誉:100
试了一下,是我错了,问题解决
-----------------------------------------------------------------


-----------------------------------------------------------------
回复人: dacaifu(dacai) ( ) 信誉:100

DataGrid OnTitleClick
DataSet->IndexFieldNames = ...

-----------------------------------------------------------------
回复人: weixing979(*****闪电侠*****) ( ) 信誉:100
一个例子
用BCB自带的库
Query1的databasename 用的是BCDEMOS ,SQL是select * from parts.db
DBGrid的 DBGridTitleClick事件中
void __fastcall TForm1::DBGrid1TitleClick(TColumn *Column)
{ Edit1->Text=Column->FieldName;
Query1->Close();
Query1->SQL->Clear();
Query1->SQL->Add("Select * from parts.db order by ");
Query1->SQL->Add(Edit1->Text );
//改为Query1->SQL->Add(Column->FieldName);没好使
// Query1->SQL->Add("desc") 或 Query1->SQL->Add("asc");

Query1->Open();
}
可实现单击DBGrid的Title按钮,对该字段排序。
 
procedure TFrm_XACC_Accessory.Dbgrd_TabTitleClick(Column: TColumn);
var
colwidth,max:Integer;
begin
colwidth:=5;
Max:=5;
if not(Column.Field is TBlobField ) then
Tadotable(Column.Field.DataSet).indexFieldNames := Column.Field.FieldName
else
begin
Column.width := max+100;
exit;
end;
with Tadotable(Column.Field.DataSet)do
begin
first;
while not eofdo
begin
colwidth := Dbgrd_Tab.Canvas.TextWidth(Column.Field.AsString);
Max:=math.Max(colwidth,max);
Next;
end;
if (Max < Dbgrd_Tab.Canvas.TextWidth(Column.Title.Caption)) or (colwidth = 0) then
Column.width := Dbgrd_Tab.Canvas.TextWidth(Column.Title.Caption)+20
else
Column.width := max+20;
end;
end;
 
我用的
TADOQuery* temp=(TADOQuery*)DBGrid1->DataSource->DataSet;
if(flag==1)//当前是升序
{
temp->Sort=Column->FieldName+" DESC";
flag=0;
}
else
if(flag==0)//当前是降序
{
temp->Sort=Column->FieldName+" ASC";
flag=1;
}
有错误:在对应所需名称或序数的集合中,未找到项目
请问怎么办
 
后退
顶部