Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2002.10.10;
Скачать: [xml.tar.bz2];

Вниз

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

 
Сортировщик   (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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.007 c
3-31640
onix
2002-09-18 13:27
2002.10.10
Пронумеровать записи в DataSet e.


1-31780
Driver
2002-10-01 15:36
2002.10.10
Мужики, выручайте... Как заставить THintWindow получать сообщения


3-31651
oss
2002-09-18 14:38
2002.10.10
ADO, StoreProc


6-31920
MrAngel
2002-06-05 15:01
2002.10.10
Прамой коннект между динамическими IP в интернете - реально ли?


8-31909
Новеньки в Делфи
2002-06-10 23:53
2002.10.10
как установить позицию в МедиаПлеере





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский