|
|
|
| Доброе утро! Очень легкий вопрос у меня к вам , вот запрос , нужно И (имя) объединить с О (отчество) и вставить в Ф (фамилию). Ф И О находятся в разных столбцах. Вот запрос , как нужно его изменть что бы он заработал ? (щас учу мат часть)
st = "insert into [Результаты поиска] ([Id Rec],Данные,[Продукт]) select сч_ОСФИО, Ф 'Открытие счета' as dbtext from ОСФИО where (ОСФИО.Ф = [Результаты поиска].Данные) AND (ОСФИО.И = [Результаты поиска].Данные) AND (ОСФИО.О = [Результаты поиска].Данные) like '*" & txtFieldCryt & "*'"
Poisk.Execute st
|
Я так понимаю ошибка после слова where... | |
|
| |
|
|
|
| это по каковски вообще?
я ничё нипонял, но хотябы так было бы хоть что-то более-менее логичное, имхо
st = "insert into [Результаты поиска] ([Id Rec],[Данные],[Продукт]) " & _
"select [сч_ОСФИО], [Ф] & [И] & [О], 'Открытие счета' as dbtext " & _
"from ОСФИО " & _
"where (ОСФИО.Ф & ОСФИО.И & ОСФИО.О like '*" & txtFieldCryt & "*'"
Poisk.Execute st
|
| |
|
| |
|
|
|
| Понятно, а если я хочу отделить имя от фамилии пробелом :
st = "insert into [Результаты поиска] ([Id Rec],Данные,[Продукт]) select сч_ОСФИО, [Ф] & " " & [И] & " " & [О], 'Открытие счета' as dbtext from ОСФИО where (ОСФИО.Ф & ОСФИО.И & ОСФИО.О) like '*" & txtFieldCryt & "*'"
Poisk.Execute st
|
почему то ошибка синтаксиса, хотя делаю все по книжке... | |
|
| |
|
|
|
|
st = "insert into [Результаты поиска] ([Id Rec],Данные,[Продукт])
select сч_ОСФИО, [Ф] & ' ' & [И] & ' ' & [О], 'Открытие счета' as dbtext
from ОСФИО
where (ОСФИО.Ф & ОСФИО.И & ОСФИО.О) like '*" & txtFieldCryt & "*'"
Poisk.Execute st
|
| |
|
| |
|
|
|
| там были двойные кавычки чес слово! osmor и Кабан | |
|
| |
|
|
|
| а еще , я ставлю условие отбора like "*" , а пробелы не хотят на звездочку замещаться. Как нужно делать правильно что бы поиск по неполным комбинациям слов срабатывал ? | |
|
| |
|
|
|
|
| тоесть например, куч*иг = кучин игорь. Как сечас запрос - не работает. | |
|
| |
|
|
|
| и не должен
куч*иг* = кучин игорь | |
|
| |
|
|
|
| osmor почему запрос не работает по любой части если * уже стоят перед и после искомого слова ?
like '*" & txtFieldCryt & "*'
|
| |
|
| |
|
|
|
| покажите строку поиска и что по вашему по ней должно находиться и не находится? | |
|
| |
|
|
|
| строка поиска, та что выше, где вы исправили мои ошибки. По ней находятся отдельные только отдельные слова, а комбинации из неполных Ф И О нет(( а если поставить в поле поиска звездочки между словами то все ищется. Вот я и подумал значит надо вставить в программу строчку, которая будет переводить пробелы в звездочки... А с другой стороны вроде бы у меня поле для поиска уже окружена * с обеих сторон, поэтому я и не понимаю почему не ищет по неполным комбинациям слов | |
|
| |
|
|
|
| *куч иг* <> кучин игорь
*иниго* <> кучин игорь
*кучи иг* <> кучин игорь
*кучиyиг* <> кучин игорь
*ин иго* = кучин игорь
не понимаю вашего вопроса | |
|
| |
|
|
|
| сформулирую так, этот запрос должен искать по неполным комбинациям слов ? напр ввожу ин иго и находится кучин игорь ?
st = "insert into [Результаты поиска] ([Id Rec],Данные,[Продукт])
select сч_ОСФИО, [Ф] & ' ' & [И] & ' ' & [О], 'Открытие счета' as dbtext
from ОСФИО
where (ОСФИО.Ф & ОСФИО.И & ОСФИО.О) like '*" & txtFieldCryt & "*'"
Poisk.Execute st
|
| |
|
| |
|
|
|
| like '*ин иго*' найдет "кучин игорь" в том случае если кол-во СИМВОЛОВ ПРОБЕЛ одинаково
Но судя по тому что у вас в запросе написано искаться у вас будет не
"кучин игорь"
а
"кучинигорь"
поскольку в ...where (ОСФИО.Ф & ОСФИО.И & ОСФИО.О) like ....
между "Ф" и "И" не вставляются пробелы | |
|
| |
|
|
|
| я вас понял, буду исправлять | |
|
| |
|
|
|
| Люди, я все таки не совсем понял что osmor пытался мне донести! Я повторюсь, почему мой запрос не отбирает по примеру куч иг = кучин игорь ? чего в нем не хватает!
st = "insert into [Результаты поиска] ([Id Rec],Данные,[Продукт]) select сч_ОСФИО, [Ф] & ' ' & [И] & ' ' & [О], 'Открытие счета' as dbtext from ОСФИО where (ОСФИО.Ф & ' ' & ОСФИО.И & ' ' & ОСФИО.О) like '*" & Me.txtFieldCryt & "*'"
Poisk.Execute st
|
| |
|
| |
|
|
|
| повторюсь
*куч иг* <> кучин игорь
*иниго* <> кучин игорь
*кучи иг* <> кучин игорь
*кучиyиг* <> кучин игорь
*ин иго* = кучин игорь
*куч*иг* = кучин игорь
*куч* = кучин игорь
*иг* = кучин игорь | |
|
| |
|
|
|
| ну а как же тогда пробелы на звездочки заменить? тоесть чтобы искать например *куч*иг* = кучин игорь
сейчас у меня ищется только когда *ххх* = ххх хххххх.
Плиз дайте подсказку | |
|
| |
|
|
|
| причем здесь пробелы?
У вас недостает как минимум 2-х символов кроме пробела
кучИН игорь
почитайте что нибудь про маски... вы просто никак не хотите понять, что только "*" заменяте любое кол-во символов, а там где у вас нет "*" в искомой строке должно быть тоже что и в строке поиска.
т.е. когда вы пишите
*ку иг* будут найдены все строки в который в середине, начале или конце содержится сдержатся сочетание символов
"ку иг"
если внутри есть какие-то другие символы (пробел или любые другие), то такая строка не соответствует критерию поиска, или если какого-то символа (даже пробела) недостает.
например
"куиг"
"ку!иг"
"ку иг"
"куч иг"
"кучи иг"
"кучиниг"
"кин иг"
Все эти строки НЕ соответствуют маске "*ку иг*" | |
|
| |
|
|
|
|
| да я бегло зацепил маски http://hiprog.com/forum/read.php?id_forum=1&id_theme=4140&page=1 но там написано что лучше их не использовать и я от них оказался ..
щас изучу повнимательнее
То что вы написали я понял сразу (почти ) поэтому и спрашивал как грамотно заменить символы пробел на звездочки | |
|
| |
|
|
|
| replace(СтрокаПоиска,chr(32),chr(42)) | |
|
| |
|
|
|
| Всем доброе утро, по московскому времени!
как сказал Кабан у меня не вышло сделал вот так (подсмотрел в одном примере) :
like '*" & DivideString(txtFieldCryt.Value) & "*'"
|
в таком виде прекрасно ищется куч иг = кучин игорь !
П.с. может кому будет полезно
П.п.с. спасибо всем кто мне ответил, а особенно оsmor и Кабан
П.п.п.с Сейчас вбил в поис devidestring и нашел пример(2004 года) уже тут, http://hiprog.com/index.php?option=com_content&task=view&id=445&Itemid=35 жалко что раньше не увидел хотя искал, дошел до 2005 года и бросил | |
|
| |