【发布时间】:2014-01-17 19:20:56
【问题描述】:
我在 Delphi 7 中有一个项目,我使用 TAdoQuery.ParseSql(); 来加载参数。现在我在 XE4 中编译它,参数类型有时是错误的。它确实是ftInteger,但创建为ftSmallint。我能做些什么来解决这个问题?我的数据库是 SQL Server 2008 R2。
表定义:
CREATE TABLE [dbo].[tblTest](
[sysId] [int] IDENTITY(1,1) NOT NULL,
[Code] [nvarchar](50) NOT NULL,
[Name] [nvarchar](500) NOT NULL,
CONSTRAINT [PK_tblTest]
PRIMARY KEY CLUSTERED ( [sysId] ASC )
WITH ( PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF,
ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON )
ON [PRIMARY] )
ON [PRIMARY]
样本数据:
INSERT INTO tblTest ( Code, Name ) VALUES ( 'a1', 'name1' )
德尔福代码:
ADOQuery.SQL.Text := 'SELECT * FROM tblTest WHERE sysId = :sysId';
AdoQuery.Parameters.ParseSQL(ADOQuery.SQL.Text,True);
AdoQuery.Parameters.ParamByName('sysId').value := -1;
AdoQuery.open;
ConnectionString(数据库:MyDb)
Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=MyDb;Data Source=.
作为解决方案,我使用了这个 delphi 代码
AdoQuery.Parameters.ParseSQL(ADOQuery.SQL.Text,false);
现在任何人都可以解释一下吗?有副作用吗?
【问题讨论】:
-
什么版本的 SQL Server? SQL 代码是什么样的。你是用mdac还是sqlncli连接db?
-
@Mikael 版本为sqlserver2008R2,使用MDAC连接
-
强调它在delphi7中工作
-
我很想看看 ParseSQL 之后的代码,它指示参数数据类型,并指示它在 Delphi 7 中“有效”。当您分配 SQL.Text 时,如果 AdoQuery.Connection设置后,您的应用程序将查询 SQL Server 的类型。此时类型应该是 ftInteger。当您使用 DoCreate=true 调用 ParseSQL 时,将删除参数列表,并创建新参数,但 DataType=ftUnknown。我已经在 Delphi 7 和 Delphi XE5 中对此进行了测试。 (抱歉,没有 XE4)。
标签: delphi delphi-7 ado delphi-xe4