3

我正在尝试借助 Delphi 2007 中的 ADO 将数据插入 SQL Server 2000 数据库。

到目前为止,我已经写了这样的东西:

insert into (a,b)
select :a,:b

qry.parameters.parambyname('a').value := '';
qry.parameters.parambyname('b').value := '';

我得到的错误是:

不允许从数据类型 text 到数据类型 nvarchar 的隐式转换...
使用 convert 函数运行此查询。

表中的列允许 NULL 值。

我想要的是 SQL Server 表显示值为 '' 的 NULL。我怎样才能做到这一点?

4

8 回答 8

2

你可以用这些行替换

qry.parameters.parambyname('a').value := Null;
qry.parameters.parambyname('b').value := Null;
于 2012-08-20T15:12:28.543 回答
1

尝试

qry.parameters.parambyname('a').Clear;

于 2012-08-23T00:22:30.550 回答
1
qry.parameters.parambyname('a').value := unassigned;
于 2012-08-20T14:19:04.317 回答
1

尝试使用:

qry.parameters.parambyname('a').value := Null;
qry.parameters.parambyname('b').value := Null;

或者

根本不设置参数 - 默认情况下,参数设置为“Null”。

Null 是 Variant 的一种特殊类型(使用 Variants),它定义了一个空值(没有类型)。

于 2012-08-20T14:19:19.897 回答
1

添加使用->变体;

在你可以用这些行替换之后

qry.parameters.parambyname('a').value := Null;
qry.parameters.parambyname('b').value := Null;
于 2014-03-05T09:38:17.763 回答
1
qry.parameters.parambyname('a').AsVariant:= Null; 

一定是

<TAdoDataSet>.FieldByName('a').AsVariant:= Null;
于 2012-08-20T14:57:40.910 回答
1

不要写null;它是nil

<TAdoDataSet>.FieldByName('a').AsVariant:= Nil; 
于 2012-10-10T18:34:22.493 回答
0

使用 ADOQuery,为您的表编写一个“选择”。我经常使用它。

Select * From MyTable Where 0=1

并双击 ADOquery 组件。将出现一个字段列表窗口。添加所有字段(右键单击)。这样您就可以在 Delphi 代码中使用您的字段。

MyTable.Open;
MyTable.Append;
MyTableAFieldFromMyTable.AsInteger := 0;
MyTableAStringFieldFromMyTable.AsString := 'Hello, World';
MyTable.Post;

当涉及到你的问题时:

MyTableAnotherFieldFromMyTable.Clear;

正如我们在 SQL Server 中所知道的那样,将值设置为 NULL。编辑:我刚刚检查了一个工作代码。我在下面的代码中从表格中清除了视频字段。

Ornek.Open;
Ornek.Edit;
OrnekVideo.Clear;

查询只是“从 Ornek Where 0=1 中选择 *”,我使用字段的 .AsInteger、.AsString 等属性在 Delphi 代码中进行分配。

于 2012-08-20T14:38:32.860 回答