Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Access
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.12.2010, 10:18   #1
myprog
Пользователь
 
Регистрация: 11.09.2010
Сообщений: 33
По умолчанию Ошибка при работе с формой.

Доброго времени суток!!!!

Обращаюсь к Вам за помощью.

Ситуация:
Таблица- МАСТЕРА
Поля:
- ТабНомер - текст
- ФИОПолное - текст
- ФИОСокр - текст
- Должность - текст

Форма построена на базе этой таблицы с помощью мастера тип ЛЕНТОЧНЫЙ

Для получения ФИОСокр создана процедура:

Код:
Public Function Инициалы(ФИО As String) As String

Dim Фамилия As String
Dim Имя As String
Dim Отчество As String
Dim ПозицияПробела As String

    ФИО = УбратьПробелы(ФИО)
    If Len(ФИО) <= 0 Then
        MsgBox ("Критическая ошибка!!!" & Chr(13) & "Не указаны данные, или строка состоит из пробелов!!!")
        Exit Function
    End If
    ПозицияПробела = InStr(ФИО, " ")
    If ПозицияПробела = 0 Then
        MsgBox ("Для данного работника введена только фамилия." & Chr(13) & "Не указаны: ИМЯ, ОТЧЕСТВО.")
        Фамилия = Trim(ФИО)
    Else
        Фамилия = Trim(Left(ФИО, ПозицияПробела))
        ФИО = Trim(Replace(ФИО, Фамилия, ""))
        ПозицияПробела = InStr(ФИО, " ")
        If ПозицияПробела = 0 Then
            MsgBox ("Для данного работника введена только фамилия и имя." & Chr(13) & "Не указаны: ОТЧЕСТВО.")
            Имя = Trim(ФИО)
            Имя = Left(Имя, 1) & "."
        Else
            Имя = Trim(Left(ФИО, ПозицияПробела))
            ФИО = Trim(Replace(ФИО, Имя, ""))
            Имя = Left(Имя, 1) & "."
            Отчество = Trim(ФИО)
            Отчество = Left(Отчество, 1) & "."
        End If
    End If
    
    Инициалы = Trim(Фамилия & " " & Имя & Отчество)
    
End Function
А для элемента формы ФИОПолное назначена обработка выхода:

Код:
Private Sub ФИОПолностью_Exit(Cancel As Integer)

Dim rst As DAO.Recordset
Dim strSql As String
    
    If IsNull(Form_Мастера.ФИОПолное.Value) Then Exit Sub
    
    ФИО = Инициалы(Form_Мастера.ФИОПолное.Value)
    
    strSql = "UPDATE [МАСТЕРА] SET [МАСТЕРА].[ФИОИнициалы]=""" & ФИО & """ WHERE ((([МАСТЕРА].[ТабелныйНомер])=""" & Form_Мастера.ТабелныйНомер.Value & """));"
    CurrentDb.Execute strSql
    Form_Мастера.Requery

End Sub
Так вот, при вводе ФИО и переходе к другим полям появляется сообщение:


Что не так? Кто знает как решить данную проблему?
(на сайте с которого взята картинка ответа нет, или я не увидел)

Всем СПАСИБО!!!
myprog вне форума Ответить с цитированием
Старый 17.12.2010, 21:46   #2
Teslenko_EA
Участник клуба
 
Регистрация: 10.08.2009
Сообщений: 1,796
По умолчанию

Здравствуйте myprog.
Описанная ситуация возникает при попытке одновременного редактирования записи.
"..Что не так?.." - простое объяснение может быть таким: виновна блокировка.
источник данных подключенный к форме, получает информацию о том что текущая запись формы изменена (возможно не руками а кодом) - перешла в состояние редактирования (блокирована) и в тоже время DAO выполняет запрос пытающийся внести изменения в текущую запись. MS Access в замешательстве у какого изменения выше приоритет - вот он и спрашивает как поступить.

"..как решить данную проблему?.." - используйте для получения информации из источника данных формы не обращение к объектам формы, а чтение полей рекордсета, без блокировки текущей записи, можно с отменой "случайных" изменений - Me.Undo. Это позволит оставить запись не блокированной для беспроблемного выполнения обновления запросом.
Евгений.
Teslenko_EA вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибка при работе C++ Builder 6.0 green-tree Помощь студентам 3 19.07.2010 09:59
Ошибка при работе с процедурой Hant111 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 1 21.03.2010 20:10
ошибка при работе с указателем Vladss Общие вопросы C/C++ 22 29.07.2009 03:58
Ошибка при работе с БД Access Evgen1976 БД в Delphi 8 16.06.2009 21:29
Ошибка при работе с БД malevich БД в Delphi 8 25.11.2007 15:10