powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / SEEK, поиск по нескольким полям
18 сообщений из 18, страница 1 из 1
SEEK, поиск по нескольким полям
    #33944457
321654987
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Помогите, есть таблица

----------------------------

nomer | fm | im | ot

-----------------------------

есть индекс FIO с выражением - fm+im+ot

+-----------------------------------------------

как осуществлять поиск с помощью SEEK по этим полям?

SEEK "ФАМИ"+"ИММ"

------------------------
неполучается... поможите
...
Рейтинг: 0 / 0
SEEK, поиск по нескольким полям
    #33944506
MFoxer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
&& Для теста создадим табличку
Local  i as Integer 
Create Table Tabletest ( nomer  N( 10 ), fm V( 30 ), im V( 30 ), ot V( 30 ) )
For i= 100  To  100000 
   Insert  Into Tabletest (nomer,fm,im,ot);
      Values  ( i,'1'+Chr( Mod(i, 255 )),Chr( Mod(i+ 1 , 255 )),Chr( Mod(i+ 2 , 255 )) ) 
Endfor
Index ON  Alltrim( fm ) +  Alltrim( im ) + Alltrim( ot ) Tag FIO

&&  Где-то там, в программе...

Set Safety Off
Set Exact On
Set Near On 

 Use  Tabletest In  0  Alias Tabletest Again Shared
 Local lcFind as String 
 lcFind = Alltrim( fm ) +  Alltrim( im ) + Alltrim( ot )
 ? Seek ( lcFind )

* Попробуй, тебе понравится.
* P.S VFP  9 . 0 
 
*
...
Рейтинг: 0 / 0
SEEK, поиск по нескольким полям
    #33944919
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для выполнения поиска по первым символам ключа необходима настройка

Код: plaintext
SET EXACT OFF

Вообще-то, это настройка по умолчанию, но у тебя она видимо изменена.
...
Рейтинг: 0 / 0
SEEK, поиск по нескольким полям
    #33944959
321654987
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Огромное Вам, а почему в самом SEEK <выражение> не срабатывает? выражение как никак? или как?
А так ОГРОМНОЕ СПС
...
Рейтинг: 0 / 0
SEEK, поиск по нескольким полям
    #33950992
olegov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
321654987Огромное Вам, а почему в самом SEEK <выражение> не срабатывает? выражение как никак? или как?
А так ОГРОМНОЕ СПС

Да блин, используй ты locate про скорость выборки врут, на нынешних компах примерно та же что и у seek
...
Рейтинг: 0 / 0
SEEK, поиск по нескольким полям
    #33951047
Фотография Redrik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
321654987FIO = fm+im+ot
SEEK "ФАМИ"+"ИММ"

У тебя ключ получается, например:
"Иванов Иван Иванович"
"Петров Петр Петрович"
"Сидоров Сидор Сидорович"

а ты хочешь SEEK'нуть такое: "ИванИва"?
Не получится!
Делай тогда "SEEK(...) and SEEK(...)", но индексы по отдельным полям...
...
Рейтинг: 0 / 0
SEEK, поиск по нескольким полям
    #33951102
MFoxer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
да блин, используй ты locate про скорость выборки врут, на нынешних компах примерно та же что и у seek
А Вы собственно знаете разницу между алгоритмами перебора и алгоритмами половинного деления ? И наверное итерационные задачи решали, да ? Даже не смешно, честное слово.. пионерское.
...
Рейтинг: 0 / 0
SEEK, поиск по нескольким полям
    #33951133
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MFoxer olegovда блин, используй ты locate про скорость выборки врут, на нынешних компах примерно та же что и у seek
А Вы собственно знаете разницу между алгоритмами перебора и алгоритмами половинного деления ? И наверное итерационные задачи решали, да ? Даже не смешно, честное слово.. пионерское.
Для справки.

В FoxPro оптимизируются ВСЕ команды и функции, имеющие FOR-условие. В том числе и LOCATE. Это значит, что в случае наличия простых индексов по полям "Фамилия", "Имя" и "Отчество" конструкция вида

