2011-07-05 45 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可能是一個比較簡單的方法。