【问题标题】:MS-Access Open a VB built query in the query windowMS-Access 在查询窗口中打开一个 VB 构建的查询
【发布时间】:2013-12-24 14:52:24
【问题描述】:

场景:我正在为访问数据库创建高级搜索表单。他们已经拥有运行访问查询并在查询窗口中打开的单一搜索表单。

问题:我想模仿这个功能,但我希望在代码中将查询创建为字符串,然后在查询窗口中打开它。这可能吗?我搜索了谷歌,但没有找到任何东西。如果不可能,有没有其他选择?

提前致谢。

【问题讨论】:

  • 查询数据表是一个非常糟糕的 UI。为什么你会满足于没有比这更好的东西?
  • @David-W-Fenton,我从已经创建的其他 3 个搜索页面(不是我的设计)复制 UI。这只是一个高级搜索页面,结合了其他 3 个选项,还有一些额外的选项。
  • 那么,您继续使用糟糕的用户界面是因为糟糕的用户界面已经到位了吗?对您来说,这听起来像是一个不错的长期战略吗?
  • @David-W-Fenton,一个好的长期策略是让它退出 Access。这个程序是由另一个部门的实习生编写的,他不是程序员。整个程序是宏。我想更改 UI 等。但我不能专注于这个 atm 我有更大的项目要处理。不要恨。我知道这是一个糟糕的 UI/解决方案,但我对那个 atm 无能为力。
  • 您的问题已经得到解答,但我只是指出它是一个创可贴,并不能真正解决根本问题,即 UI 设计选择不当。

标签: sql ms-access vba


【解决方案1】:

您可以在数据表视图中打开一个看起来像查询窗口的表单,但您需要创建一个表单,向其中添加控件,然后设置记录源

例如

Dim rst As DAO.Recordset
Dim rsField As DAO.Field
Dim control As Access.TextBox

Dim frm As Form
Set frm = CreateForm()
frm.Visible = False

Dim sql As String
sql = "Select * from MSysObjects"

Set rst = CurrentDb.OpenRecordset(sql)



For Each rsField In rst.Fields
    Debug.Print rsField.Name
    Set control = CreateControl(frm.Name, acTextBox, acDetail)
    With control
       .Width = 100
       .Height = 100
       .Top = 100
       .Left = 100
       .ControlSource = rsField.Name
       .Name = rsField.Name

    End With

Next rsField

Set rst = Nothing

frm.Visible = True


frm.RecordSource = sql

DoCmd.OpenForm frm.Name, acFormDS

这有几个问题。

  1. 每次都会创建一个新表单。这意味着当用户关闭表单时,系统会询问他们是否要保存它。因此,您可能需要调查打开现有表单并修改(清除现有项目)
  2. 查询执行了两次。第一次获取字段,第二次实际显示表单。根据查询的作用,这可能是也可能不是问题。

诚实地修改 querydef 可能是更明智的方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多