powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Организовать поиск по всем строковым полям (dbf)
4 сообщений из 4, страница 1 из 1
Организовать поиск по всем строковым полям (dbf)
    #32503786
rst
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть справочник..
Хотелось бы организовать поиск по слову в каком бы поле оно не встречалось... (аналог full text search в mssql)
VFP8. dbf по сети.
Подскажите плиз идеи или помогите ссылкой..

(Пока есть только одна идея -> регулярно создавать таблицу со всеми встречающимеся словами из справочника и ссылкой на id и поиск делать по ней)
...
Рейтинг: 0 / 0
Организовать поиск по всем строковым полям (dbf)
    #32503913
PaulWist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть две возможности решить проблему в зависимости от интерфейса вывода:
1. Получение Sql Select
2. Наложение фильтра

Общая идея - надо пройти по всем полям справочника и определить символьноые поля, затем составить символьную строку для выражения поиска и выполнить макроподстановку строки применительно к справочнику

Для фильтра:

Lparameter Condition & условие фильтра
local StrFilter & строка фильтра
* Здесь сохранить окружение данных
StrFilter = ''
select MySpr & имя справочника (хорошо бы передать в параметрах)
for i = 1 to Fcount('MySpr')
if type(Field(i)) $ 'C M'
If empty(StrFilter)
StrFilter = StrFilter + allt(Field(i)) + 'Like *' + allt(Condition) + '*'
else
StrFilter = StrFilter + ' or ' + Allt(Field(i)) + 'Like *' + allt(Condition) + '*'
endif
endif
endfor

StrFilter = 'Set Filter to ' + StrFilter

Select MySpr
&StrFilter
* Здесь восстановить окружение данных

И пор аналогии для Sql Select

PS код не проверял могут быть ошибки, но идея вроде ясна
...
Рейтинг: 0 / 0
Организовать поиск по всем строковым полям (dbf)
    #32503934
XAndy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если нужен просто поиск значения во всех полях таблицы, то можно так (кстати, будет работать и для чисел):

Код: plaintext
1.
2.
3.
4.
5.
scan
   scatter to aSrch
   if ascan(aSrch,"Искомое значение")> 0 
      ? recno()
   endif
endscan


Если нужен контекстный поиск по текстовым полям:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
scan
   scatter to aSrch
   for i= 1  to alen(aSrch)
      if vartype(aSrch[i])=='C' and "Искомое значение"$aSrch[i]
         ? recno()
      endif
   endfor
endscan


Да куча способов есть... Можно на FoxAPI написать функцию, которая бы возвращала всю запись в виде одной строки. Ну а если нужна максимальная скорость, можно еще хитрее. Раз у тебя сеть, значит таблица эксклюзивно не открыта. Можно получить размер заголовка и размер записи таблицы, открыть таблицу с помощью fopen() на чтение и читать записи функциями низкого уровня!
...
Рейтинг: 0 / 0
Организовать поиск по всем строковым полям (dbf)
    #32504120
rst
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо..
Все работает..
Буду думать - подойдет скорость или нет :)..
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Организовать поиск по всем строковым полям (dbf)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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