-Поиск по дневнику

Поиск сообщений в rss_sql_ru_access_programming

 -Подписка по e-mail

 

 -Постоянные читатели

 -Статистика

Статистика LiveInternet.ru: показано количество хитов и посетителей
Создан: 16.03.2006
Записей:
Комментариев:
Написано: 4


Ошибки на подчиненных формах

Суббота, 26 Сентября 2015 г. 19:41 + в цитатник
Добрый день.
Есть формы

Форма 1 каркас. На ней 4 вкладки
Вкладка1:
ПодФорма2 РеестрПациентов (таблица пациенты)
ПодФорма3 Реестр обследований (таблица Обследования) выводятся итоги обследования кратко данного пациента по каренту РеестраПациентов

Вкладка2 - видима если у пациента есть обследования:
ПодФорма 4 краткая инфа о пациенте rst на (таблица пациенты)
ПодФорма 5 Анамнез (таблица Обследования)
ПодФорма 6 Обследование (таблица Обследования) - выводится данное обследование данного пациента по каренту РеестраОбследований

Вкладка3 - видима если у пациента есть обследования:
Дубль ПодФормы 4
Дубль ПодФормы 5
Под6 Диагноз-Назначения (таблица Обследования) - выводятся Диагноз-Назначения в данном обследовании у данного пациента по каренту РеестраОбследований

Вкладка4 - видима если в данном обследовании был выписан рецепт:
Дубль ПодФормы 4
Дубль ПодФормы 5
ПодФорма 7 Рецепт на очки (таблица Очки) - выводятся рецепты в данном обследовании, по карренту РеестраОбследований.
---

На трех вкладках выводятся формы 4 и 5 (сведения о пациенте и анамнез), нужно чтобы они всегда были видны.
Связка мастерслэйвами по текстбоксам на главной.

Чтобы формировать видимость вкладок и подформ, пишу в главном модуле функцию и вызываю ее при открытии формы и на карентах РеестраПациентов и РеестраОбследований.

Set frm = Forms![01Main]![01ReestrObsl].Form
Set dbs = CurrentDb
'Если нет Pacienta - Pacienta, вкладки и кнопки удаления не показывать

II = Forms![01Main]![LikDoc].Value
strSQL = "SELECT ID_Doc FROM [01Пациент] WHERE ID_Doc = " & II & ";"
Set rst = dbs.OpenRecordset(strSQL)
If rst.RecordCount = 0 Then  'Пациентов нет
    Forms![01Main]![Поиск].SetFocus
    Forms![01Main].Form![Obsled].Visible = False
    Forms![01Main].Form![Diagnoz].Visible = False
    Forms![01Main].Form![Recept].Visible = False
    Forms![01Main].Form![DelObsled].Visible = False
    Forms![01Main].Form![DelPacienta].Visible = False
    Forms![01Main].Form![01ReestrObsl].Visible = False

Else  'Пациенты есть
    Forms![01Main].Form![DelPacienta].Visible = True
    II = Forms![01Main]![LinkPacient].Value
    strSQL = "SELECT ID_Name FROM [01Obsled] WHERE ID_Name = " & II & ";"
    Set rst = dbs.OpenRecordset(strSQL)
    If rst.RecordCount = 0 Then  'Обследований нет
        Forms![01Main]![01Реестр].SetFocus
        Forms![01Main].Form![Obsled].Visible = False
        Forms![01Main].Form![Diagnoz].Visible = False
        Forms![01Main].Form![Recept].Visible = False
        Forms![01Main].Form![DelObsled].Visible = False
        Forms![01Main].Form![01ReestrObsl].Visible = False
    Else 'Обследования есть
        Forms![01Main].Form![Obsled].Visible = True
        Forms![01Main].Form![Diagnoz].Visible = True
        Forms![01Main].Form![Recept].Visible = False
        Forms![01Main].Form![DelObsled].Visible = True
        Forms![01Main].Form![01ReestrObsl].Visible = True
      
        II = Forms![01Main]![СвязникObsled].Value
        strSQL = "SELECT ID_EyeTest FROM [01Очки] WHERE ID_EyeTest = " & II & ";"
        Set rst = dbs.OpenRecordset(strSQL)
        If rst.RecordCount = 0 Then  'Receptа нет
            Forms![01Main].Form![Recept].Visible = False
        Else 'Receptы есть
            Forms![01Main].Form![Recept].Visible = True
        End If
    End If
End If

rst.Close
Set dbs = Nothing


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

Подскажите как это можно поправить?

зы пробовал упростить код по совету Панурга
frm.Visible = Not (frm.Recordset.EOF And frm.Recordset.BOF)
не получается, EOF BEF ведут себя непредсказуемо.

Сорри за длинный текст

http://www.sql.ru/forum/1177226/oshibki-na-podchinennyh-formah


 

Добавить комментарий:
Текст комментария: смайлики

Проверка орфографии: (найти ошибки)

Прикрепить картинку:

 Переводить URL в ссылку
 Подписаться на комментарии
 Подписать картинку