ограничение и обновление

svetolux
Дата: 05.03.2008 19:01:35
Мучаюсь с курсовой... На вкладке "Список книг" (форма формуляр читателя) отображается список книг, который в данный момент у читателя. На "вкладке33" можнл довавить книгу. Как сделать ограничение, чтобы если на вкладке "Список книг" 5 книг, то довавить на вкладке33 было нельзя. (т.е. ограничение максимум 5 книг на руках читателя).
И еще вопросик: После добовления книги на вкладке33, надо чтобы Вкладка "список книг" обновлялать автоматически.

Файл прикреплен
irgendjemand
Дата: 05.03.2008 19:50:33
Я бы начал с того, что определил бы публичную функцию, которая будет говорить, можно или нет добавлять.

Также объявил бы константу= максимально допустимое количество книг на руках
А еще НЕПРЕМЕННО нужно добавить Option Explicit - опция, не позволяющая использовать необъявленные явно переменные.
например:
Option Compare Database
Option Explicit
Public Const MAXBOOKS As Long = 5

Public Function CanAdd(Код_читателя As Long) As Boolean
    Dim sSelect As String, lngQty As Long
    sSelect = "Select Count(*) as Количество_на_руках FROM Выдачи WHERE Код_читателя=" & Код_читателя
    lngQty = CurrentProject.Connection.Execute(sSelect).Fields(0)
    
    'Debug.Print CurrentProject.Connection.Execute(sSelect).GetString
    CanAdd = lngQty < MAXBOOKS
End Function


Эту функцию уже можно использовать в любой форме для отслеживания допустимости добавления книг.
Но я сам чайник, поэтому мой совет может оказаться вредным и/или неточным.
irgendjemand
Дата: 05.03.2008 20:27:06
А на событие Before_insert подформы Выдачи проверять, можно ли этому читателю брать еще книг, типа
 
Private Sub Form_BeforeInsert(Cancel As Integer)

    Cancel = CInt(Not CanAdd(Код_читателя))
    If Cancel <> 0 Then MsgBox "Слишком много книг. Можно брать только " & MAXBOOKS
End Sub
svetolux
Дата: 05.03.2008 20:49:26
irgendjemand, БОЛЬШОЕ СПАСИБО, все работает. только еще вопросик. Добавляю книгу на вкладке33, и нужно чтобы на вкладке "Список книг" данные обновлялись каждый раз после добавления книги, не закрывая форму формуляр.
Karfaqen
Дата: 05.03.2008 21:12:50
автор
нужно чтобы на вкладке "Список книг" данные обновлялись каждый раз после добавления книги, не закрывая форму формуляр.
У той же подформы Выдачи кроме BeforeInsert есть и AfterInsert, можно там:
Private Sub Form_AfterInsert()
    Me.Parent("ИмяСубформыНаВкладкеСписокКниг").Form.Requery
End Sub
svetolux
Дата: 05.03.2008 21:13:54
спасибо
svetolux
Дата: 05.03.2008 21:17:29
irgendjemand
Я бы начал с того, что определил бы публичную функцию, которая будет говорить, можно или нет добавлять.

Также объявил бы константу= максимально допустимое количество книг на руках
А еще НЕПРЕМЕННО нужно добавить Option Explicit - опция, не позволяющая использовать необъявленные явно переменные.
например:
Option Compare Database
Option Explicit
Public Const MAXBOOKS As Long = 5

Public Function CanAdd(Код_читателя As Long) As Boolean
    Dim sSelect As String, lngQty As Long
    sSelect = "Select Count(*) as Количество_на_руках FROM Выдачи WHERE Код_читателя=" & Код_читателя
    lngQty = CurrentProject.Connection.Execute(sSelect).Fields(0)
    
    'Debug.Print CurrentProject.Connection.Execute(sSelect).GetString
    CanAdd = lngQty < MAXBOOKS
End Function


Эту функцию уже можно использовать в любой форме для отслеживания допустимости добавления книг.
Но я сам чайник, поэтому мой совет может оказаться вредным и/или неточным.


А можно сюда добавить еще одно условие: Книга считается взятой если Роспись=Истина, т.е. как в запросе указать условие чтобы считало количество книг, в таблице выдачи для каждого читателя, только те где Роспись=Истина.
WHERE Код_читателя=" Код_читателя Роспись =True (как правильно написать?)
Karfaqen
Дата: 05.03.2008 21:33:16
добавить еще одно условие: Книга считается взятой если Роспись=Истина
Например, так:
sSelect = "Select Count(*) as Количество_на_руках FROM Выдачи WHERE Роспись AND Код_читателя=" & Код_читателя
svetolux
Дата: 05.03.2008 21:48:25
Karfaqen
добавить еще одно условие: Книга считается взятой если Роспись=Истина
Например, так:
sSelect = "Select Count(*) as Количество_на_руках FROM Выдачи WHERE Роспись AND Код_читателя=" & Код_читателя


Спасибо, все работает :)

Осталось только чтобы подчиненная таблица (в качестве источника данных - запрос из нескольких таблиц) обновлялась сразу после добавления записи в таблицу добавить.
Karfaqen
Дата: 05.03.2008 22:07:26
svetolux
Осталось только чтобы подчиненная таблица (в качестве источника данных - запрос из нескольких таблиц) обновлялась сразу после добавления записи в таблицу добавить.
Полагаю, что речь все же о форме, да? Для формы используйте ее метод Requery.

Если вы спрашиваете, потому что вы именно это и делаете, однако по каким-то причинам выполнение этого метода не приносит желаемого результата (на форуме есть топики, где разбираются подобные жалобы), то в качестве верного средства обновления формы можно посоветовать "пере-подстановку" ее источника:
frm.RecordSource = frm.RecordSource
где frm - ваша форма (As Form), которую надо обновить.