如何更改参数

时间:2018-05-07 15:08:12

标签: ms-access ms-access-2013

我有一个数据库,其中有一个查询,其中会弹出一个参数框。参数是[Forms]![frmFA_Management]![Text0]。当表单打开时,这可以正常工作,但是当表单未打开时,参数是无用的,因为用户不知道它要求的是什么。是否可以应用封面文字或提示?我不能将文本框名称更改为更有用,因为数据库已经过时且记录不完整,我不想冒任何风险。

3 个答案:

答案 0 :(得分:0)

此查询如何打开以及如何使用?是否有第二个表单打开它或手动打开查询?它是另一个对象的源对象还是只是打开的查询?

如果它通过另一个表单打开并且它是一个源对象,你可以检查第一个表单是通过第二个表单的click或onOpen事件打开,如果不是,则存储一个变量来自输入框并更改对象的源对象。

If CurrentProject.AllForms("myform").IsLoaded = True
    myObject.SourceObject = myQuery
Else
    Dim input as string
    input = inputbox "Please enter a value for my field"
    myObject.SourceObject = "SELECT * FROM myTable WHERE myField = " & input & ";"
Endif

myObject.Requery

答案 1 :(得分:0)

我建议你从查询中删除参数。正如您在查询中添加参数时所看到的那样,它与一些需要打开的愚蠢形式结合在一起。这意味着您无法将查询用于其他报表,表单甚至代码。

在一天结束时,这样的方法会导致真正的混乱。

即使你可以“覆盖”提示,你还要为参数提供什么价值? (无论如何你必须提供它,对吧?)。

真正的问题是WHEN和WHERE你在使用那个查询?如果查询用于表单或报表,则删除条件,然后将“where”子句传递给给定报表。

所以要打开报告,你可以去:

Docmd.OpenReport "rptManagers",acViewPreview

上面会打开报告 - 没有过滤器。

如果您需要某些条件,请将其添加如下:

Dim strWhere   as string

strWhere = "Manager = [forms]![frmFA_Management]![Text0]"
Docmd.OpenReport "rptManagers",acViewPreview,,strWhere

或者,只需提示输入值:

Dim strWhere as string

strWhere = inputbox("Enter manager ")
if strWhere = "" then exit sub

strWhere = "Manager = '" & strWhere & "'"

Docmd.OpenReport "rptManagers",acViewPreview,,strWhere

使用openform / openReport的“where”子句的真正之处在于,您可以添加其他参数(可选),而无需修改或担心提示您的查询。

说:

strWhere = "Manager = 'Joe' and City = 'Edmonton'"
Docmd.OpenReport "rptManagers",acViewPreview,,strWhere

因此,通过从查询中删除参数,可以大大增加重用次数。现在你可以更好地添加或忽略参数。

添加表单后!在查询中引用,你已经大大破坏了在你的应用程序中重用的能力,因为一些愚蠢的形式必须是开放的。

简单采用"其中"条款,您将节省大量的开发成本,当您不想要过滤器时消除问题,并且更好地拥有可以在"许多"中重复使用的查询。没有一些愚蠢形式的地方必须打开。放置表格!然而,查询中的引用是增加额外计费时间的一种很好的方式 - 它确实会造成混乱,并且会大幅增加成本。最好是删除表格!查询中的引用 - 然后不会发生意外提示。

答案 2 :(得分:-1)

创建查询副本。

SQL 视图中打开副本。

[Forms]![frmFA_Management]![Text0]替换为您选择的参数名称,例如:

[Enter value for xx]