Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Базы данных и репортинг > Регистр букв при работе с dbf ч/з ADO


Автор: Bes 28.12.2004, 15:34
Здрасте, господа.
Где работаю: Д6 ADO dbf
Проблема: пишу запрос с like однако результат оказывается чувствительным к регистру т.е. результат на запрос 'aSdFgH' и 'AsDfGh' разные, а д.б. одинаковые как при работе со скул-сервером.
Заранее благодарен.

Автор: Vit 29.12.2004, 15:27
Если сервер работает в Case sensitive то используйте конвертацию строк в большие буквы при сравнении

Автор: Bes 29.12.2004, 16:11
Vit: я пробовал что-то подобное - не получается т.е. параметр-то переделать не проблема, а как запрос-то к верхним буквам привести?
Да, еще: слово "сервер"...? Я работаю просто с одним дбф-фалйом - никакого сервера не подразумевается или я не прав? Может можно просто отключить это св-во, т.к. при работе MSSQL2000 такой проблемы не возникало.... :-(

Автор: Vit 29.12.2004, 20:24
Не знаю синтаксис dbf провайдера, чтото типа

Код

select * From Table
Where upper(fieldname) like '%SOMETHING%'


только конкретное название функции upper посмотри в справочнике по твоему варианту sql

Автор: Bes 30.12.2004, 07:25
Спасибо, я попробую, но дело действительно может быть в особенностях синтаксиса, а где бы можно посмотреть такие справочники?

Проверил:
запрос такой:

select * from upper(catalog) where name like '%AV%'

на что она мне и отвечает:

[Microsoft][Драйвер ODBC dBase] Ошибка синтаксиса в предложении FROM.

:-(

Автор: Dimich 30.12.2004, 08:12
Цитата(Bes @ 30.12.2004, 07:25)
[Microsoft][Драйвер ODBC dBase] Ошибка синтаксиса в предложении FROM.

надо так:
select * from catalog where upper(name) like '%AV%'

Автор: Vit 30.12.2004, 08:27
Посмотри внимательно на мой пример

Код

select * From Table
Where upper(fieldname) like '%SOMETHING%'


и на то что ты сделал:

Код

select * from upper(catalog)
where name like '%AV%'


Зачем имя таблицы надо переводить в вверхний регистр? smile

Автор: Bes 30.12.2004, 10:23
Блин, точно же - уже значит крыша едет. :-)
Признаюсь. глупо и очевидно - глаз замылился- не туда воткнул.
:-(

Попробовал - все равно не работает, пишет.

[Microsoft][Драйвер ODBC dBase] Неопределенная функция upper в выражении.

Я же помню, что не работало. :-(

Автор: Bes 30.12.2004, 10:56
Урра!!!! Методом научного тыка, косвенной информации и аналогий нашел скул функцию для дбф Lcase - все работает. Всем спасибо. :-)

Автор: Dimich 30.12.2004, 11:04
Немного опоздал правда, но действительно различия оказались в диалектах SQL
в данном случае аналоги функций Upper() и Lower() есть UCase() и LCase()

Автор: Bes 30.12.2004, 11:13
Ага, все равно спасибо за беспокойство. :-)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)