powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Поиск по критериям НУЖНА ИДЕЯ:)
16 сообщений из 16, страница 1 из 1
Поиск по критериям НУЖНА ИДЕЯ:)
    #32182191
Geen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Уважаемые господа! Подсобите с идеями:)
Проблема следующая:
В поле "В" есть текст "генеральный директор"
требуется найти в Столбе "К" записи LIKE "директор" или LIKE "генеральный"
Т.Е. искать по каждому слову.
С трудом представляю себе как объяснить это машине:(
Т.Е.

КАК РАЗБИТЬ ТЕКСТ НА СОСТАВЛЯЮЩИЕ???????

Geen
...
Рейтинг: 0 / 0
Поиск по критериям НУЖНА ИДЕЯ:)
    #32182198
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
Dim B As Variant, C As Variant, S As String

Function MyLike(Fld As String, A As String) As String

B = Split(A,  " " )
S =  ""
For Each C In B
    If S > "  " Then S = S & "  OR  "
    S = S & " Like  ""*"  & C &  "*" ""
Next
MyLike = S

End Function


На входе: MyLike("MyField", "генеральный директор")
На выходе: MyField Like "*генеральный*" OR MyField Like "*директор*"
...
Рейтинг: 0 / 0
Поиск по критериям НУЖНА ИДЕЯ:)
    #32182199
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
То есть Dim и Function надо поменять местами.
...
Рейтинг: 0 / 0
Поиск по критериям НУЖНА ИДЕЯ:)
    #32182244
Geen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Уважаемый Владимир Саныч!
Все таки не разобрался:(
Значит ли ваш текст то, что должен создать свою функцию?
Паблик или Приват?
И самое главное:
Как потом правильно сослаться на нее?

Privat Sub ......... Даблклик()
......
......
.....
..... = "SELECT......FROM....... WHERE (....... = MyLike(?имяполя?,?????)"
.........
.......
End Sub
Да! В .adp наверное мне следует поставить "%" вместо "*"

Искренне Ваш
Geen
...
Рейтинг: 0 / 0
Поиск по критериям НУЖНА ИДЕЯ:)
    #32182307
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
> Паблик или Приват?

Если обращение к ней будет в том же модуле, то достаточно Private, а если нет, то Public. Скорее всего обращение будет в запросе, значит Public.

На все остальные вопросы - да, да, да.
...
Рейтинг: 0 / 0
Поиск по критериям НУЖНА ИДЕЯ:)
    #32182310
Geen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Уж простите великодушно!:)
Непонятливый я:)

1. В Fynction MyLike(Fld - это Fld или имя поля?
2. В тексте запроса = MyLike(МоеПоле?, а что после запятой?)

Не серчайте:)
Geen
...
Рейтинг: 0 / 0
Поиск по критериям НУЖНА ИДЕЯ:)
    #32182332
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Позволю сам себе процитировать самого себя.

На входе: MyLike("MyField", "генеральный директор")

То есть оба параметра стринги, но первый из них имя того поля, которое надо сравнивать, а второй - само то поле, в котором "генеральный директор".

..... = "SELECT......FROM....... WHERE " & MyLike("ОдноПоле", ДругоеПоле)

Правда, это только идея - как и было заказано в заголовке топика. :^) Ее недостаток в том, что надо сначала взять одно значение типа "генеральный директор" и строить весь селект для него. Если же надо в каждой записи сравнивать ОдноПоле с тем "генеральным директором", который в той же записи, то эта идея не годится. Но она на то и идея, чтобы ее совершенствовать. Вот я сам же это и делаю. Вторая версия:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
Function MyLike(D As String, A As String) As Boolean

Dim B As Variant, C As Variant, OK As Boolean

B = Split(A,  " " )
OK = False
For Each C In B
    If D Like  "*"  & C &  "*"  Then OK = True
Next
MyLike = OK

End Function


И тогда:

..... = "SELECT......FROM....... WHERE MyLike(ОдноПоле, ДругоеПоле)"

То есть старая версия MyLike возвращает хвост селекта, а новая сама ставится в селекте и проверяет для каждой записи то, что было заказано.
...
Рейтинг: 0 / 0
Поиск по критериям НУЖНА ИДЕЯ:)
    #32182960
Geen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Уважаемый Владимир Саныч!

Следуя Вашему совету попробовал Split()
Так вот, Boolen не подходит по определению (т.к. после сплита идут несколько других критериев:( ).
Было бы интереснее разобрать "генеральный дриектор" на запчасти (что я и проделал сплитом). Причем выводя резуьтат сплита в месседжбокс, я отчетливо вижу и "генерального" и "директора". Так вот, осталась "мелкая" деталь.

Хотелось бы понять, как именно сшить расспитованные данные обранто в строку. Но эте еще пол беды. В последней части сплита мне не хоттелось бы получить "OR". Подумайте пожалуйста как.

Искренне Ваш
Geen
...
Рейтинг: 0 / 0
Поиск по критериям НУЖНА ИДЕЯ:)
    #32183011