SELECT MyTab
SET ORDER TO 0
LOCATE FOR "Фамилия" = ... AND "Имя" = ...

Также будет оптимизирована и скорость поиска будет сопоставима со скоростью поиска по SEEK(). Разумеется, меньше, но не так уж чтобы очень...
...
Рейтинг: 0 / 0
SEEK, поиск по нескольким полям
    #33951138
MFoxer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВладимирМ, не будет. Давайте проведем эксперимент. Только определимся с алгоритмом и конфиргурацией компьютера и структурой и объемом данных.
Оптимизация движка фокса и алгорим просмотра записи 2 разные вещи, IMHO.
...
Рейтинг: 0 / 0
SEEK, поиск по нескольким полям
    #33951170
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MFoxerВладимирМ, не будет. Давайте проведем эксперимент. Только определимся с алгоритмом и конфиргурацией компьютера и структурой и объемом данных.
Оптимизация движка фокса и алгорим просмотра записи 2 разные вещи, IMHO.
Давайте сначала определимся с терминами.

Задача: найти одну запись.

Какое отношение к этой задаче имеет "оптимизация движка фокса" и "алгоритм просмотра записи"?

В FoxPro есть так называемая Rushmore-оптимизация. Это механизм ускоренного поиска данных основанный на использовании индексов. Так вот, в HELP по FoxPro так и написано:

HELP VFP9Use Rushmore to optimize data access according to the number of tables involved. When you access single tables, you can take advantage of Rushmore anywhere that a FOR clause appears. When you access multiple tables, SELECT - SQL queries supersede all Rushmore optimizations. In an SQL command, Visual FoxPro decides what is needed to optimize a query and does the work for you. You don't need to open tables or indexes. If SQL decides it needs indexes, it creates temporary indexes for its own use.

Или, то же самое из переведенного HELP к VFP3

HELP VFP3При обработке одиночных таблиц преимущества технологии Rushmore сказываются везде, где используется предложение FOR . При обработке многотабличных запросов команда SELECT - SQL перекрывает все обычные правила, требуемые для технологии Rushmore. Команды SQL автоматически определяют необходимые правила оптимизации запроса. Вам не надо самостоятельно открывать таблицы или индексы. Если для выполнения запроса SQL потребуется индекс, он будет создан на время выполнения запроса.

Далее идет список потенциально оптимизируемых выражений. Среди них и команда LOCATE.

"Тонкость" использования оптимизации в отношении команд с FOR-условием заключается в том, что для лучшей оптимизации необходимо отключить главный индекс. То самое

SET ORDER TO 0

на которое мало кто обращает внимание. Если установлен главный индекс, то да, действительно, будут большие тормоза. Но если его отключить, то скорость поиска будет сопоставима с SEEK(). Повторюсь. Все-таки медленнее, но речь уже будет идти не о порядках, а о "разах".
...
Рейтинг: 0 / 0
SEEK, поиск по нескольким полям
    #33951171
MFoxer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Какое отношение к этой задаче имеет "оптимизация движка фокса" и "алгоритм просмотра записи"?
Элементарное. Движок работает на уровне оптимизации страниц(4 КБ), а SEEK как и Locate использует алгоритмы и ему начехать, как там внутри. А Вы мне установки "тычете" . Рашмор - да, круто. Да Эффективно. А как сделан этот самый Рашмор Вы хоть раз задумывались ?
...
Рейтинг: 0 / 0
SEEK, поиск по нескольким полям
    #33951173
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MFoxer>Какое отношение к этой задаче имеет "оптимизация движка фокса" и "алгоритм просмотра записи"?
Элементарное. Движок работает на уровне оптимизации страниц(4 КБ), а SEEK как и Locate использует алгоритмы и ему начехать, как там внутри. А Вы мне установки "тычете" . Рашмор - да, круто. Да Эффективно. А как сделан этот самый Рашмор Вы хоть раз задумывались ?
У нас стоит задача проверить эффективность работы (скорость поиска) или узнать "как оно внутри тикает"?

