Dmitri |
Отправлено: 19.06.2003, 20:05 |
|
admin@localhost
Группа: Модератор
Сообщений: 110
|
Такая проблема: есть Table1, он сортируется по числам (не № п/п). Table1->IndexName=Num (Num — это числа). НО: в DBgrid сортировка получается корявая:
CODE |
1
10
2
3
4
5
6
7
8
9
|
Как сортировать числа по-нормальному? И вместе с тем, оставить возможность сортировать по другим колонкам Table1?
Help!!!
|
|
Nick |
Отправлено: 02.07.2003, 07:32 |
|
Машинист паровоза
Группа: Участник
Сообщений: 247
|
Наверно лучше использовать Query и в нем написать
Order By ... |
|
iAlexander |
Отправлено: 11.07.2003, 13:12 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 70
|
Зря оставили сообщение без ответа. Если использовать Query, то невозможным станет редактирование этой таблицы, допустим, в Grid'e.
По умолчанию сортировка происходит по первичному ключу, если установлен DefaultIndex.
Можно попробовать его сбросить.
И если, допустим, сортировку нужно производить не по уникальному значению, а по bool — сначала все true, потом все false, можно ли воспользоваться IndexName? |
|
KrisK |
Отправлено: 11.07.2003, 13:37 |
|
Не зарегистрирован
|
такой вид сортировки — 1,10,2,3,4 — обычно означает, что поле содержит символьную информацию типа Char(10).
Если это так, то поможет индекс с выражением Val(Num).
а по поводу редактирования Query — есть такой компонент
UpdateSQL — и делай с Query что хош — добавляй, удаляй, изменяй. |
|
iAlexander |
Отправлено: 11.07.2003, 17:42 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 70
|
И все-таки тема — Сортировка в Table1[U]
Т.е. с Table ничего сделать нельзя? |
|
Admin |
Отправлено: 11.07.2003, 19:39 |
|
Владимир
Группа: Администратор
Сообщений: 1190
|
Можно.
Так уже KrisK правильно ответил.
Это может быть если поле в Table имеет тип ftString, а не ftInteger
и индекс тут не причем:
Если вот так создаю поле в таблице:
CODE |
Table2->FieldDefs->Clear();
TFieldDef *pNewDef = Table2->FieldDefs->AddFieldDef();
pNewDef->Name = "ID";
pNewDef->DataType = ftString;
pNewDef->Size = 10;
// а потом и индекс по этому полю
Table2->Active = false;
Table2->Exclusive = true;
Table2->Active = true;
Table2->AddIndex("IDidx", "ID" ,TIndexOptions()<<ixPrimary<<ixUnique);
|
то сортировка и поолучится кривая (точнее как и должно быть
у типа ftString)
а если-же создается поле целочисленное:
CODE |
Table2->FieldDefs->Clear();
TFieldDef *pNewDef = Table2->FieldDefs->AddFieldDef();
pNewDef->Name = "ID";
pNewDef->DataType = ftInteger;
pNewDef->Required = true;
// и индексируем его
Table2->Active = false;
Table2->Exclusive = true;
Table2->Active = true;
Table2->AddIndex("IDidx", "ID" ,TIndexOptions()<<ixPrimary<<ixUnique);
|
то и сортировка в Table по данному индексу получается нормальная,
то есть
1
2
3
4
5
6
7
8
9
10
11
12
и так далее...
и индекс
QUOTE |
Table1->IndexName=Num (Num — это числа)
|
тут не поможет, как раз и проиндексируется таблица
по типу ftString, если поле таблицы имеет этот тип.
|
|
iAlexander |
Отправлено: 12.07.2003, 17:19 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 70
|
Нельзя ли подсказать об UpdateSQL?
UpdateObject у Query задал, ModifySQL у UpdateSQL задал.
Возник вопрос — как именно модифицировать запись? В хелпе что — то насчет кешированных изменений. Непонятно. Когда именно вызывается то, что использует ModifySQL ?
Поставил в QueryUpdateRecordTour()
{UpdateSQL->ExecSQL(UpdateKind)}
Попробовал после задания ModifySQL вызывать Query->ApplyUpdates(); — говорит, что ... not in cahed update mode... |
|
Nick |
Отправлено: 13.07.2003, 08:41 |
|
Машинист паровоза
Группа: Участник
Сообщений: 247
|
QUOTE (iAlexander @ 12/07/2003, 18:21) | Нельзя ли подсказать об UpdateSQL?
UpdateObject у Query задал, ModifySQL у UpdateSQL задал.
Возник вопрос — как именно модифицировать запись? В хелпе что — то насчет кешированных изменений. Непонятно. Когда именно вызывается то, что использует ModifySQL ?
Поставил в QueryUpdateRecordTour()
{UpdateSQL->ExecSQL(UpdateKind)}
Попробовал после задания ModifySQL вызывать Query->ApplyUpdates(); — говорит, что ... not in cahed update mode... |
Если CahedUpdates = False то запросы на добавление, изменение и удаление UpdateObject вызываются сразу после модификации данных и вызов их вручную вызывает ошибку указанную Вами. |
|