Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / хитрая сортировка в ClientDataSet / 9 сообщений из 9, страница 1 из 1
19.03.2018, 09:02
    #39616623
Pashan
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
хитрая сортировка в ClientDataSet
Доброго утра! подскажите пожалуйста, возможно ли сделать сортировку в ClientDataSet по типу:
текст 5а25
текст 6,25а18
текст 8а15
текст 10а25.
то есть чтобы, условно, 2>10?
...
Рейтинг: 0 / 0
19.03.2018, 09:10
    #39616627
vavan
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
хитрая сортировка в ClientDataSet
Pashan, можно делать сортировку по internalcalc-полю заполнять к-е как взблагорассудится
...
Рейтинг: 0 / 0
19.03.2018, 09:18
    #39616628
Pashan
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
хитрая сортировка в ClientDataSet
vavan,что-то никогда не слышал про такую возможность... можно немного подробности?
...
Рейтинг: 0 / 0
19.03.2018, 09:41
    #39616636
энди
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
хитрая сортировка в ClientDataSet
а какие подробности вам нужны? вычисляемое поле типа int или double, его значения вычисляете сами на основе значений полей. Затем сортируете по этому полю и все
...
Рейтинг: 0 / 0
19.03.2018, 09:42
    #39616638
vavan
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
хитрая сортировка в ClientDataSet
Pashanможно немного подробности?подробности в доках. вкратце: в oncalcfields из своей строки выцепляй число по к-му уже сортируй
...
Рейтинг: 0 / 0
19.03.2018, 15:22
    #39616864
Pashan
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
хитрая сортировка в ClientDataSet
а через квери если сортировать? так не получится?
...
Рейтинг: 0 / 0
19.03.2018, 22:06
    #39617092
энди
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
хитрая сортировка в ClientDataSet
Однозначного ответа нет, скорее зависит от сервера, ваших умений и так далее. Но если в общем то можно и через SQL.
...
Рейтинг: 0 / 0
20.03.2018, 13:48
    #39617505
Pashan
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
хитрая сортировка в ClientDataSet
навалял индексацию с использованием временного клиентдатасета, не сортирует, как надо.
может подскажете, что не так?
Код: 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
21.03.2018, 14:16
    #39618225
Papadopulos
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
хитрая сортировка в ClientDataSet
Для чего создаётся DataSet? Не вижу никакой связи между этим временным DataSet и сортировкой в итоговом датасете
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / хитрая сортировка в ClientDataSet / 9 сообщений из 9, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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