現在、私は古い検索コードをdelphiのプログラムで取り除こうとしています。プログラムが使用しているSQLサーバーに検索をプッシュしたいと思います。このため、このクエリを作成しました。これは、別のC#プログラムで使用するクエリと非常によく似ています。TSQLQuery - クエリから返されたカーソルがありません
クエリは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)
)
)
一つ奇妙なことは、私は
--Add last Item
Insert Into @SearchItms (Item)
Select ('%' + @SearchString + '%')
を削除するとき、私は「カーソルクエリから返されません」というエラーを取得しないこと、です。しかし、SQL Management Studioで10個の結果しか得られない検索文字列では、検索で何もしなかったので、データベース内のすべてのアイテムがDelphiで取得されます。
これは、フォーム、TSQLConnection、TSQLQuery、TDataSetProvider、およびClientDataSetを持つ単純なテストプログラムでも発生します。
誰かが私にこの問題を教えてもらえますか?クエリは他の環境で正常に動作するので、これは問題ありません。
ご協力いただきありがとうございます。
ええ、同じ答えを出しましたが、あなたは速くそれを書きました:P – Rodrigo
私は単純な "DELETE FROM WHERE id =:id" –