![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
TDataSet.Locate не работает по сортированному DataSet [D5, MSSQL]
BPK © (2005-02-10 13:19:00)Для отображения данных использую связку: TRxDBGrid + TDataSource + TKbmMemTable
В программе используется сортировка по колонкам
procedure TFrmCompCat.ApplySorting;
var s:string;
i:integer;
begin
try
for i:=0 to sgComps.Columns.Count-1 do begin
s:=sgComps.Columns[i].FieldName;
mtComps.AddIndex(s,s,[]);
mtComps.AddIndex(s+'_DESC',s,[ixDescending]);
end;
mtComps.Open;
mtComps.IndexName:=FGridIndex;
finally
while mtComps.ControlsDisabled do mtComps.EnableControls;
end;
if DataAvailable then mtComps.First;
// if not mtComps.Locate('ID',FGridComponent,[]) then mtComps.RecNo:=1;
end;
procedure TFrmCompCat.sgCompsTitleBtnClick(Sender: TObject; ACol: Integer;
Field: TField);
var Rec:TCompNodeRec;
begin
Rec:=PCompNodeRec(TV.Selected.Data)^;
if Rec.SortBy<>Field.FieldName then PCompNodeRec(TV.Selected.Data)^.DescSort:=False;
if PCompNodeRec(TV.Selected.Data)^.DescSort then begin
mtComps.IndexFieldNames:='';
mtComps.IndexName:=Field.FieldName+'_DESC';
PCompNodeRec(TV.Selected.Data)^.SortBy:=Field.FieldName+'_DESC';
end
else begin
mtComps.IndexName:='';
mtComps.IndexFieldNames:=Field.FieldName;
PCompNodeRec(TV.Selected.Data)^.SortBy:=Field.FieldName;
end;
mtComps.First;
PCompNodeRec(TV.Selected.Data)^.DescSort:=not PCompNodeRec(TV.Selected.Data)^.DescSort;
end;
В ходе выполнения программы делаю перемещение к записи с нужным IDом:
if not mtComps.Locate('ID',ID,[]) then mtComps.RecNo:=1;
Если используется восходящая сортировка, то locate находит запись, если нисходящая - то не находит. Как исправить?
Johnmen (2005-02-11 09:46:00) [1]А что такое TKbmMemTable ?
Посмотри, как в нем реализован Locate. Возможно, там ошибки.
BPK (2005-02-11 09:37:00) [2].