Rambler's Top100
Форум: MS ACCESSVBVBA MS OfficeMS SQL server
Новые сообщения: 0000

Форум: MS ACCESS

Вопросы связанные с MS ACCESS

Обновить визитку
Участники «Online»
Все участники

 
 

Доброго времени суток, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Создание справочников в MSA 2002
 
 автор: Dutch Shultz   (04.10.2008 в 15:01)   личное сообщение
 
 

Нужно сделать ряд справочников для базы, т.е. чтобы пользователь вводил не просто ,например,клиента из списка,а при вводе в поле он имел возможность вызвать справочник, где был слева список клиентов, а справа все данные по нему,пользователь мог пробежаться по списку,выбрать нужного клиента и вставить его в данное поле.
Подскажите,пож-ста,как это реализуется в MSA2002,и,если можно,дайте пож-ста ссылки на примеры или где можно поподробнее почитать.

  Ответить  
 
 автор: osmor   (04.10.2008 в 21:44)   личное сообщение
 
 

не совсем понятно что вызывает затруднение...
реализация самой формы или возврат выбранного в ней значения в вызвавшую форму?

  Ответить  
 
 автор: Dutch Shultz   (05.10.2008 в 02:07)   личное сообщение
 
 

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

  Ответить  
 
 автор: Lukas   (05.10.2008 в 02:35)   личное сообщение
 
 

Как вариант:
1. Объявляем глобальную переменную в общем модуле:

Public glbIDProduct As Long

2. Из вызывающей формы, на клик кнопки справа от ComboBox "IDProduct"

Private Sub btnSelectProduct_Click()
On Error GoTo Err_btnSelectProduct_Click
    Me.IDProduct = funSelectProduct(Me.IDProduct)
    Me.IDProduct.Requery
Exit_btnSelectProduct_Click:
    Exit Sub

Err_btnSelectProduct_Click:
    MsgBox Err.Description, vbExclamation, Me.Caption
    Resume Exit_btnSelectProduct_Click
End Sub

3. Функция в общем модуле:

Public Function funSelectProduct(IDProduct As Variant) As Long
On Error GoTo Err_function

    Dim lngOpenArg As Long
    lngOpenArg = Nz(IDProduct, 0)
    DoCmd.OpenForm "frmListProduct", acNormal, , , , acDialog, lngOpenArg
    funSelectProduct = glbIDProduct
    
Exit_function:
    Exit Function

Err_function:
    MsgBox Err.Description, vbExclamation, "Функция Выбор продукции"
    Resume Exit_function
    
End Function

4. В форме-справочнике, используется в данном случае ListBox "ListProduct" для отображения и кнопка выбора "btnSelect":

Private Sub Form_Load()
    Me.ListProduct = Nz(Me.OpenArgs, Me.ListProduct.Column(0, 0))
End Sub

Private Sub btnSelect_Click()
On Error GoTo Err_btnSelect_Click
    If Nz(Me.ListProduct, 0) = 0 Then
        MsgBox "Продукция не выбрана!", vbExclamation, Me.Caption
        Exit Sub
    End If
    glbIDProduct = Nz(Me.ListProduct, 0)
    DoCmd.Close

Exit_btnSelect_Click:
    Exit Sub

Err_btnSelect_Click:
    MsgBox Err.Description, vbExclamation, Me.Caption
    Resume Exit_btnSelect_Click
    
End Sub

  Ответить  
 
 автор: Dutch Shultz   (06.10.2008 в 14:16)   личное сообщение
 
 

Спасибо большое за исчерпывающий ответ.У меня пока не работает,потому что форма-справочник,из которой надо выбирать-пока простая "выровненная",без списка для начала -я хочу разобраться сначала а потом усложнить(чтобы слева был список,а справа в выровенном формате детали по клиенту-но это позже).Подскажите,пож-ста,как в этом случае изменить код?
И подскажите,пож-ста,что значит этот код:
------
Private Sub Form_Load()
Me.ListProduct = Nz(Me.OpenArgs, Me.ListProduct.Column(0, 0))
End Sub
-------

И почему форма открывается с таким параметром:
----------
Dim lngOpenArg As Long
lngOpenArg = Nz(IDProduct, 0)
DoCmd.OpenForm "frmListProduct", acNormal, , , , acDialog, lngOpenArg
----------
Заранее спасибо!

  Ответить  
 
 автор: Lukas   (06.10.2008 в 14:35)   личное сообщение
 
 

Сначала пункт 2:
Форма открывается в модальном режиме, что бы остановить выполнение кода до момента ее закрытия и считать значение глобальной переменной, которое устанавливается на событии закрытия формы. lngOpenArg передаем форме для того, что бы ListBox значений в форме-справочнике имел ранее выбранное значение, что мы и делаем:
Пункт 1.
Присваиваем значение ListBox-у элементов справочника, если это значение было выбрано ранее. В противном случае ListBox-у присваиваем значение первой записи источника данных ListBox-а.

  Ответить  
 
 автор: Dutch Shultz   (06.10.2008 в 15:01)   личное сообщение
 
 

Спасибо,буду думать.А как бы можно было переделать код,если не сложно,чтобы выбиралось значение из простой формы-справочника без списков-просто переходим на нужную запись,щелкаем по кнопке и она переходит из справочника в нашу форму-просто чтобы лучше понимать.Заранее спасибо!

  Ответить  
 
 автор: Lukas   (06.10.2008 в 15:04)   личное сообщение
 
 


Private Sub btnSelect_Click()
On Error GoTo Err_btnSelect_Click
    If Nz([IDProduct], 0) = 0 Then
        MsgBox "Продукция не выбрана!", vbExclamation, Me.Caption
        Exit Sub
    End If
    glbIDProduct = Nz([IDProduct], 0)
    DoCmd.Close

Exit_btnSelect_Click:
    Exit Sub

Err_btnSelect_Click:
    MsgBox Err.Description, vbExclamation, Me.Caption
    Resume Exit_btnSelect_Click
    
End Sub 


А это либо удалить, либо организовать поиск записи по переданному аргументу

Private Sub Form_Load()
    Me.ListProduct = Nz(Me.OpenArgs, Me.ListProduct.Column(0, 0))
End Sub 

  Ответить  
 
 автор: Dutch Shultz   (11.10.2008 в 13:31)   личное сообщение
 
 

Спасибо большое!Работает,но только в форме,вызывающей справочник поле,в которое должно вводиться значение из справочника,должно быть полем со списком для выполнения запроса,чтобы показывалось название,а не ID,а мне нужно просто поле,но тогда в нем показывается только ID этой выбранной записи.Можно ли сделать так с простым полем,чтобы выводилось значение,а не код (с DLookUp не получается-пишет ошибки-в каком месте его писать?)?Заранее спасибо.

  Ответить  
HiProg.com - Технологии программирования
Rambler's Top100 TopList