2011-07-05 46 views
1

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

问题:我想模仿此功能,但我期待在代码中创建查询作为字符串,然后在查询窗口中打开它。这可能吗?我搜索谷歌,但没有找到任何东西。如果它不可能有任何替代品?

在此先感谢。

+1

查询数据表是一个血腥的糟糕的用户界面。你为什么会选择比这更好的东西? –

+0

@ David-W-Fenton,我从其他3个已经创建的搜索页面(不是我的设计)复制UI。这只是一个高级搜索页面,可以将其他3个选项相结合,再加上一些额外的选项。 – Gage

+0

那么,你继续使用糟糕的用户界面,因为糟糕的用户界面已经到位了?这听起来像是一个很好的长期战略吗? –

回答

2

您可以打开它看起来像一个查询窗口数据表视图形式,但你需要创建一个表单控件添加到它,然后将记录来源

例如

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可能是一个比较简单的方法。