2013-10-03 52 views
0

我有一個窗體,在窗體上運行一些sql,窗體上的三個排序按鈕都在他們自己的私有函數中重複使用sql。唯一的區別是排序順序。當我需要更新where子句時,我必須更新它4次。我想創建一個參數化函數,如如何在ms訪問VBA中創建共享函數?

function getFormRecs(arg){ 
    sql... 
    . 
    . 
    . 
    order by 'arg' 
{ 

其中arg是從窗體控件或事件傳入的參數。

然後我想的形式負載和窗體上)的3個排序按鈕來調用函數getFormRecs(,同時通過在精氨酸,像

getFormRecs('formload') 
getformRecs('sorta') 
getformRecs('sortb') 
getformRecs('sortc') 

我將在定義正確的排序字段基於arg的函數頂部通過。

最終結果僅僅是重用一個包含幾乎相同的冗長的sql的函數或子例程。

回答

2

這似乎是關於你問的:

Function getFormRecs(ByVal arg As String) 
    getFormRecs = "sql ... " & _ 
        "." & _ 
        "." & _ 
        "." & _ 
        "order by " & arg 
End Function 
Private Sub Form_Load() 
    Dim sql As String 
    sql = getFormRecs("formload") 
    '... Logic that uses sql 
End Sub 
2

我不確定爲什麼你需要的功能。您可以從不包含ORDER BY的基本查詢開始。

SELECT id, fld2, fld3 
FROM YourTable; 

然後再利用,通過包括它作爲一個新的SELECT聲明數據源的其他地方相同的查詢,你添加你需要的特定ORDER BY

SELECT q.id, q.fld2, q.fld3 
FROM qryBase AS q 
ORDER BY q.fld3;