我在MS Access 2016中有一个数据表表单,我通过VBA代码设置动态源代码如下
->add('citta', EntityType::class,array(
'class'=>Comuni::class,
'query_builder'=>function(ComuniRepository $comuniRepository){
return $comuniRepository->createQueryBuilder('cr')
//if you want a specific query
//then you should use dql functions like the lines below
->where('cr.selezionaCAP = :someParameter')
->setParameter('someParameter', $someParameter)
->orderBy('cr.selezionaCAP', 'ASC');
},
'attr'=>array(
'placeholder'=>'Inserisci qui la città...'
),
'label'=>'Città:'
))
如您所见,数据是通过参数化查询Dim dbs As DAO.Database
Dim qdf As DAO.QueryDef
Set dbs = CurrentDb
Set qdf = CurrentDb.QueryDefs("qry_GetSumEmployeesHoursByPeriodAndProject")
qdf.Parameters("projectID") = IIf(ProjectID = -1, Null, ProjectID)
qdf.Parameters("periodID") = IIf(PeriodID = -1, Null, PeriodID)
Set Me.Recorset = qdf.OpenRecordset()
qdf.Close
dbs.Close
Set qdf = Nothing
Set dbs = Nothing
加载的,它需要2个参数:
qry_GetSumEmployeesHoursByPeriodAndProject
最初,当表单加载时,一切都很好,但每当我点击列标题进行排序或过滤时,表单都会从同一个查询PARAMETERS periodID Long = NULL, projectID Long = NULL;
SELECT ...
加载,但不会应用参数{ {1}}和qry_GetSumEmployeesHoursByPeriodAndProject
,因此它的值为periodID
。
如何防止这种情况发生?也许要抓住表格' "分类"甚至以某种方式将其应用于查询,但我无法找到该事件何时以及如何被触发。
感谢任何帮助
答案 0 :(得分:0)
您可以将参数放在表单上,而不是在代码中指定它们。
任何恰好打开的表单都可以,因为您可以将它们设置为隐藏文本框,这样您就可以确定参数值不仅可用于查询,还可用于数据库的任何其他部分同样。
您可以参考其他地方的“参数控制”:
Forms!YourFormName.YourTextboxName