- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
现在,我正在尝试删除delphi程序中的一些旧搜索代码,并且我想将搜索推送到程序正在使用的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)
)
)
一件奇怪的事情是,当我删除时
--Add last Item
Insert Into @SearchItms (Item)
Select ('%' + @SearchString + '%')
我没有收到“光标未从查询返回”错误。但是使用搜索字符串时,我在 SQL Management Studio 中只得到 10 个结果,而在 Delphi 中却得到了数据库中的所有项目,就像搜索没有执行任何操作一样。
这种情况也会发生在一个简单的测试程序中,我只有一个 Form、一个 TSQLConnection、TSQLQuery、TDataSetProvider 和一个 ClientDataSet。
有人可以告诉我这里出了什么问题吗?由于该查询在其他环境下工作正常,我认为应该没问题。
非常感谢您的帮助。
最佳答案
正如 ldsandon 在他的帖子中提到的,问题似乎是,它不是一个简单的查询,而是一个完整的脚本。但由于其他 dbExpress 单元似乎都无法处理这个问题,所以我找到了一种让它工作的方法。
只需将 SET NOCOUNT ON;
添加到脚本的开头,然后使用 SET NOCOUNT OFF;
关闭脚本
我认为这会抑制插入中的“xx rowseffected”消息,因此可以无错误地运行。
如果您知道运行脚本而不出错的更好方法,请告诉我。
谢谢。
关于delphi - TSQLQuery - 查询未返回游标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6490787/
我有一个名为 Artist 的表,当前包含四个记录和一个包含以下语句的 TSQLQuery: SELECT name FROM Artist 表 Artist 还包含以下记录: id
现在,我正在尝试删除delphi程序中的一些旧搜索代码,并且我想将搜索推送到程序正在使用的sql服务器。为此,我创建了这个查询,它与我在不同的 C# 程序中使用的查询非常相似。 使用 SQL Mana
我收到“SQL Server 错误:算术异常、数字溢出或字符串截断”错误 下面是代码 AQuery:= TSQLQuery.Create(nil); with AQuery do begin SQLC
我一直在评估 Delphi XE4(针对 win32 进行编译,但最终平台将是 iOS),我需要创建 SQLite 数据库(没问题)并进行一些查询。这是我想使用的一个查询: select id a
我正在使用 Delphi XE2 和 TSQLQuery 对象。我第一次使用它时它就有效。如果我立即重用它,那么它不会解析新 SQL 的参数并重建 qry.Params 列表: var qry:
我有一个查询,使用像这样的 TSQLQuery TSQLQuery* tq = new TSQLQuery(NULL); tq->SQLConnection = atdbDM->SQLConnecti
我在从程序用户在运行时定义的查询中获取字段列表时遇到问题。我让用户在备忘录控件中输入 SQL 查询,然后我想让他们浏览将返回的字段并执行诸如格式化输出、求和列值等操作。因此,我必须获取列名称,以便它们
(请参阅文章末尾使用堆栈跟踪编辑 #1 和使用解决方法编辑 #2) 在对 TSQLQuery.FieldByName().AsString -> TStringStream Corrupts Data
TSQLQuery 类是单向的,因此为了将其用作数据绑定(bind) TDBGrid 的源,TClientDataSet 需要在 TSQLQuery 和 TDBGrid 绑定(bind)到的 TDat
我正在使用Delphi XE2。我的代码从 SQL-Server 2008 R2 数据库中提取数据。返回的数据是一个包含 1,055,227 字节数据的 nvarchar(max) 字段。我使用以下代
以下 Delphi 函数可用于将 fkInternalCalc 添加到 TClientDataset。这很有用,因为我可以为每条记录存储一些信息,进行计算或存储临时标志。 相同的代码在 Lazarus
我在 Delphi 2007 中使用 DBExpress 连接到网络上的 MySQL5 数据库服务器。 一切正常,直到我尝试上传大量数据。我正在尝试将 8000 多条记录插入数据库,一次一个循环,在循
Precis:我的代码试图更新 Delphi XE TClientDataset 中的非物理字段,(连接到 TSQLQuery 及其 SQL作为运行时 Open 命令的结果创建的属性集)。 我有一个
我一直在 Lazarus 中使用 ParamByName 来指定用于不同字段的参数。它主要是 AsString 或 AsBoolean... 但现在我需要使用具有 8 位精度和 3 位小数的数值。这当
我是一名优秀的程序员,十分优秀!