Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

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]

.


Наверх

Титульная страница Поиск, карта сайта Написать письмо