Помогите с процедурой

softmaster
Дата: 16.01.2012 18:35:16
Вешаю на закрытие формы процедуру , проверки , как заполнена форма

Private Sub btClose_Click()
If Me!БракКг <> "0" Then
  If Me!ВыпускШТ = "0" Then
   Me!ВыпускШТ = fBrak()
     If Me!НомерПартии <> "" Then
    DoCmd.DoMenuItem acFormBar, acRecordsMenu, acSaveRecord, , acMenuVer70
    DoCmd.Close acForm, Me.Name
 Else
 Call MsgBox("Вы не указали номер партии", vbCritical, "Предупреждение")

  End If
 End If
End If
End Sub


смысл проверки такой

Если вбиты данные в поле БракКг , но не указан ВыпускШТ т.е = 0 , тогда ВыпускШТ= fBrak()
Если в поле НомерПартии пусто, то сообщение "Вы не указали номер партии"

не могу увязать , то одно работает то другое
softmaster
Дата: 16.01.2012 18:40:29
вот так работает ,

Private Sub btClose_Click()
If Me!БракКг <> "0" Then
  If Me!ВыпускШТ = "0" Then
   Me!ВыпускШТ = fBrak()
   Else
     If Me!НомерПартии <> "" Then
    DoCmd.DoMenuItem acFormBar, acRecordsMenu, acSaveRecord, , acMenuVer70
    DoCmd.Close acForm, Me.Name
 Else
 Call MsgBox("Вы не указали номер партии", vbCritical, "Предупреждение")

  End If
 End If
End If
End Sub

НО
Если ВыпускШТ = "0" тогда приходиться два раза кликать , кнопку (с процедурой) для закрытия
MrMuscul
Дата: 16.01.2012 20:15:23
Private Sub btClose_Click()
If Me!БракКг <> "0" Then
  If Me!ВыпускШТ = "0" Then Me!ВыпускШТ = fBrak()
   
  If Me!НомерПартии <> "" Then
  DoCmd.DoMenuItem acFormBar, acRecordsMenu, acSaveRecord, , acMenuVer70
  DoCmd.Close acForm, Me.Name
 Else
 Call MsgBox("Вы не указали номер партии", vbCritical, "Предупреждение")

 End If
End If
End Sub


Зачем эта проверка то?)
Анатолий ( Киев )
Дата: 16.01.2012 21:04:55
Если поле НомерПартии не допускает пустых строк, то в пустом поле будет Null и выражение If Me!НомерПартии <> "" Then работать не будет.

Какой тип полей БракКг и ВыпускШТ? Если числовые , то почему сравнение со строкой "0", а если текстовые, то откуда там "0"?
Эти поля могут быть пустыми?

fBrak() - это функция?

ЗЫ. Конструкцию (из прошлого века) DoCmd.DoMenuItem acFormBar, acRecordsMenu, acSaveRecord, , acMenuVer70
можно с успехом запенить на Me.Dirty = False или Me.Refresh.
softmaster
Дата: 16.01.2012 21:58:48
Анатолий ( Киев )
Если поле НомерПартии не допускает пустых строк, то в пустом поле будет Null и выражение If Me!НомерПартии <> "" Then работать не будет.

Согласен , но работает

Какой тип полей БракКг и ВыпускШТ? Если числовые , то почему сравнение со строкой "0", а если текстовые, то откуда там "0"?
Эти поля могут быть пустыми?

тип полей БракКг и ВыпускШТ - числовой по умолчанию 0
Эти поля могут быть пустыми? - нет , могут 0 и больше

fBrak() - это функция?

да возвращает шт. в выпуск

ЗЫ. Конструкцию (из прошлого века) DoCmd.DoMenuItem acFormBar, acRecordsMenu, acSaveRecord, , acMenuVer70
можно с успехом запенить на Me.Dirty = False или Me.Refresh.


Спасибо учту
hgfdsa
Дата: 16.01.2012 22:30:33
Анатолий ( Киев )
Если поле НомерПартии не допускает пустых строк, то в пустом поле будет Null и выражение If Me!НомерПартии <> "" Then работать не будет.

Будет, т.к. Null <> "" дает Null, который не является True, и выполнение пойдет по ветви Else.