1

VB6 アプリケーションから Access 2010 DB に対してクエリを実行します。SQL は次のようになります。

SELECT *, NetPrice AS Price 
FROM Products 
WHERE Len(ProductName)<>0 AND ProductID IN (1,5,8,13);

次のコードはクエリを実行します。

Set ResultRecordset = myDataBase.OpenRecordset(SqlCode, dbOpenSnapshot)

ここまでは問題ありませんが、リスト内の ID の数が 50 ほどになると、ResultRecordset はNothing. Access hereのいくつかの制限を見つけましたが、そこに提供されている値をはるかに下回っています (1 テーブル、200 文字のクエリ長、ネストされたサブクエリなしなど)。何がうまくいかないのですか?

4

3 に答える 3

1

Filburt は実際には、クエリの IN (リストの約 50) の部分でよりターゲットに合っていると思います。FoxPro (およびこれに戻る) では、IN() 句もサポートされていることを私は知っています。ただし、IN 機能は、リストで最大 20 個のパラメーターを受け入れるように設計されています。それ以上のことをしたい場合は、複数の IN() ステートメントに分割し、それぞれの間に OR を入れる必要がありました...

where
   ProductID IN ( 1, 2, 20, 32, ...)
   OR ProductID IN (46, 50, 52, ...)

それらを分割することで、あなたが走っているものになるかもしれません。

于 2013-05-16T10:41:56.257 に答える
0

Access に送信するクエリが次のようになるように、クエリで UNION ALL 演算子を試すことができます。

SELECT *, NetPrice AS Price 
FROM Products 
WHERE Len(ProductName)<>0 AND ProductID IN (1,2,3,4,5,6,7,8,9)

Union All

SELECT *, NetPrice AS Price 
FROM Products 
WHERE Len(ProductName)<>0 AND ProductID IN (10,11,12,13,14,15,16)

ProductID 列にインデックスが付けられていると仮定すると、これにより、クエリも高速に実行できるようになります。

于 2013-05-16T16:44:39.320 に答える