Как "этот самый Рашмор" работает я примерно представляю, а вот как он сделан - понятия не имею. И по прежнему не вижу, как именно "оптимизация страниц (4КБ)" может повлиять на скорость поиска нужной записи.

Знаете, я уже на практике убедился, что оптимизация (ускорение) LOCATE работает . Если у Вас есть возражения - приведите пример.
...
Рейтинг: 0 / 0
SEEK, поиск по нескольким полям
    #33951176
MFoxer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВладимирМ, оптимизация ( ускорение ) LOCATE , по сравнению с чем ?
...
Рейтинг: 0 / 0
SEEK, поиск по нескольким полям
    #33951179
MFoxer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На С++ ( FLL) я могу представить Вам функцию поиска ( с условием ) по сравнению с которой Locate "одтыхает" . Верите ?
А почему ? А потому ,что когда наши коллеги писали эту функцию небыло итераторов, карт памяти и вообще библиотеки STL. А уж на ее алгоритм с 1992 года точно никто внимания не обращал.
...
Рейтинг: 0 / 0
SEEK, поиск по нескольким полям
    #33951330
PaulWist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2MFoxer

Извините. встряну в Ваш разговор,

MFoxer когда наши коллеги писали эту функцию небыло итераторов,

не могли бы Вы в двух словах описать "идеологию" этой ф-ии, уж очень любопытно - какой механизм использован для поиска в данных не подчиняющихся формальному описанию.
...
Рейтинг: 0 / 0
SEEK, поиск по нескольким полям
    #33952075
-=AlexiS=-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
позволю себе тоже встрять в дискуссию.
более 10 лет работаю с фоксом.
с момента появления рашмора НИКОГДА не использую SEEK
правильно построенные индексы + рашмор много удобнее и не сказал-бы чтобы медленнее.
составные индексы практически не использую (только для сортировок при посмотрах).
Почему удобнее
1. не нужно "помнить" какой индекс активен (хотя в принципе есть indexseek)
2. не нужно при поиске в составных индексах приводить выражение поиска к индексному выражению.
3.при изменениях/удалениях/добавлениях тегов программа работает без переделок.

то MFoxer
А как сделан этот самый Рашмор Вы хоть раз задумывались ? - меня собственно и не волнует, я знаю как с ним работать, и мне не обязательно знать как он там внутри все делает.
Вы когда свет дома включаете - сильно задумываетесь как все устроено ( ну там электростанция , проводка, лампочка) ?
...
Рейтинг: 0 / 0
SEEK, поиск по нескольким полям
    #33952439
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MFoxerВладимирМ, оптимизация ( ускорение ) LOCATE , по сравнению с чем ?
Вы помните, с чего лично Вы вообще ввязались в эту дискуссию?

olegovДа блин, используй ты locate про скорость выборки врут, на нынешних компах примерно та же что и у seek

Да, если индексов нет, то команда LOCATE будет вынуждена сканировать записи таблицы, что само по себе медленно. Поэтому с самого начала, когда я вступил в дискуссию, я Вам напомнил, что команда LOCATE может быть оптимизирована (ускорена).

Насколько я понимаю, Вы слишком увлеклись опровержением высказывания olegov и просто не поняли, что я Вам напомнил, причем подчеркнул как "К сведению".

А напомнил я Вам очевидный факт. Команда LOCATE может выполняться медленно или быстро в зависимости от того, будет ли ее выражение оптимизировано.
...
Рейтинг: 0 / 0
SEEK, поиск по нескольким полям
    #33954003
Фотография Redrik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MFoxerНа С++ ( FLL) я могу представить Вам функцию поиска... по сравнению с которой Locate "отдыхает" ....
DO IT!!! Revolution!!!

P.S. Снова ушли в "страну вечных споров"? Исходный вопрос перечитайте...

P.P.S. Как сказал когда-то старик Лес - "Билли отвалил грузовик денег за Рашмора"! ;-)
...
Рейтинг: 0 / 0
18 сообщений из 18, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / SEEK, поиск по нескольким полям
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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