【问题标题】:Search creates issues in my MS Access form搜索在我的 MS Access 表单中产生问题
【发布时间】:2012-03-16 15:47:51
【问题描述】:

在 MS Access 中,我创建了一个数据库,它有一个主表单和一个子表单,并且是一对多的关系,然后我在我的主表单上创建了一个搜索框,我应该能够基于两者进行搜索,我可以做到的主要和子形式的字段。现在,每当我搜索表单时,都会显示搜索到的记录,但问题是我的主表单上的非主表单控件(保存、新建、删除、下一个、上一个等)都在工作。 很高兴在这个问题上指导我...谢谢,

【问题讨论】:

  • 需要更多信息 - 您的搜索框使用什么方法?听起来搜索框正在将记录集的主要表单过滤为仅一条记录。因此,无法向前或向后导航是正常的。就新记录而言,这可能是几件事。您的主要表单设置可以设置为不允许添加,或者您可以将基础记录集更改为只读等。
  • 在搜索框的更新后方法中,我做了以下三行查询: 1.dim qry = "select parenttbl.*, childtbl.* from parenttbl inner join cildtbl on parenttbl.id = childtbl.fid其中 parenttbl.id=" & Me.mysearchbox.text &";" 2.Me.RecordSource = qry 3.Me.FilterOn = True
  • 您是否有理由更改主窗体上的记录源以包含子表?如果主窗体/子窗体中的子/主属性设置正确,则只需过滤主窗体上的记录。从您的过滤器中删除 childtbl,看看这是否会影响您的保存能力。
  • 谢谢,但我根本不知道该怎么做,我只知道上面的命令。请告诉我该怎么做。

标签: ms-access ms-access-2007


【解决方案1】:

重新导航

根据您用于搜索的方法,您将无法前后导航。如果您确实想前后导航,则需要指定搜索范围。例如,您不需要搜索 ID 为 123 的 SINGLE 记录,而是需要搜索 RANGE 记录,即 ID 123 和 ID 234 之间的记录。

重新保存

您不需要在绑定表单(直接绑定到记录源的表单)上显式保存记录。您只需更改数据,然后继续。一旦您继续,您的数据将被保存 - 只要不违反表约束。

重新搜索

当您在 Access 中创建主表单/子表单时,这 2 个表单通过子/主属性链接。因此,如果您在主表单中搜索特定记录,您通常无需担心过滤子表单。使用类似于您在 cmets 中的方法:

dim qry As String
qry = "select parenttbl.* from parenttbl where parenttbl.id=" & Me.mysearchbox.text &";"
Me.RecordSource = qry

通过在原始代码中加入子表,您可能对 Access 的保存能力感到困惑,但我对此表示怀疑。我没有测试它,但我认为您不需要在更改记录源后将 filteron 属性设置为 true。看看 Allen Browne 在这篇文章中如何使用 filteron http://allenbrowne.com/ser-28.html

重新过滤开启 话虽如此,您可能可以调整他对 filteron 属性的使用来“搜索”您想要的记录,然后您可以将 filteron 属性设置为 False,然后在您的记录集中前后导航。不过我没有测试。

编辑:这是一个将 FilterOn 属性设置为 false 的示例:

Me.FilterOn = False
DoCmd.GoToRecord , , acNext

为此,您需要在主窗体绑定到的 SQL 查询中指定 ORDER BY 子句。否则,您可能无法按预期方式前后导航。

【讨论】:

  • 我只是简单地做了两件事来过滤基于 parenttbl 的 ID,它也可以工作,但现在我去点击 Next 按钮它不会带来下一条记录 1.我在搜索框中做了什么:'Me.Filter = "ID =""" & Me.mySearchBox& """" Me.FilterOn = True '和 2.我在下一个导航按钮中做了什么: 'DoCmd.GoToRecord , , acNext' 我只是认为至少它应该可以工作然后我会看到其他选项。
  • 查看我答案底部的编辑。此外,我更改了为更改记录源而编写的示例代码,以显示声明变量的正确方法。变量 'qry' 是一个 Variant 您声明它的方式。顺便说一句,您不需要变量来执行此操作。您可以直接将字符串传递给“me.recordsource”
  • 我回答你的问题了吗?我注意到您在此网站上提出了多个问题,但没有将一个问题标记为“已回答”。
  • 是的,你帮我做了回复,在这里我问了几个问题,但至少没有人回复。好的,经过多次尝试,我实际上以不同的方式解决了它,我只是在搜索完成后将这些放在行中 'me.recordsource="parenttbl"' 和 'DoCmd.GoToRecord , , acGoTo, searchedParentID'
猜你喜欢
  • 1970-01-01
  • 2015-05-27
  • 1970-01-01
  • 2018-06-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多