Передача запроса параметра [Access 2016]

Чтобы сделать длинную историю короче:

Я новичок в Access, делаю быстрое и грязное преобразование массивной электронной таблицы Excel в базу данных Access. Часть требований состоит в том, чтобы имитировать некоторые функции Excel, в частности извлечение данных из определенной таблицы и выполнение некоторых основных вычислений с ними (суммы, средние значения и т. д.).

Я написал цепочку запросов для извлечения данных, их подсчета/суммирования и т. д. и тестировал их с помощью вводимого вручную параметра (т. е. такого, при котором появляется окно ввода и предлагается ввести отклик). Теперь, когда я готов поместить эти запросы в (под)форму, я понятия не имею, как автоматически передать этот параметр из поля формы в подчиненную форму запроса.

Каждый написанный мной запрос использует введенный вручную параметр с именем «MATCHNAME», который содержит имя человека. При ручном тестировании, если я ввожу этот параметр в один запрос, все запросы, которые вызывает it, также получают это значение. Итак, я думаю, мне просто нужно выяснить, как сказать верхнему запросу, что такое MATCHNAME на самом деле, и это позаботится об этом.

Проблема в том, что я не знаю, как это сделать в Access. Если бы это был любой другой язык программирования, я бы сделал что-то вроде «queryXYZ(MATCHNAME);», но я не думаю, что смогу сделать это в Access. Кроме того, поскольку значения, возвращаемые queryXYZ, вычисляются, я не знаю, как добавить дополнительное поле MATCHNAME, как убедиться, что оно считывается запросами, или как убедиться, что оно передается по цепочке. Я даже пытался создать параметр в режиме конструктора, а затем настроить основные поля ссылок, но параметр не отображается в этом окне.

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

И, прежде чем мы перейдем к этому, я чувствую, что об отношениях не может быть и речи, поскольку сами данные генерируются автоматически и имеют достаточно грубую форму, поэтому я не могу гарантировать, что любой данный ключ полностью уникален, и достаточно большой (20k+), что, кроме написания волшебного сценария, я не могу назначить цифровую клавишу. Однако я мало что знаю об отношениях в Access, поэтому пожалуйста докажите, что я ошибаюсь.

(Все это имеет смысл?)

Есть ли у вас какие-либо предложения для меня - как заставить подчиненную форму читать поле в основной форме для выполнения своих запросов? В качестве альтернативы, есть ли более простой способ сделать это, т. е. разместить вызовы SQL внутри формы?

Большое спасибо за вашу помощь...


person user600811    schedule 01.08.2016    source источник
comment
Эм. Замените свой параметр во всех запросах на Forms!MyForm![MatchName] ?   -  person Andre    schedule 02.08.2016


Ответы (1)


Вы можете использовать SQL в качестве источника записи подчиненной формы на вкладке свойств и использовать событие afterupdate вашего поля matchname для изменения yourform.recordsource = "Select * from table where filteredfieldname = & me.matchname & ";" . Вы также можете использовать sql в качестве источника управления полями формы. Чтобы передать критерии для фильтрации подформы, используя всю таблицу в качестве источника записи, добавьте процедуру обработки события в ваше поле после события обновления, как это

`In the declarataions at the top
Global mtchnmfltr as string 

Private Sub MATCHNAME_AfterUpdate() 
'use the same procedure for Private Sub yourmainform_Current() 
mtchnmfltr  = "[yourfilterfield] = " & Chr(34) & me.matchname & Chr(34)  
'if matchname is not text then just = "[yourfilterfield] = " & me.matchname  
with me.subformname.form  
.filter = mtchnmfltr  
.filteron = true  
end with
'Build your sql as a string for your sum avg fields etc. using mtchnmfltr in the where clause  
 me.yoursumfield.controlsource = "Select...where " & mtchnmfltr & ";"
 'etc.
 end sub  

Или вы можете бросить Matchname в источник записи sql подчиненной формы и добавить поля функций в подчиненную форму на том же самом в текущих и после событиях обновления

if me.newrecord = true then    
me.dirty = false  
end if  
me.subform.form.recordsource = "Select Table.Matchname, sum(yourfield) as sumalias, _  
(etc.) from yourtable where table.matchname = " & chr(34) & me.matchname & _  
chr(34) & Group By table.matchname" 

Если вы храните свои суммы и т. д. в таблице, вам нужно сделать это немного по-другому, поскольку ваш источник управления привязан к полям.

dim strsqlsumfld as string 
dim rs as dao.recordset 
strsqlsumfld= "Select SUM.....AS sumfldalias where " & mtchnmfltr & ";"  
set rs = currentdb.openrecordset(strsqlsumfld) 
me.yoursumfield = rs("sumfldalias")
rs.close
person John W Fowler    schedule 01.08.2016