powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / хитрая сортировка в ClientDataSet
9 сообщений из 9, страница 1 из 1
хитрая сортировка в ClientDataSet
    #39616623
Pashan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго утра! подскажите пожалуйста, возможно ли сделать сортировку в ClientDataSet по типу:
текст 5а25
текст 6,25а18
текст 8а15
текст 10а25.
то есть чтобы, условно, 2>10?
...
Рейтинг: 0 / 0
хитрая сортировка в ClientDataSet
    #39616627
vavan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Pashan, можно делать сортировку по internalcalc-полю заполнять к-е как взблагорассудится
...
Рейтинг: 0 / 0
хитрая сортировка в ClientDataSet
    #39616628
Pashan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vavan,что-то никогда не слышал про такую возможность... можно немного подробности?
...
Рейтинг: 0 / 0
хитрая сортировка в ClientDataSet
    #39616636
энди
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а какие подробности вам нужны? вычисляемое поле типа int или double, его значения вычисляете сами на основе значений полей. Затем сортируете по этому полю и все
...
Рейтинг: 0 / 0
хитрая сортировка в ClientDataSet
    #39616638
vavan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Pashanможно немного подробности?подробности в доках. вкратце: в oncalcfields из своей строки выцепляй число по к-му уже сортируй
...
Рейтинг: 0 / 0
хитрая сортировка в ClientDataSet
    #39616864
Pashan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
а через квери если сортировать? так не получится?
...
Рейтинг: 0 / 0
хитрая сортировка в ClientDataSet
    #39617092
энди
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Однозначного ответа нет, скорее зависит от сервера, ваших умений и так далее. Но если в общем то можно и через SQL.
...
Рейтинг: 0 / 0
хитрая сортировка в ClientDataSet
    #39617505
Pashan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
навалял индексацию с использованием временного клиентдатасета, не сортирует, как надо.
может подскажете, что не так?
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
.....
// Ищем изделия в пределах одного документа
       While (StandDS.FieldByName('ГОСТ').AsString=TmpStr) and (StandDS.FieldByName('НаимИзделия').AsString=ProductName)
        and (not StandDS.Eof) do begin
       SetLength(FItems, FCount+1);
        FItems[FCount].Key:= StandDS.FieldByName('Обозначение').AsString;
        List.Text:= StandDS.FieldByName('ДляСортировки').AsString;
        begin
        If List.Count>0 then begin
        //параметры для сортировки
         If List.Count>FMaxParamCount
          then FMaxParamCount:= List.Count;
         SetLength(FItems[FCount].Values, List.Count);
         For I:= 0 to List.Count-1 do
          FItems[FCount].Values[I]:= List.Strings[I];
        end;
        end;
        Inc(FCount);
        StandDS.Next;
       end;
       // Сортируем объекты
       DataSet.FieldDefs.Add('Key', ftString, 100);
       IndexFields:= '';
       IsFloat:= False;
       For I:= 0 to FMaxParamCount-1 do begin
        For J:= 0 to FCount-1 do
         If FItems[J].Values<>nil then
         //определеяем, числовое поле или нет
          If Length(FItems[J].Values)>=I then begin
           try
            IsFloat:= TryStrToFloat(FItems[J].Values[I], F);
           except
            IsFloat:= False;
           end;
           If not IsFloat
            then Break;
          end;
        If IsFloat
         then DataSet.FieldDefs.Add('Field'+IntToStr(I), ftFloat)
         else DataSet.FieldDefs.Add('Field'+IntToStr(I), ftString, 20);
        IndexFields:= IndexFields+'Field'+IntToStr(I)+';';
       end;
       // Заносим данные в датасет
       DataSet.CreateDataSet;
       DataSet.IndexFieldNames:= '';
       DataSet.Active:= True;
       For I:= 0 to FCount-1 do begin
        DataSet.Append;
        DataSet.FieldByName('Key').AsString:= FItems[I].Key;
        For J:= 0 to FMaxParamCount-1 do
         If J<=Length(FItems[I].Values)-1
          then DataSet.FieldByName('Field'+IntToStr(J)).Value:= FItems[I].Values[J]
          else DataSet.FieldByName('Field'+IntToStr(J)).Value:= MaxDouble;
        DataSet.Post;
       end;
      DataSet.IndexFieldNames:= IndexFields+'Key';
       For I:= 0 to DataSet.RecordCount-1 do begin
        StandDS.Edit;
        StandDS.FieldByName('ПорядокПоПараметрам').AsInteger:= GetItemPos(StandDS.FieldByName('Обозначение').AsString);
        StandDS.Post;
        StandDS.Next;
       end;
      end;
     finally
      DataSet.Free;
      List.Free;
      FItems:= nil;
     end;
     // Включаем индексацию
     StandDS.IndexFieldNames:= 'Обозначение;ГОСТ;ПорядокПоПараметрам';
...
Рейтинг: 0 / 0
хитрая сортировка в ClientDataSet
    #39618225
Papadopulos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Для чего создаётся DataSet? Не вижу никакой связи между этим временным DataSet и сортировкой в итоговом датасете
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / хитрая сортировка в ClientDataSet
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]