2013-03-09 46 views
0

我正在創建一個查詢,它將選擇一個隨機列表中的'x'個條目。我希望能夠在每次運行查詢時更改查詢返回的值的數量。提示輸入TOP值查詢

是否可以提示輸入TOP返回值而不必每次都打開查詢設計?

SELECT TOP 50 * 
FROM [MyTableName] 
ORDER BY Rnd([SomeNumber]); 

回答

1

不幸的是,它似乎是最明顯的方法,即...

PARAMETERS RowsToReturn Long; 
SELECT TOP [RowsToReturn] * 
FROM MyTableName 
ORDER BY Rnd([SomeNumber]); 

...將無法正常工作。 Access會抱怨SQL查詢無效。

我想接近它是創建一個小VBA函數類似以下內容,然後創建一個使用RunCode行動來調用它

Public Function buildRandomTopN() 
' 
' assumes that the table has an AutoNumber primary key named [ID] 
' 
Dim rowsToReturn As Long, cdb As DAO.Database, qdf As DAO.QueryDef 
Const queryName = "randomTopN" ' existing QueryDef to update 

On Error Resume Next 
rowsToReturn = CLng(InputBox("Number of rows to return")) 
If Err.Number = 0 Then 
    On Error GoTo 0 
    If rowsToReturn > 0 Then 
     Set cdb = CurrentDb 

     ' update the SQL statement for the query 
     Set qdf = cdb.QueryDefs(queryName) 
     qdf.SQL = "SELECT TOP " & rowsToReturn & " * FROM [MyTableName] " & _ 
      "ORDER BY Rnd([ID])" 
     qdf.Close 
     Set qdf = Nothing 
     Set cdb = Nothing 

     ' open the query 
     DoCmd.OpenQuery queryName 
    End If 
End If 
End Function 
宏的方式