关于取消SimpleDataSet的排序问题(100分)

  • 主题发起人 主题发起人 szkok
  • 开始时间 开始时间
S

szkok

Unregistered / Unconfirmed
GUEST, unregistred user!
最近将程序中ADO修改了DBX,发现在SQL语句中含有排序的时候(如按修改日期降序排序),在修改记录后,当前的记录都会自动排到第一条记录上去,在ADO下就不会出现这个情况,请教如何取消这个自动排序的功能?也就是修改后停在原来的位置。(我用的数据控件是TSQLConnection+TSimpleDataSet)
 
怎么没人回答啊?如果觉得分不够,可以再加500分,反正我的分现在留着也没有什么了,公司的结构要调整,有可能要转到C#下去开发了
 
simpledataset.dataset.sortfieldnames := '' // 沒有指定这个就可以啦
 
simpledataset.dataset.sortfieldnames 是为空的
 
没有人能帮到我吗?急啊。。。
 
话题2435599的标题是: dephi7 + simpledataset + mysql +DbGridEh 怎样实现点击DbGridEh的Title时进行升序以及降序排序? (50分)
分类:数据库-C/S型 shayang (2004-02-04 14:02:00)
dephi7 + simpledataset + mysql +DbGridEh 怎样实现点击DbGridEh的Title时进行升序以及降序排序?(千万别从某处简单的找一个来,网上一般是用ado的,我这个好象不太一样)

江南大米 (2004-02-04 14:26:00)
用dxExpressDbGrid的话直接选择属性就可以排序的!
simpledataset没有用过!

shayang (2004-02-04 14:30:00)
我需要用DbGridEh里的象Excel一样可以块复制、块剪切……的功能

MYSBS (2004-02-07 8:54:00)
我这个是我自己的,不是网上的,三层。客户端ClientDataSet的排序,公用排序程序,供你参考。(在ClientDataSet的OnTitleButtonClick事件调用)
procedure TSysdb.sys_DoSorting(cdsName: TClientDataset;
AFieldName: string;
SortType: string = '');
const
NONSORTABLE: set of TFieldType = [ftBlob, ftMemo, ftOraBlob, ftOraCLob];
begin
with cdsNamedo
begin
if IsEmpty or (FieldByName(AFieldName).DataType in NONSORTABLE)
or (FieldByName(AFieldName).FieldKind <> fkData) then
Exit;
if (IndexFieldNames = AFieldName) then
begin
IndexDefs.Update;
if (SortType = '') or (SortType = 'DESC') then
begin
if IndexDefs.IndexOf('DESC') > -1 then
begin
DeleteIndex('DESC');
IndexDefs.Update;
end;
AddIndex('DESC', AFieldName, [ixDescending, ixCaseInsensitive], '', '', 0);
IndexName := 'DESC';
end
else
begin
if IndexDefs.IndexOf('ASC') > -1 then
begin
DeleteIndex('ASC');
IndexDefs.Update;
end;
AddIndex('ASC', AFieldName, [ixCaseInsensitive], '', '', 0);
IndexName := 'ASC';
end;
end
else
begin
IndexFieldNames := AFieldName;
end;
end;
end;


MYSBS (2004-02-07 8:53:00)
这个让你排序时,在Title显示向上和向下的图标。(在ClientDataSet的CalcTitleImage事件调用)
procedure TSysdb.OnCalcTitleImage(Sender: TObject;
Field: TField;
var TitleImageAttributes: TwwTitleImageAttributes);
begin
with (Sender as twwdbgrid)do
begin
TitleImageList := ImageList2;
if Field.FieldName = TClientDataset(Datasource.Dataset).indexfieldnames then
begin
TitleImageAttributes.ImageIndex := 0;
end
else
if TClientDataset(Datasource.Dataset).indexname = 'DESC' then
begin
TClientDataset(Datasource.Dataset).indexdefs.Update;
if TClientDataset(Datasource.Dataset).indexdefs.Find('DESC').Fields = Field.Fieldname then
TitleImageAttributes.ImageIndex := 1;
end;
end;
end;


shayang (2004-02-07 22:44:00)
接受答案了.

MYSBS的回答最终被接受。
 
谢谢,这个我懂,我现在不是想要这个功能,相反,SimplDateSet会自动排序,我现在需要的是取消这个功能。请再看一下我所提的问题。^-^
 
//方法二: 使用书签保存原来的位置,再返回,这是DELPH的帮助,
// 我觉得还是那个XXXSORT的起作用,你查询后可能自动生成SORCXX的字段
This example uses a button to copy the value of a field in the previous record into the corresponding field in the current record.
procedure TForm1.CopyDataClick(Sender: TObject);
var
SavePlace: TBookmark;
PrevValue: Variant;
begin
with MyDatado
begin
{ get a bookmark so that we can return to the same record }
SavePlace := GetBookmark;
try
{ move to prior record}
FindPrior;

{ get the value }
PrevValue := Fields[0].Value;
{Move back to the bookmark
this may not be the next record anymore
if something else
is changing the dataset asynchronously }
GotoBookmark(SavePlace);
{ Set the value }
Fields[0].Value := PrevValue;
{ Free the bookmark }
finally
FreeBookmark(SavePlace);
end;
end;

end;

To ensure that the button is disabled when there is no previous record, the OnDataChange event of the DataSource detects when the user moves to the begin
ning of file (BOF property becomes true), and disables the button.
procedure TForm1.MyDataDataChange(Sender: TObject;
Field: TField);
begin
if MyData.Bof then
CopyData.Enabled := False
else
CopyData.Enabled := True;
end;
 
当前记录还是不变的,只是记录的位置变了。
举个例子说,用SimpleDataSet打开一个表“select * from XXX order by AmendDate desc”,用户浏览过程中,例如,浏览到第30条的位置,有一条记录,用户修改了它,那么它的修改日期(AmendDate)也就变成了最新日期了,保存后它自动排到第一条的位置(当前记录还是它),用户想查看下一条信息的时候,又得重新浏览这30条,这让用户操作起来好烦的,如果查询语句中没有“order by AmendDate desc”就是正常的。现在我想要的效果是,在不去掉“order by AmendDate desc”的前提下,修改后它仍然停留在第30条的位置。
想尽快解决这个问题,如有需要加分,请大侠们出句声,马上另开一个不少于500分的贴。
 
TO hsgrass:
我试过,AfterOpen后清空SortFieldNames,IndexFieldName,IndexName等结果都是一样。
 
自己顶一下。
恳求大侠们帮助。
 
用一个笨方法解决了 分照发
 
后退
顶部