Фотография fedd
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В конце (для первой версии функции MyLike)

Код: plaintext
MyLike = left(S, len(S)- 4 )




А лучше конечно в последней итерации цикла не ставить OR и все. Только не спрашивайте как это сделать!
...
Рейтинг: 0 / 0
Поиск по критериям НУЖНА ИДЕЯ:)
    #32183183
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
> Boolen не подходит по определению (т.к. после сплита идут несколько других критериев:( ).

Не понял.

> Хотелось бы понять, как именно сшить расспитованные данные обранто в строку.

Зачем??? Исходная строка ведь никуда не девается.

> В последней части сплита мне не хоттелось бы получить "OR".

А его там и так нет.
...
Рейтинг: 0 / 0
Поиск по критериям НУЖНА ИДЕЯ:)
    #32183503
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Так лучше.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
Function MyLike(D As String, A As String) As Boolean

Dim C As Variant

For Each C In Split(A,  " " )
    If D Like  "*"  & C &  "*"  Then
        MyLike = True
        Exit Function
    End If
Next
MyLike = False

End Function
...
Рейтинг: 0 / 0
Поиск по критериям НУЖНА ИДЕЯ:)
    #32184106
Geen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Наконец-то!
Почти готово!
Но осталась маленькая деталь:(
Значится беру данные, сплитую, собираю обратно в кучу, и результат вывожу в MsgBox. (Заявил QWER)
Вижу:
(МойСтолб Like '%генеральный%') OR (МойСтолб Like '%директор%')
Идеально!!!
НО при попытке вставить в SQL начались проблемы:

& " WHERE '" & QWER & "' " _ - выдает WHERE '(вся моя фигня)'
а если
& " WHERE & QWER" _ - выдает WHERE & QWER

Я мне нужно:
WHERE (вся моя фигня) - т.е. без кавычек.

ХЕЛП!!!
Geen
...
Рейтинг: 0 / 0
Поиск по критериям НУЖНА ИДЕЯ:)
    #32184129
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
> Я мне нужно:
> WHERE (вся моя фигня) - т.е. без кавычек.

Так кавычки убери, елы-моталы!
...
Рейтинг: 0 / 0
Поиск по критериям НУЖНА ИДЕЯ:)
    #32184705
Geen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сил побороть функцию MyLike не хватило)
Поэтому предлагаю всем свое решение проблемы:)

Итак:
Имеется поле Р6, которое содержит текст "Генеральный директор" (должность).
Требуется провести поиск в таблице dbo.P(вледелец.таблица)
тех записей, которые содержат в столбце dbo.P.P (должность) слова "генеральный" или "директор",
а так же число в столбце dbo.P.Age (возраст) которое находится
в диапазоне между P8 и P10 (полями в форме возраст от и до)
Результат поиска по нажатию кнопки Btn12 нужно выдать в список SP1

Решение:

Private Sub Btn12_Click()
Dim WHR12 As String
Dim B As Variant, C As Variant, A As String, S As String
A = Me.P6
B = Split(A, " ")
S = ""
For Each C In B
If S > "" Then S = S & " OR "
S = S & "(dbo.P.P LIKE " & "'" & "%" & C & "%" & "')"
Next
WHR12 = "SELECT dbo.P.P, dbo.P.Age From dbo.P" _
& " WHERE " & S & "" _
& " AND (dbo.P.Age > '" & Me.P8 & "')" _
& " AND (dbo.P.Age < '" & Me.P10 & "')"
Me.SP1.RowSource = WHR12
End Sub

Где WHR12 - строковая переменная, которая является источником
строк для списка SP1

Надеюсь, кому-нибудь пригодится
Geen

Особое спасибо Владимир Саныч!!!! :)
Да! Если вдруг Вы не очень заняты, хотелось бы доковырять MyKike:)
...
Рейтинг: 0 / 0
Поиск по критериям НУЖНА ИДЕЯ:)
    #32184714
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
В Израиле к одному человеку на "вы" не обращаются. :^)
...
Рейтинг: 0 / 0
Поиск по критериям НУЖНА ИДЕЯ:)
    #32184724
Geen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
To Владимир Саныч

Ну дык спасибо, приятно:)
(шаркнул ножкой)

Твой покорнейший слуга
Geen
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Поиск по критериям НУЖНА ИДЕЯ:)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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