|
автор: ???? (04.08.2006 в 00:00) |
|
| Здравствуйте! Подскажите пожалуйста как можно преобразовать Фамилию Имя Отчество в Фамилию И.О.
При помощи функции на VB. Я нашел код таких функций в интернете, однако у меня ничего не работает.
В поле формы вводится - Фамилия Имя Отчество. В этой же форме есть поле в котором должна преобразовываться
Фамилия И.О. Это поле будет потом использовываться в запросе.
В обработку какого события надо вставлять фуккцию. Пришлите пожалуйста работающий пример, или опишите как можно это сделать.
Я пробывал вставить SQL запрос, но он работает в старой копии моей бызы, в в новой нет.
SELECT [Фамилия] & " " & Left([Имя],1) & "." & Left([Отчество],1) & "." AS ФамилияИО
FROM Сотрудники
WHERE (((Сотрудники.Должность)="водитель автобуса"))
ORDER BY [Фамилия] & " " & Left([Имя],1) & "." & Left([Отчество],1) & ".";
Заранее Спасибо. Мой e-mail bug-l@yandex.ru
Код функции (в модуле FamIO):
Option Compare Database
Option Explicit
Function FamIO(strFIO As String)
Dim strSubS As String
Dim lngPos As Long
If IsNull(strFIO) Then Exit Function
strSubS = Trim(strFIO)
lngPos = InStr(strSubS, " ")
FamIO = FamIO & Mid(strSubS, 1, lngPos - 1)
strSubS = LTrim(Mid(strSubS, lngPos))
lngPos = InStr(strSubS, " ")
FamIO = FamIO & " " & Left(strSubS, 1) & ". "
strSubS = LTrim(Mid(strSubS, lngPos))
FamIO = FamIO & Left(strSubS, 1) & ". "
End Function | |
|
| |
|
автор: Explorer (05.08.2006 в 00:00) |
|
| но он работает в старой копии моей бызы, в в новой нет. по всему судя в старой версии базы, в таблице "Сотрудники" у вас три поля
[Фамилия]
[Имя]
[Отчество]
если в новой версии у вас фамилия имя и отчество в одном поле [ФИО]- переделайте таблицу или создайте для формы новый источник записей (запрос) в котором Фамилия Имя и Отчество будут разделены (в случае сложных фамилий - с пробелом, например - это может привести к ошибкам)
если ваши позна... в общем...
если и в новой таблице три отдельных поля, а вы пытаетесь на форме отобразить их занчения как "фамилия и.о." - этот запрос что вы приводите:
SELECT [Фамилия] & " " & Left([Имя],1) & "." & Left([Отчество],1) & "." AS ФамилияИО
в принципе должен работать - странно что у вас не получается
проверьте названия полей в Record Source формы (таблице или запросе) на соответствие названию полей в приведенном вами запросе или источнике значений поля (Сontrol Source) | |
|
| |
|
автор: ???? (05.08.2006 в 00:00) |
|
| Re: но он работает в старой копии моей бызы, в в новой нет. Спасибо конечно, да я тлько начинаю разбираться в программировании, извините за банальные вопросы, а как насчет модуля для преобразования Фамилия Имя Отчесто в Фамилия И.О. | |
|
| |
|
автор: ?.?. (07.08.2006 в 00:00) |
|
| Re[1]: но он работает в старой копии моей бызы, в в новой нет. FIOFull =Иванов Петр Сергеевич в стандартной форме
FIOC= Иванов П.С.
Public Function FIOC(FIOFull) As String
Static i As Long
If "" & FIOFull = "" Then Exit Function
i = InStr(FIOFull, " ")
If i = 0 Then FIOC = FIOFull: Exit Function
FIOC = Mid(FIOFull, 1, i + 1) + "."
i = InStr(i + 1, FIOFull, " ")
If i = 0 Then Exit Function
FIOC = FIOC + Mid(FIOFull, i + 1, 1) + "."
End Function | |
|
| |
|
автор: ?.?. (07.08.2006 в 00:00) |
|
| Re[1]: как насчет модуля для преобразования Фамилия Имя Отчесто в Фамилия И.О Имеется ввиду, в FIOFull = Фам Имя Отч разделены строго одним пробелом.
Программа преобразования многих пробелов в один:
Удаление многократных символов - замена на однократный
Public Function MinusDoubleSymbol(S As String, Optional C As String = " ") As String
Static i As Long, SO As String
SO = S
Do
i = InStr(SO, C + C)
If i = 0 Then Exit Do
SO = Mid(SO, 1, i) + Mid(SO, i + 2)
Loop
MinusDoubleSymbol = SO
End Function | |
|
| |
|
автор: ???? (07.08.2006 в 00:00) |
|
| Re[1]: как насчет модуля для преобразования Фамилия Имя Отчесто в Фамилия И.О Спасибо | |
|
| |
|
автор: Аноним (14.10.2006 в 20:11) |
|
| [Фамилия] & " " & Left([Имя];1) & IIf(IsNull([Имя]);"";".") & " " & Left([Отчество];1) & IIf(IsNull([Отчество]);"";".") | |
|
| |