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

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

Почему не срабатывает UPPER? [D6, IB6.x]


off ©   (2003-05-08 08:27:00) 

Мастера поскажите в чем проблема. Пишу IBQuery1.SQL.Text:="Select * from LICALL "+"where FIO LIKE UPPER("+""""+"%"+edit1.Text+"%"+""""+")";
По идее должно приводится к верхнему регистру, но не выходит.


Zacho   (2003-05-12 13:28:00) [1]


> off © (12.05.03 13:18)

Зависит от задачи и личных предпочтений :) Если собираешься хранить строковые данные в разных кодировках (и/или на разных языках) - правильнее none. Если в одной - есть плюсы и минусы и для при указании чарсета и при none. При явно определенном character set (и еще collate) для полей - работать проще.


off   (2003-05-12 13:18:00) [2]

А в принципе, как правильнее: ставить чарсет "none" или "win1251"?


Zacho   (2003-05-12 12:45:00) [3]


> off © (12.05.03 12:38)

А еще пишешь, что FAQ читал. Там же ясно написано - при character set none вместо UPPER нужно использовать UDF !
Если хочешь без UDF - ставь character set win1251.

> (иначе выдает собщение см. > off © (12.05.03 12:04)).

Ну я же просил уже - приведи более подробную информацию. Телепатов здесь нет. Единственное, что могу предположить - ты пользуешься IB Console. В ней есть баг. Попробуй другой инструмент.


off   (2003-05-12 12:38:00) [4]

А когда делаю UPPER(FIO COLLATE PXW_CYRL). Выдает сообщение
"Dinamic SQL Error
.................
Data type unknown
COLLATION PXW_CYRL is not valid for specified CHARACTER SET."
Charset - none (иначе выдает собщение см. > off © (12.05.03 12:04)).


Zacho   (2003-05-12 12:10:00) [5]


> off © (12.05.03 12:04)

Используешь IB Console ? Тогда это баг консоли. Попробуй сделать Unregister Database / Register Database. Или пользуйся чем-нибудь более другим, чем IB Console.
P.S. И все-таки учись задавать вопросы. Без информации, которую я у тебя спрашивал в Zacho © (12.05.03 11:53) - все попытки ответить - гадание на кофейной гуще.


off   (2003-05-12 12:08:00) [6]


> Соловьев © (12.05.03 12:00)
> пользуюсь такой вот конструкцией и проблем не было...
> ...
> where UPPER(Field1 collate PXW_CYRL) like UPPER(:Param1
> collate PXW_CYRL)||"%"

А чарсет какой? У меня стоит none.


off   (2003-05-12 12:04:00) [7]

Да факу я читал, правда ответа не нашел.
Чарсет ставлю, к примеру, при создании базы.
А сообщение следующее : "arithmetic exception, numeric overflow, or string truncation Cannot transliterate character between character sets"


Соловьев   (2003-05-12 12:00:00) [8]

пользуюсь такой вот конструкцией и проблем не было...
...
where UPPER(Field1 collate PXW_CYRL) like UPPER(:Param1 collate PXW_CYRL)||"%"


Zacho   (2003-05-12 11:53:00) [9]


> off © (12.05.03 11:47)

Телепатов нет :-)
Если хочешь получить ответ - пиши вопрос более подробно. Где ставишь ? Каким инструментом (компонентами и т.п.) пользуешься ? Как именно работать перестает ? И что именно (твоя программа, какой-либо инструмент типа IBConsole или IBExpert) ? Текст сообщения об ошибке ?
А вообще-то в http://www.ibase.ru/devinfo/ibrusfaq.htmвсе довольно подробно описано.


off   (2003-05-12 11:47:00) [10]

Так тут опять же такая проблема. Только ставлю чарсет в вин1251 так все работать престает. Выдает какое-то сообщение щас и не вспомню как звучит.


off   (2003-05-08 09:52:00) [11]

Спасибо, в следующий раз буду внимательнее :-)


Danilka   (2003-05-08 09:37:00) [12]

блин, не дочитал:
Zacho © (08.05.03 08:38)

сорри
:))


Danilka   (2003-05-08 09:36:00) [13]

а вообще, думаю в данном случае дешевле будет делать так:
IBQuery1.SQL.Text:="Select * from LICALL "+"where FIO LIKE ("+""""+"%"+AnsiUpperCase(edit1.Text)+"%"+""""+")";


Danilka   (2003-05-08 08:39:00) [14]

может это тебе поможет:
http://www.ibase.ru/devinfo/ibrusfaq.htm
в середине пункт: "Uppercase русских букв"


Zacho   (2003-05-08 08:38:00) [15]


> off © (08.05.03 08:27)

О, снова этот вопрос ! Как минимум раз в неделю повторяется.
Главный совет: внимательно читать http://www.ibase.ru/devinfo/ibrusfaq.htm
Теперь коротко: если у поля установлен character set win1251 и не установлен collate pxw_cyrl то делать надо так:
SQL.Text:="SELECT * FROM LICALL WHERE UPPER(FIO COLLATE PXW_CYRL) LIKE "+AnsiQuotedStr("%"+AnsiUpperCase(Edit1.Text)+"%")


Наверх

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