Доброго времени суток, Посетитель!
|
|
|
|
|
|
|
|
|
вид форума:
|
|
|
|
| Нужно сделать ряд справочников для базы, т.е. чтобы пользователь вводил не просто ,например,клиента из списка,а при вводе в поле он имел возможность вызвать справочник, где был слева список клиентов, а справа все данные по нему,пользователь мог пробежаться по списку,выбрать нужного клиента и вставить его в данное поле.
Подскажите,пож-ста,как это реализуется в MSA2002,и,если можно,дайте пож-ста ссылки на примеры или где можно поподробнее почитать. | |
|
| |
|
|
|
| не совсем понятно что вызывает затруднение...
реализация самой формы или возврат выбранного в ней значения в вызвавшую форму? | |
|
| |
|
|
|
| Ну в первую очередь возврат значения.Если,например,у меня стоит курсор на поле,в которое я хочу ввести значение из справочника,и хочу вызвать справочник кнопкой,как я возвращаю значение из вызванного справочника в это поле. | |
|
| |
|
|
|
| Как вариант:
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
|
| |
|
| |
|
|
|
| Спасибо большое за исчерпывающий ответ.У меня пока не работает,потому что форма-справочник,из которой надо выбирать-пока простая "выровненная",без списка для начала -я хочу разобраться сначала а потом усложнить(чтобы слева был список,а справа в выровенном формате детали по клиенту-но это позже).Подскажите,пож-ста,как в этом случае изменить код?
И подскажите,пож-ста,что значит этот код:
------
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
----------
Заранее спасибо! | |
|
| |
|
|
|
| Сначала пункт 2:
Форма открывается в модальном режиме, что бы остановить выполнение кода до момента ее закрытия и считать значение глобальной переменной, которое устанавливается на событии закрытия формы. lngOpenArg передаем форме для того, что бы ListBox значений в форме-справочнике имел ранее выбранное значение, что мы и делаем:
Пункт 1.
Присваиваем значение ListBox-у элементов справочника, если это значение было выбрано ранее. В противном случае ListBox-у присваиваем значение первой записи источника данных ListBox-а. | |
|
| |
|
|
|
| Спасибо,буду думать.А как бы можно было переделать код,если не сложно,чтобы выбиралось значение из простой формы-справочника без списков-просто переходим на нужную запись,щелкаем по кнопке и она переходит из справочника в нашу форму-просто чтобы лучше понимать.Заранее спасибо! | |
|
| |
|
|
|
|
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
|
| |
|
| |
|
|
|
| Спасибо большое!Работает,но только в форме,вызывающей справочник поле,в которое должно вводиться значение из справочника,должно быть полем со списком для выполнения запроса,чтобы показывалось название,а не ID,а мне нужно просто поле,но тогда в нем показывается только ID этой выбранной записи.Можно ли сделать так с простым полем,чтобы выводилось значение,а не код (с DLookUp не получается-пишет ошибки-в каком месте его писать?)?Заранее спасибо. | |
|
| |
HiProg.com - Технологии программирования
|