|
автор: merseed (30.11.-1 в 00:00) |
|
| Есть форма, на ней размещены 2 комбобокса и 1 подчиненная форма.
Нужно при выборе из комбобоксов получать соответствующую информацию в подчиненной форме. Сейчас получаю инфу при выборе соответствующей комбинации значений комбобоксов из одного кортежа. | |
|
| |
|
автор: ?????? (01.08.2006 в 00:00) |
|
| Re: Формы: как связать 2 комбобокса с одной подчиненной формой? на afterupdate первого комбобокса:
forms![главная форма]![имя контрола подчиненной формы].form.recordsource = "SELECT * FROM Таблица WHERE [поле, связанное с первым комбобоксом] = " & me![комбобокс1]
и аналогично на второй | |
|
| |
|
автор: merseed (01.08.2006 в 00:00) |
|
| Re: Формы: как связать 2 комбобокса с одной подчиненной формой? я тут попытался что то написать
Option Compare Database
Option Explicit
Sub cboCompanyName_AfterUpdate()
Dim strCNRecord As String
strCNRecord = "SELECT * FROM qryContact " _
& " WHERE CompanyName = " _
& Me!cboCompanyName & ""
Me.RecordSource = strCNRecord
End Sub
Sub cboLastName_AfterUpdate()
Dim strLNRecord As String
strLNRecord = "SELECT * FROM qryContact " _
& " WHERE LastName = " _
& Me!cboLastName & ""
Me.RecordSource = strLNRecord
End Sub
ошибку не выдает, но при этом работает только первый комбобокс (cboCompanyName), при выборе значения из второго комбобокса (cboLastName) подчиненная форма обновляется (заметно как она "моргнула"), но не обновляется. То есть связь с первым комбобоксом не разрывается. | |
|
| |
|
автор: merseed (01.08.2006 в 00:00) |
|
| Re[1]: Формы: как связать 2 комбобокса с одной подчиненной формой? ошибочка вышла, при подстановке значений
LinkMasterFields="cboCompanyName, cboLastName"
LinkChildFields="CompanyName, LastName"
подчиненная форма остается пустой. Если оставить связь с одним комбобоксом, то связка работает (что соответственно не решает поставленную задачу) | |
|
| |
|
автор: ?????? (01.08.2006 в 00:00) |
|
| Re[1]: Формы: как связать 2 комбобокса с одной подчиненной формой? Меняйте и эти значения.
В первом случае:
LinkMasterFields="cboCompanyName"
LinkChildFields="CompanyName"
или вообще не пользуйтесь ими, если этими комбобоксами однозначно будут определены данные в подчиненной форме | |
|
| |
|
автор: merseed (01.08.2006 в 00:00) |
|
| Re: Формы: как связать 2 комбобокса с одной подчиненной формой? Попытаюсь прояснить задачу. Есть 2 таблицы tblContractor и tblContact. В первой таблице есть имена компаний (поле CompanyName). Во второй таблице хранятся данные о контактных лицах компаний (отношение 1-много, так как в одной компании может быть несколько отделов или подразделений). Необходимо искать данные о контактных лицах контрагентов, если есть 2 источника информации: имя компании (CompanyName) и фамилия контактного лица (LastName). Соответственно полученная на основе выбора из comboboxов информация отображается в подчиненной форме. Спасибо за внимание.
выкладываю черновик базы
http://zalil.ru/upload/22975884 | |
|
| |
|
автор: ?????? (01.08.2006 в 00:00) |
|
| Re[1]: Формы: как связать 2 комбобокса с одной подчиненной формой? База у меня не качается почему-то.
Если подчиненная таблица зависит от двух полей, то, наверное, имеет смысл описать LinkMasterField и LinkChildFields так, как Вы описали, а на события AfterUpdate обоих комбобосков повесить код:
forms![главная форма]![имя контрола подчиненной формы].form.recordsource=forms![главная форма]![имя контрола подчиненной формы].form.recordsource
Если это не поможет, то можно попытаться так:
LinkMasterField и LinkChildFields очистить
на afterupdate комбобоксов:
forms![главная форма]![имя контрола подчиненной формы].form.recordsource="sELECT * FROM таблица WHERE [поле,связанное с 1 комбобоксом] = " & me![комбобокс1] & " AND [поле,связанное с 2 комбобоксом] = " & me![комбобокс2]
Только не надо забывать, что, если комбобоксы содержат текстовую информацию, то данные в запросе надо заключать в кавычки | |
|
| |
|
автор: merseed (01.08.2006 в 00:00) |
|
| Re: Формы: как связать 2 комбобокса с одной подчиненной формой? попытка нумер 2:
http://rapidshare.de/files/27790362/company.mdb.html | |
|
| |
|
автор: ?????? (01.08.2006 в 00:00) |
|
| Re[1]: Формы: как связать 2 комбобокса с одной подчиненной формой? поправленная процедурка. Заметьте, что я переименовал контрол подчиненной формы. Он теперь называется "fsubContact1". Чтобы access не путался на что именно ссылаюсь.
Public Sub FilterfsubContact()
If IsNull(Me![cboCompanyName]) = True And IsNull(Me![cboLastName]) = True Then
Me.fsubContact1.Form.RecordSource = "SELECT * FROM qryContact;"
Exit Sub
End If
If IsNull(Me![cboCompanyName]) = True Or IsNull(Me![cboLastName]) = True Then
MsgBox "Не заполнены необходимые данные"
Exit Sub
End If
Me.fsubContact1.Form.RecordSource = "SELECT * FROM qryContact WHERE [CompanyName] = " & Me![cboCompanyName] & " AND [LastName] =" & Me![cboLastName] & ";"
End Sub | |
|
| |
|
автор: merseed (02.08.2006 в 00:00) |
|
| Re[1]: Формы: как связать 2 комбобокса с одной подчиненной формой? Это все не то, то есть если совсем влоб действовать, то нужно делать 2 формы с поиском по имени компании или же по фамилии контактных лиц компании. Я хотел бы объединить эти 2 формы (или более, как пойдет процесс) в 1. Таким образом я экономлю достаточно много места на самих формах (подчиненная форма занимает немало места) и время на поиск нужной информации.
В приведенном примере функции фильтра идет проверка условия:
If IsNull(Me![cboCompanyName]) = True And IsNull(Me![cboLastName]) = True Then
Me.fsubContact1.Form.RecordSource = "SELECT * FROM qryContact;"
что мне совсем не нужно, так как следует связывать каждый из комбобоксов с подчиненной формой и никак не друг с другом (иначе как мы достигнем требуемого результата).
Сухой остаток. Представте себе, что у вас есть большая база сотрудников и вам нужно найти информацию по обрывочным сведениям (имя компании, отдел, телефонный номер, имя+отчество, и так далее). Чтобы вам не лазить по множеству форм (которые делают поиск только по одному атрибуту) вы решили сделать "сложную" форму, которая бы явилась квинтэссенцией всех других форм, иными словами объединила бы все данные с других форм.
Надеюсь, что прояснил ситуацию, а не запутал еще сильнее | |
|
| |
|
автор: ?????? (02.08.2006 в 00:00) |
|
| Re[1]: Формы: как связать 2 комбобокса с одной подчиненной формой? "If IsNull(Me![cboCompanyName]) = True And IsNull(Me![cboLastName]) = True" эта проверка сделана для того, чтобы выдавать хоть что-то в подчинённой форме. С таким же успехом можно было обнулить RecordSource при данном условии. Что, по-Вашему, должно выводиться в подчиненной форме, когда данные на условия не заполнены? Это во-первых.
Во-вторых, осуществление поиска "по обрывочным сведениям" - это большая процедура. Алгоритм я вижу примерно такой. При заполнении одного из комбобоксов, процедура проверяет наложено ли уже условие по данным этого комбобокса. Если да, то удаляет старое условие и добавляет новое. Если нет, то просто добавляет новое. Если комбобокс очищается, то удалет условие, наложенное этим комбобоксом. В приницпе ничего сложного, но кода получается порядочно, так как проверок много. У меня в какой-то базе есть что-то похожее, если интересует, то я поищу | |
|
| |
|
автор: merseed (02.08.2006 в 00:00) |
|
| Re[1]: Формы: как связать 2 комбобокса с одной подчиненной формой? Было бы неплохо. Если не трудно пришлите пожалуйста пример на merseed@branan.ru | |
|
| |
|
автор: ?????? (02.08.2006 в 00:00) |
|
| Re[1]: Формы: как связать 2 комбобокса с одной подчиненной формой? отправил | |
|
| |
|
автор: ?????? (02.08.2006 в 00:00) |
|
| Re[2]: Формы: как связать 2 комбобокса с одной подчиненной формой? Говорит, что нет такого ящика | |
|
| |
|
автор: merseed (03.08.2006 в 00:00) |
|
| Re[1]: Формы: как связать 2 комбобокса с одной подчиненной формой? Извините, все перепутал :( можно еще разок на merseed@gmail.com | |
|
| |
|
автор: ?????? (04.08.2006 в 00:00) |
|
| Re[1]: Формы: как связать 2 комбобокса с одной подчиненной формой? ушло | |
|
| |