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

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

Как сортировать датасет, ести в названии полей есть запятые ?


Сортировщик ©   (2002-09-18 14:46:00) 

Господа, здравствуйте.

Есть ADODataSet с полями: [Поле1],[Поле2 с пробелом],[Поле3],[Поле4, с запятой].
Нужно его отсортировать по каким-то полям.
Если я делаю вот так:ADODataSet.Sort="[Поле1],[Поле2 с пробелом],[Поле3]", то все сортируется на очень хорошо, без замечаний.
Если я делаю вот так: ADODataSet.Sort="[Поле1],[Поле4, с запятой],[Поле3]", то возникает ругань "Поле "Поле4" не найдено".
Очевидно, то строка с полями для сортировки сечется на отрезки между запятыми.

Так вот, вопрос :
как мне отсортировать датасет по нескольким полям если в названии полей присутствуют запятые?


Сортировщик   (2002-09-19 15:01:00) [1]

2Alexandr

Нет.

2 ЮЮ

Да видел я этот код... Просто думал, что это уже кто-то когда-то решил.
Ладно, ЮЮ, наверное ты прав. Если хочешь что-то сделать, то сделай это сам.
Я не прощаюсь, вдруг кто-нибудь все же откликнется.


ЮЮ   (2002-09-19 13:31:00) [2]

Или пожалуйся в Borland, что из-за их кода не можешь сортировать по полю P ASCAL :-)


ЮЮ   (2002-09-19 12:46:00) [3]

Смотри исходники:

procedure TCustomADODataSet.RefreshIndexFields;
var
IndexDef: TIndexDef;
FList: string;
begin
if Active and (IndexName <> "") then
begin
IndexDefs.Update;
IndexDef := IndexDefs.Find(IndexName);
if IndexDef <> nil then
FList := IndexDef.Fields else
FList := "";
end else
begin
FList := StringReplace(Sort, ",", ";", [rfReplaceAll]);
FList := StringReplace(FList, " DESC", "", [rfReplaceAll]); { Do not localize }
FList := StringReplace(FList, " ASC", "", [rfReplaceAll]); { Do not localize }
FList := StringReplace(FList, "[", "", [rfReplaceAll]);
FList := StringReplace(FList, "]", "", [rfReplaceAll]);
end;
FIndexFields.Clear;
GetFieldList(FIndexFields, FList);
end;

Исправь исходники


Alexandr   (2002-09-19 12:18:00) [4]

извращенец?


Сортировщик   (2002-09-19 12:11:00) [5]

2All

Ладно...
Вижу полное непонимание проблемы.
Давайте представим, что базы нет, не было, и в будущем не появится. Зато есть датасет. Датасет, созданный методом ADODataSet.CreateDataSet.
И в названиях полей у него ВПОЛНЕ ВЕРОЯТНО могут присутствовать запятые, точки с запятой и т.п. Это не должно ограничиваться! Могут и не присутствовать, но тогда бы я не писал здесь.
Так вот вопрос:
Как мне отсортировать датасет по нескольким полям если в названии полей присутствуют запятые?


ЮЮ   (2002-09-19 08:14:00) [6]

>"Элемент не может быть найден в коллекции, соответствующей требуемому названию (имени)".
А если посмотреть имена элементов в той самой коллекции?


ЮЮ   (2002-09-19 08:06:00) [7]

> Когда-то был выполнен SELECT к базе.
Вот и используй в нём нормальные названия полей


Сортировщик   (2002-09-19 07:14:00) [8]

Елки-палки, неужели нет решения ?


Сортировщик   (2002-09-18 16:40:00) [9]

Так, я попытаюсь еще раз пояснить:
1. Когда-то был выполнен SELECT к базе. Результаты были созранены в XML методом ADOQuery.SaveToFile("dataset.xml");
2. Все, про базу все забыли.
3. Затем произошел ADODataSet.LoadFromFile("dataset.xml"). Напомню, что базы нет. Есть только датасет.

Так вот его-то и нужно отсортировать.


passm   (2002-09-18 16:25:00) [10]

Ok. Но интересно, а что ты тогда пишешь в заголовке запроса? SELECT...


Сортировщик   (2002-09-18 16:20:00) [11]

У меня MSSQL2000.


Сортировщик   (2002-09-18 16:18:00) [12]

2kserg@ukr.net

Будьте внимательны. Квадратные скобки я и так использую(для полей с пробелами в середине).


passm   (2002-09-18 16:16:00) [13]

to kserg@ukr.net
Это, разумеется, зависит от DBMS. Автор вопроса ее не указал, следовательно четкого ответа дать невозможно.
Я пользуюсь DB2 UDB 7.2. Там парные кавычки.


Сортировщик   (2002-09-18 16:15:00) [14]

За ответ спасибо.

1 вариант не работает. Понимает исключение: "Элемент не может быть найден в коллекции, соответствующей требуемому названию (имени)". Это я перевел с английского. В общем-то все закономерно.

2 вариант не подходит. SQL применить невозможно. Есть просто статический датасет, оторванный от БД.

Господа ! Вопрос в силе.
Как мне отсортировать датасет по нескольким полям если в названии полей присутствуют запятые?


kserg@ukr.net   (2002-09-18 16:10:00) [15]

а в MSSQL - [Field Name]


passm   (2002-09-18 16:00:00) [16]

Напрашиваются два ответа, хотя их верность зависит от твоей СУБД.
1. Заключи имя каждого поля в парные кавычки. Например, "Поле, 1", "Поле, 2"
2. Перечисли необходиные поля нумерацией. Например,
SELECT "Поле, 1", "Поле, 2"
FROM TABLE1
ORDER BY 1, 2


Наверх

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