Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.10.10;
Скачать: CL | DM;

Вниз

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

 
Сортировщик   (2002-09-18 14:46) [0]

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

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

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


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

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


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

а в MSSQL - [Field Name]


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

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

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

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

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



 
passm ©   (2002-09-18 16:16) [4]

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


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

2kserg@ukr.net

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


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

У меня MSSQL2000.


 
passm ©   (2002-09-18 16:25) [7]

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


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

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

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


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

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


 
ЮЮ ©   (2002-09-19 08:06) [10]

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


 
ЮЮ ©   (2002-09-19 08:14) [11]

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


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

2All

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



 
Alexandr ©   (2002-09-19 12:18) [13]

извращенец?


 
ЮЮ ©   (2002-09-19 12:46) [14]

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

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;

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


 
ЮЮ ©   (2002-09-19 13:31) [15]

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


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

2Alexandr

Нет.

2 ЮЮ

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



Страницы: 1 вся ветка

Текущий архив: 2002.10.10;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.016 c
1-31812
kamonavt
2002-10-01 21:00
2002.10.10
mdi-форма -> dll


4-32059
B-Ars
2002-08-23 13:13
2002.10.10
Возможно ли изменение размера/положения панели задач?


14-31990
UDS
2002-09-05 19:34
2002.10.10
ВЗЛОМАТЬ BIOS !!!!


14-31973
программист_ищу_работу
2002-09-16 12:02
2002.10.10
у кого есть заголовок к библиотеке winpcap?


1-31689
Ago
2002-09-30 15:00
2002.10.10
ComboBox с иконками (рядом с выбираемыми значениями)