| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Базы данных и репортинг > ADO, SQL, LIKE |
| Автор: WolfON 12.4.2005, 13:54 | ||
| Кароче, мне надо в таблице найти все записи, которые включают какое-то слово[скорее его часть], но НЕ ЗАВИСИМО ОТ ЕГО РЕГИСТРА Я делаю так:
Но, такая комадна зависит от регистра, в DRKB предлагают использовать CONTAINING, но на ADO он неработает |
| Автор: DimW 12.4.2005, 14:53 |
| Я такую проблему решал следеющим образом: допустим нужно найти слово st_Osn:='Программист', а юзер ввел st_find:='рАмм'. в цикле по таблице ( for i:=... ): if (ord(st_osn[i])= ord(st_find[n])) or (ord(st_osn[i])= ord(st_find[n])-32) or (ord(st_osn[i])= ord(st_find[n])+32) then --------------------------------------------------------- Короче здесь праверяются не символы, а их коды. ord('А')-ord('a')=32 (вот что я имею ввиду). но эта схема будет работать наверника, только с буквенными символами. Ну идея думаю понятна, а остальное сам дофантазируешь... Если не разберешься то скину всю функцию, просто писал давно, когда "зеленым" был, стыдновато.... а переписывать нехочиться... |
| Автор: bursa 12.4.2005, 14:57 | ||||
Ух ты! Зачем так сложно. Код, правда, Oracle
Перевести все в верхний регистр - и дело с концом! |
| Автор: WolfON 12.4.2005, 15:13 |
| Благодарю. |
| Автор: WolfON 12.4.2005, 15:23 | ||
| Поторопился Так вот, на Access'овской базе, к которой я подключился это не работает, говорит незнает что-такое Upper
Учитывая объемы базы - искать будет вечность |
| Автор: DimW 12.4.2005, 15:43 | ||||||
неспорю, [censored34! Пожалуйста, соблюдайте элементарные правила приличия при общении на форуме] пример...
а вот зачем:
bursa не в обиду сказано. вот задачка.... что то надо делать!!! А база с данными уже есть или в планах только? если в планах то можно разрешить ввод только верхнего регистра на уровни приложения... |
| Автор: bursa 12.4.2005, 15:57 | ||
Неужто в аксессе нет функции перевода в верхний/нижний регистр? Тогда я пас. Примите соболезнования. И мои извинения. |
| Автор: WolfON 12.4.2005, 16:06 | ||
База уже есть, а перевести вводимую строку в нижний регистр можно ф-ией LowerCase. Только вот проблема в том, что в базе слово/часть солва может быть записанно с разными регистрами [орфографию соблюдаю, млин]. bursa Кажись в аксессе реализован SQL/92 |
| Автор: DDX 12.4.2005, 16:06 |
| в JetSQL Like и так ищет независимо от регистра я пробовал: если писать like "*пример*" или даже так like "*прИмЕр*" то находятся записи всех регистров на ура |
| Автор: WolfON 12.4.2005, 16:13 |
| DDX Действительно Только, вот вместо * надо % |
| Автор: DDX 12.4.2005, 18:01 |
| WolfON ты не поверишь, но у меня ищется только с *, хотя в справке написано, что они равносильны Важное замечание: такие подстановочные знаки ANSI SQL, как (%) и (_), доступны только при использовании ядра Microsoft® Jet версии 4.X и программы Microsoft OLE DB Provider для Jet. При работе с приложениями Microsoft Access или DAO эти подстановочные знаки воспринимаются как строковые константы. - JETSQL40.CHM |
| Автор: Bes 13.4.2005, 06:01 |
| 2WolfON: не парься, для акцесса ф-ии Upper = Ucase, а Lower = LCase, а остальное по той же схеме. |
| Автор: DimW 13.4.2005, 07:32 |
| DDX блин молоток!!! не поддался на правокацию WolfON... Я тоже "хорош", праверил в оракле запрос с Like и убедившись что он не работает так как хотелось бы, начал искать тупые обходы... А оказалось, что все поддерживается драйвером Jet... Мне 2 сообщения до сотни не хватает, как только догоню, пополню тебе репутацию!!!! |
| Автор: DDX 13.4.2005, 13:58 |
| DimW http://www.forum.mifp.ru/html/emoticons/drink.gif |
| Автор: WolfON 13.4.2005, 16:05 | ||||
DimW
А я че? я ниче
|
| Автор: Medved 15.4.2005, 00:44 |
| WHERE UpperCase(first_name) LIKE UpperCase('%Так решается проблемма с регистром%') |