2010-06-09 40 views
0

是什麼做以下的正確方法:序列事件

  1. 越來越DATE作爲用戶輸入
  2. 運行查詢
  3. 生成使用查詢報告

這是我在想的解決方案:

  1. 有這需要用戶輸入
  2. 形式運行查詢
  3. 打開報告

什麼是這樣做的正確方法>?

+1

沒有足夠的信息。 「運行查詢」是什麼意思?什麼類型的查詢?選擇?插? UPDATE?顯然,#3意味着一個SELECT(否則它不能在報告中使用),但如果是這樣,那麼步驟#2是多餘的,因爲「運行」SELECT查詢本身不會執行任何操作來填充報告。 – 2010-06-09 22:29:52

+0

我的新政策是對每個芬頓評論+1我看到 – 2010-06-10 00:55:59

回答

2

我不同意這種方法,因爲我不喜歡將報告綁定到特定形式。

取而代之,我使用在報表的OnOpen事件中打開的對話框窗體(如此處),並寫入報表的記錄源。

如果您希望報表可以在沒有彈出對話框的情況下運行,您可以使其成爲OpenArgs的條件,或者說,如果Filter屬性已經設置(如果您使用DoCmd.OpenReport和WHERE論證)。

我喜歡使報告和對話框儘可能獨立,我經常使用獨立的類模塊作爲數據存儲結構,並在OnOpen事件中檢查它。如果類模塊的相關實例的公共變量是Nothing,那麼只需運行該報告,否則,從類模塊實例的屬性中提取數據並寫入記錄源。

通過這種方式,您可以使對話框窗體和報表完全獨立。兩者都需要對彼此一無所知,但兩者都將與類模塊一起使用(儘管表單不需要知道類模塊實例的任何內容)。

欲瞭解更多詳情,請詢問。

這是一個複雜的主題,我花了數年的時間研究它,以使應用盡可能保持可維護性。將UI對象彼此解耦是改善可重用性的一個因素,因此具有更好的可維護性和可擴展性。 (當然,您不需要使用類模塊 - 您可以使用用戶定義的類型或數組,或者其他任何類型的模塊,但是我喜歡具有相同結構的多個實例的能力,這就是整體點類模塊)

1

我會在構建查詢的窗體上創建一個按鈕,並在按鈕的Click事件過程中以預覽模式打開報告(假設他們不想僅自動發送給默認打印機) 。

2

查詢可以引用表單作爲輸入參數提交,可用作查詢結果報告。

  • 因此,有一個與日期用戶 輸入的窗體。
  • 放置一個可打開 報告的按鈕。
  • 該報告應利用 查詢/嵌入式sql,它使用表單中的 字段作爲輸入。

通常情況下,報告在未打開窗體的情況下運行時,將請求「窗體域」的值。

因此,一般來說,您需要創建一個報告表單,您可以從中剔除報告,其中包含報告的必填字段。

+1

@I__這裏是一個示例查詢:PARAMETERS [Forms]!frmDate![txtStart] DateTime; SELECT m.id,m.field2,m.date_field FROM MyTable AS m WHERE m.date_field> = [Forms]!frmDate![txtStart]; – HansUp 2010-06-09 18:31:22

+2

FWIW,我發現如果在INSERT的SELECT或VALUSE語句或UPDATE的SET語句中使用返回的值,那麼只需要將控件引用定義爲參數,即使如此,它也只在if控件是空的。對於SELECT,我沒有發現它是必要的。 – 2010-06-09 22:28:16

+0

數據庫引擎顯然希望日期類型與m.date_field進行比較。因此,即使TypeName([Forms]!frmDate![txtStart] .Value)=「String」,引擎也會接受有效日期的字符串表示。我沒有意識到這一點。 – HansUp 2010-06-11 14:57:22