2017-10-06 9 views
0

テーブルからランダムなレコード(シードあり)をあらかじめ選択したいと思っています。フォーム変数をSQLコマンドに渡すアクセス

私は次のように書かれているが、それは

SELECT TOP ([Forms]![Form1]![NumerofElements]) * 
FROM TableA 
ORDER BY Rnd(-(100000*ID)*[Forms]![Form1]![Seed]) 

動作しないあなたは、私がSQLに直接フォーム(Form1)で報告されているそれらの情報を渡すことができる方法上の任意のアイデアを持っていますか?

+0

「TOP」の金額を私が知る限り動的に変更することはできません。それは、クエリにハードコードされる必要があります。ただし、VBAを使用してクエリを変更することはできます。 –

答えて

0

いいえ、TOPはパラメータをとりません。

Sql = "SELECT TOP {0} * FROM TableA ORDER BY Rnd(-Timer()*[ID])" 

をしてから使用して置き換えます:

あなたはこのSQLを使用してクエリを作成することができ

YourQuery.SQL = Replace(Sql, "{0}", ([Forms]![Form1]![NumerofElements])) 

をし、クエリを使用します。

+0

私は '[Forms]![Form1]![NumerofElements]'を 'CInt'関数にラップして、SQLインジェクションを防ぐこともできます。残念ながら、ここでパラメータを使用することはできません。 –

+0

@ErikvonAsmuth:いい考えです。 – Gustav

+0

私は2つの行を両方ともVBAエディタに入れる必要がありますか?そして、どのように私はクエリを呼び出すことができますか?さらに、たとえそれが存在しても、「Form1」を見つけることができないと言います。どうもありがとう! – smaa

関連する問題