Найти букву в слове и заменить на *

Весь MS Office, программирование на Visual Basic for Applications и MS VB

Модератор: Naeel Maqsudov

Ответить
gartes
Сообщения: 3
Зарегистрирован: 04 мар 2008, 15:19

Всем привет!!!
Такая вот задачка!!!
Есть база данных Access 2007 (Это не принципеально есть и на 2003)
В базе есть таблица состоящая из 1 строки и 3 столбца т.е.
I 1-Фамилия I 2_Имя I Очество I
I _______________I________________ I______________I
I Іванов I Ніколай I Петровіч I

Так вот это написано на Украинском языке

Нужен макрос который найдет букву "І" И заменит ее на "*"
Затем найдет букву ну к примеру "О" и также заменит ее на "*"
И так далие затем перейдет к следующему столбцу.

Чесно говоря уже два дня убил нечего не получаеться!!!
С VBA слабовато но уже купил книгу Джефф Споттс
Ну вобщем если мне кот небудь в чем то поможет моей благодарности не
будет придела !!!

Спасибо за внимание к моему письму!!!!
Аватара пользователя
VictorM
Сообщения: 794
Зарегистрирован: 23 окт 2006, 01:44
Откуда: Lugansk, Ukraine
Контактная информация:

Посмотрите тему http://forum.developing.ru/showthread.php?t=7247, может пригодится?
Аватара пользователя
Aent
Сообщения: 1129
Зарегистрирован: 01 окт 2006, 14:52
Откуда: Saratov,Russia
Контактная информация:

А можно узнать какая цель замены? Access отлично работает и с дополнительными
символами кириллицы с диакритическими значками.
gartes
Сообщения: 3
Зарегистрирован: 04 мар 2008, 15:19

Aent писал(а):А можно узнать какая цель замены? Access отлично работает и с дополнительными
символами кириллицы с диакритическими значками.
Созвучные фамилии
Например Для поиска фамилии М_и_колаєнко или М_і_колаенко
В любом случае как бы не вводили буквы "И" "і" надо заменить на звезды**
У Меня у самого фамилия созвучная с предд..
В паспорте и в дипломе одна в школьном аттестате немного по-другому


PS ну не обязательно на "*" можно и на "?"
Потом запрос access _a с этой таблице будет брать значения для условий отбора в базе данных.
Напомню там всего одна строчка и три столбца. И это access.
Если бы вопрос стоял с обнаружением в слове только 1й буквы к примеру "і" то можно было создать запрос обновления с функц.. Replace([(Таблица1)]![Поле1];"і";"*") но как заставить меняться переменную "і" скажем к примеру на "и","о" ,"а"
Как это собрать в макросе я приблизно знаю а вот как стать на поле [(Таблица1)]![Поле1] и начать поиск символа а затем перейти на поле [(Таблица1)]![Поле2] почему-то еще не догнал .
Teslenko_EA
Сообщения: 526
Зарегистрирован: 04 фев 2007, 18:37
Откуда: Сургут
Контактная информация:

Здравствуйте gartes.
"... найдет букву "І" И заменит ...", это скорее не сама задача, а инструмент для ее решения. А вот эта строка "...запрос access _a с этой таблице..." похоже и есть то ради чего...
Может "объявите" свою задачу, ради которой собираетесь что-то, где-то менять? :)
Евгений.
gartes
Сообщения: 3
Зарегистрирован: 04 мар 2008, 15:19

Teslenko_EA писал(а):Здравствуйте gartes.
"... найдет букву "І" И заменит ...", это скорее не сама задача, а инструмент для ее решения. А вот эта строка "...запрос access _a с этой таблице..." похоже и есть то ради чего...
Может "объявите" свою задачу, ради которой собираетесь что-то, где-то менять? :)
Евгений.
простая база с фамилиями
Для того чтоб небыло ошибок в поиске при вводе созвучных букв в фамилиях
К примеру : Сидит девочка, ей надо найти Евгения
Она наберет "Евгений" ----- только на украинском будет уже Буква "Э"
Вобщем цель макроса изменить запись "ЕВГЕНИЙ" на "*ВГ*Н*Й" НУ ИЛИ ЧТОТО ПОХОЖЕЕ!!!
Скажем есть масив букв который содержит "а";"о";"э";"ы";Ну пока и хватит так вот надо их заменнить на знак "*"
Я уже разобрался как с помощью RecordSet считать данные осталось только как найти и заменить эти буквы вобщем я думаю задача не сложная!!!
Аватара пользователя
Aent
Сообщения: 1129
Зарегистрирован: 01 окт 2006, 14:52
Откуда: Saratov,Russia
Контактная информация:

Как мы c Teslenko_EA и подозревали в базе ничего править не нужно. Нужно трансформировать входящий запрос в регулярное выражение для SELECT. Т.е на основании введённой строки строятся варианты транскрибирования и строится запрос которому удовлетворяют все эти варианты.
Teslenko_EA
Сообщения: 526
Зарегистрирован: 04 фев 2007, 18:37
Откуда: Сургут
Контактная информация:

Здравствуйте gartes.
Мне кажется источник строк Вашего рекордсета вполне можно создавать в подобной функции:

Код: Выделить всё

Function toQuery(sArg) As String
Dim i%, s$
toQuery = "SELECT * FROM Table "
If Len(sArg & "") > 0 Then
    s = "'*'"
    For i = Len(sArg) To 1 Step -1
        Select Case Mid(sArg, i, 1)
            Case "а", "о", "э", "ы" 'список символов требующих замены
                s = "'?' & " & s
            Case Else
                s = "'" & Mid(sArg, i, 1) & "' & " & s
        End Select
    Next
    toQuery = toQuery & " WHERE Name1 Like " & s
End If
End Function
а в качестве ее аргумента используйте поле ввода. Конструкция может иметь подобный вид:

Код: Выделить всё

...
sSQL = toQuery(Me.Поле1) ' строка запроса
Set rs = ... ' создание и открытие рекордсета с использованием запроса sSQL
Table - имя Вашей таблицы
Name1 - поле по которому будет осуществляться выборка
Me.Поле1 - поле на форме в которое девочка будет вводить мое имя. ;)
Евгений.
Ответить