Rambler's Top100
Форум: MS ACCESSVBVBA MS OfficeMS SQL server
Новые сообщения: 0000

Форум: MS ACCESS

Вопросы связанные с MS ACCESS

Обновить визитку
Участники «Online»
Все участники

 
 

Доброго времени суток, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Информация к размышлению
 
 автор: Goblin   (18.04.2009 в 22:28)   личное сообщение
9 Кб.
 
 

А можно ли создать функцию для склонения фамилий, имен, отчеств. Например, есть таблица с полями Фамилия, Имя, Отчество и логическое поле СклонениеФамилий. Составляю запрос (пример для мужских имен прикреплен). Есть и для женских родов, но добавляется значек пол и формула больше. Протестировано на 100 ФИО. Залетов не было. Но каждый раз составлять запрос, копировать и так далее - мутно. Может кто сумеет такую одну функцию в VBA создать? Что бы было FuncComy([Фамилия]) - и все пучком?
Просто после ввода сотрудника в ходе знакомства с ним, получаю в отчетах и через слияние в ворде справки, приказы, отпускные, командировочные и прочее на данного товарища.

  Ответить  
 
 автор: Lukas   (18.04.2009 в 22:59)   личное сообщение
 
 

Написать функцию несложно, и подозреваю уже написано немеряно. Но с учетом многонациональности и особенностей языков, потребуется огромная таблица исключений из правил. К тому-же: В документах должно быть не так, как по-правилам, а так как в оригинальном документе, даже если в оригинальном документе ошибка.

  Ответить  
 
 автор: Goblin   (18.04.2009 в 23:19)   личное сообщение
 
 

Так зачем же на всех языках мира? С русским бы справиться.
А в запросе можно много полей поставить на все случаи жизни и в итоговом документе будет как ему положено.
Но это я так вопрос задал. Просто когда слишком много полей со сложными функциями, Access начинает ругаться что слишком сложно для расчета. А так и ему проще и для составления быстрее.

  Ответить  
 
 автор: Lukas   (18.04.2009 в 23:31)   личное сообщение
 
 

Да откуда-ж русские фамилии, имена в России? Разве что на окраинах еще осталось немного, да в глуши где-нибудь.

  Ответить  
 
 автор: Goblin   (19.04.2009 в 00:36)   личное сообщение
 
 

Так оттуда и заказ . Забыли как склоняться. Вот и приходится комп напрягать.

  Ответить  
 
 автор: Lukas   (19.04.2009 в 01:03)   личное сообщение
46 Кб.
 
 

Во какую древность я у себя нарыл. Там есть простая функция Кому. Подточи под себя.

  Ответить  
 
 автор: snipe   (19.04.2009 в 01:16)   личное сообщение
 
 

Вот откопал у себя.....работает не совсем корректно из-за окончаний мужских отчеств...вообщем окончания оглы оол и т.д воспринимает за женщин ...ну и склоняет соответственно (код всего для одного падежа) где раскопал не помню, но не мое точно




Function GenitiveCase(sSurname As String, sName As String, sPatronymic As String) As String
Dim bMaleSex As Variant

bMaleSex = (Right(sPatronymic, 1) = "ч")

' Фамилия
If Len(sSurname) > 0 Then
If bMaleSex Then
Select Case Right(sSurname, 1)
Case "о", "и", "я", "а", "х"
GenitiveCase = sSurname
Case "й"
GenitiveCase = Mid(sSurname, 1, Len(sSurname) - 2) + "ого"
Case Else
GenitiveCase = sSurname + "а"
End Select

Else
Select Case Right(sSurname, 1)
Case "о", "и", "б", "в", "г", "д", "ж", "з", "к", "л", "м", "н", "п", "р", "с", "т", "ф", "х", "ц", "ч", "ш", "щ", "ь"
GenitiveCase = sSurname
Case "я"
GenitiveCase = Mid(sSurname, 1, Len(sSurname) - 2) & "ой"
Case Else
GenitiveCase = Mid(sSurname, 1, Len(sSurname) - 1) & "ой"
End Select

End If
GenitiveCase = GenitiveCase & " "
End If
' Имя
If Len(sName) > 0 Then
If bMaleSex Then
Select Case Right(sName, 1)
Case "й", "ь"
GenitiveCase = GenitiveCase & Mid(sName, 1, Len(sName) - 1) & "я"
Case Else
GenitiveCase = GenitiveCase & sName & "а"
End Select
Else
Select Case Right(sName, 1)
Case "а"
Select Case Mid(sName, Len(sName) - 1, 1)
Case "и", "г"
GenitiveCase = GenitiveCase & Mid(sName, 1, Len(sName) - 1) & "и"
Case Else
GenitiveCase = GenitiveCase & Mid(sName, 1, Len(sName) - 1) & "ы"
End Select
Case "я"
If Mid(sName, Len(sName) - 1, 1) = "и" Then
GenitiveCase = GenitiveCase & Mid(sName, 1, Len(sName) - 1) & "и"
Else
GenitiveCase = GenitiveCase & Mid(sName, 1, Len(sName) - 1) & "и"
End If
Case "ь"
GenitiveCase = GenitiveCase & Mid(sName, 1, Len(sName) - 1) & "и"
Case Else
GenitiveCase = GenitiveCase & sName
End Select
End If
GenitiveCase = GenitiveCase & " "
End If
' Отчество
If Len(sPatronymic) > 0 Then
If bMaleSex Then
GenitiveCase = GenitiveCase & sPatronymic & "а"
Else
GenitiveCase = GenitiveCase & Mid(sPatronymic, 1, Len(sPatronymic) - 1) & "ы"
End If
End If
End Function

  Ответить  
 
 автор: Goblin   (19.04.2009 в 22:18)   личное сообщение
 
 

Спасибо. Оказывается так сложно. Вот уж не думал. В запросе получается намного меньше писанины. И пока работает без замечаний.

  Ответить  
 
 автор: FORMAT   (20.04.2009 в 10:51)   личное сообщение
 
 

У нас в стране в каждом паспортном столе лежит список правильного написания имен и отчеств.
До этого всегда считал, что Наталья и Наталия - это интертрепации одного и того же имени, ан нет, оказывается разные имена. Так это распространенное имя. А сколько нераспростарненных. Там вааще чорт ногу сломит.

  Ответить  
 
 автор: Goblin   (20.04.2009 в 12:49)   личное сообщение
 
 

Всем большое спасибо. Инфы достаточно. А то я вечно велосипед изобретаю.

  Ответить  
HiProg.com - Технологии программирования
Rambler's Top100 TopList