powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Гадский Locate и пр. методы поиска
7 сообщений из 7, страница 1 из 1
Гадский Locate и пр. методы поиска
    #32110864
aag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день всем!
Вопрос уже задавал, но очень уже допекает....
База VFP, доступ через ADO (OLEDB for ODBC). Делаю:
Код: plaintext
Locate('rn', '001A', []); - находит, RecNo =  1 , и это правильно
Код: plaintext
Locate('rn', '001a', []); - находит, RecNo =  1 , и это НЕ правильно!!!

Ибо, запись эта есть, но с совершенно др. RecNo.
Пробую Seek - провайдер не поддерживает. Хотя в ADO такой метод есть.
Пробую Filter, пробую через ADO Find - тоже самое. Не делает различий между регистрами. А между тем, rn - primary key.
Хочется понять, это такая особенность Delphi/ADO/VFP или мой личный глюк?
И как тогда вообще можно найти запись по ее первичному ключу???
...
Рейтинг: 0 / 0
Гадский Locate и пр. методы поиска
    #32110873
pkarklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А зачем тебе RecNo, ведь если запись нашлась, то она становиться текущей.
...
Рейтинг: 0 / 0
Гадский Locate и пр. методы поиска
    #32110909
m_kus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Особенность или глюк не важно, не должно быть такого...
Я бы плюнул и начал бы искать обходные пути, например, если длина ключа строго ограничена создать вычисляемое поле:
Код: plaintext
rns:=StrToInt(rn[ 1 ])+...StrToInt(rn[n]* 256 ^n)

и искать по нему... Конечно, будет работать медленнее, но ведь будет!
Или можно так:
Код: plaintext
1.
2.
3.
  Filter:='rn=001a';
  FindFirst;
  while not eof and (FieldValues['rn']<>'001a') do FindNext;

Не проверял...
Я думаю "делфийское" сравнение строк (в данном случае <>) не различает регистр. Кстати, надо убедится, что сами FieldValues[] приходят в исходном регистре... :)
...
Рейтинг: 0 / 0
Гадский Locate и пр. методы поиска
    #32110936
aag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> pkarklin
RecNo мне не нужен. он для примера. Дело в том, что в обоих случаях находится одна и таже (первая) запись, хотя на самом деле записи разные - у значения поля "rn" различается регистр.

> m_kus
Дельфийское сравнение регистр различает. Фильтр работает также, т.е. тоже не работает. А обходные пути - сводятся к циклу
while not ADOTable1.Eof do
begin
...
if Value = ADOTable1.FieldByName(...).AsString then ...
end
Но, думаю, это существенно медленнее чем Locate. А для меня это критично.
Вычисляемое поле - так ведь все равно искать не по индексу, не как Locate
Вот ведь напасть - и PK есть, и искать не получается. Если только "select ..." формировать? - дак тоже ведь медленнооооо будет!
...
Рейтинг: 0 / 0
Гадский Locate и пр. методы поиска
    #32110971
m_kus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да, я и хотел сказать - различает регистр... :)
Что до фильтра, так ведь он вернёт только несколько записей, по ним то уже циклом пройти не так долго, я так понимаю?
...
Рейтинг: 0 / 0
Гадский Locate и пр. методы поиска
    #32111010
aag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> m_kus
Это идея... Вот ведь изврат - по PK делать фильтрацию и искать циклом!
Осталось только проверить - насколько быстро будет фильтрация по PK для 10 тыщ. записей....
Спасибо!
...
Рейтинг: 0 / 0
Гадский Locate и пр. методы поиска
    #32111443
Артем1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А в последних квадратных скобках разве не указываются опции регистронезависимого поиска (и совпадению по части ключа)?
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Гадский Locate и пр. методы поиска
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]