現在、デルファイ プログラムの古い検索コードを取り除こうとしています。プログラムが使用している SQL サーバーに検索をプッシュしたいと考えています。このために、別の C# プログラムで使用するクエリと非常によく似たこのクエリを作成しました。
クエリは、SQL Management Studio または C# プログラムを使用して問題なく動作しますが、Delphi では「クエリからカーソルが返されませんでした」というエラーが発生します。
これがクエリです
DECLARE @SearchString NVARCHAR(MAX);
SET @SearchString = ':Param1';
IF @SearchString = '' SET @SearchString = '%';
--Table for splitted values
DECLARE @SearchItms TABLE
(
Item NVARCHAR(MAX)
)
--Split Operator
DECLARE @SplitOn NVARCHAR(MAX)
SET @SplitOn = ' '; --Split Keywords on space
--Splitting
While (Charindex(@SplitOn,@SearchString)>0)
Begin
Insert Into @SearchItms (Item)
Select ('%' + Substring(@SearchString,1,Charindex(@SplitOn,@SearchString)-1) + '%')
Set @SearchString = Substring(@SearchString,Charindex(@SplitOn,@SearchString)+1,len(@SearchString))
End
--Add last Item
Insert Into @SearchItms (Item)
Select ('%' + @SearchString + '%')
--Select fitting items
SELECT MyTable.*
FROM MyTable INNER JOIN SecondTable ON (MyTable.Key = SecondTable.Key)
WHERE
NOT EXISTS(
SELECT * FROM @SearchItms WHERE NOT(
(OneField IS NOT NULL AND OneField LIKE Item)
OR (OneDateField IS NOT NULL AND (convert(varchar, OneDateField, 104) LIKE Item) OR (convert(varchar, OneDateField, 114) LIKE Item ) )
OR (AnotherField IS NOT NULL AND AnotherField LIKE Item)
OR (LastField IS NOT NULL AND LastField LIKE Item)
)
)
奇妙なことの1つは、削除すると
--Add last Item
Insert Into @SearchItms (Item)
Select ('%' + @SearchString + '%')
「カーソルがクエリから返されませんでした」というエラーが表示されません。しかし、SQL Management Studio で 10 件の結果しか得られない検索文字列を使用すると、Delphi ではデータベース内のすべてのアイテムが取得され、検索では何も行われませんでした。
これは、Form、TSQLConnection、TSQLQuery、TDataSetProvider、および ClientDataSet だけを持つ単純なテスト プログラムでも発生します。
誰かがここで何が問題なのか教えてもらえますか? 他の環境ではクエリは問題なく動作するので、問題ないと思います。
助けてくれてありがとう。