怎样添加一个空值到数据库中

时间:2022-05-31 00:29:46
我试图将一个空值添加到一个数据库中,程序运行时出现如下错误:

query1:field 'qty' is of an unknown type.

表结构如下:
database : access
Table name: goodsdetails
Field Name   Data Type
ID           AutoNumber  (Primary Key)
goods        text   (L:20)
qty          number(double)
unit         text   (L:10)

程序代码如下:

query1.close;
query1.sql.clear;
query1.sql.add('insert into goodsdetails (goods,qty,Unit) values (:goods,:qty,:unit);
query1.ParamByName('goods').AsString := 'BOOK';
query1.ParamByName('qty').Asfloat := NULL;  (注意这段代码!!)
query1.ParamByName('UNIT').AsString := '';    注意这段代码!!,用了两种不同的方式表示空值)
query1.ExecSQL;

分析:DELPHI不能识别空值类型,但是数据库可接受空值,怎样才能脱离DELPHI的限制,使空值正常的保存在数据库中。请各位帮助怎样解决,谢谢!

12 个解决方案

#1


如果数据库中字段允许为 null,在插入时不要给它值就是null了.
像你要qty为null,insert时只插入(goods,Unit)就行了.

#2


insert into goodsdetails (goods,Unit) values (:goods,:unit);

插入后qty就是null

#3


你的方法不错,但是如果我的字段很长(20个以上),又是以批模式添加记录,每一行都会有空值,并且空值的字段每一次都不相同,这样的话,我需要为每一个空值去写一段代码,可想而知,程序会变得非常复杂。

#4


楼上的,感谢你们的答复
因为我需要一次添加几十上百行。需且字段有20多个,上面只是我简单代了的一个例子。根据你们的提示,程序可能会很复杂,请看下面的代码:

IF GOODS=''then
begin
   insert into goodsdetails (qty,Unit) values (:qty,:unit);
end;
if qty='' then
begin
   insert into goodsdetails (goods,Unit) values (:goods,:unit);
end;
.
.
.

#5


为什么不生成insert 语句呢?

#6


如果数据库中字段允许为 null,
在插入时不要给它值自动就是null了啊.
所以这里你只需要插入(goods,Unit)就行了.

#7


如果数据库中字段允许为 null,
在插入时不要给它值自动就是null了啊.
所以这里你只需要插入(goods,Unit)就行了.

#8


总之一句话:数据库中的字段可以为空时,你在前台只不要给这个字段赋值就可以了,也就是设成空!

#9


insert into goodsdetails (qty,goods,Unit) values (:qty,:goodes,:unit);

parambyname('goods').value:=s1;(s1为空就空)

#10


只要表设计好了,不用给这字段值,不就是空了

#11


query1.ParamByName('goods').AsString:= 'BOOK';
query1.ParamByName('qty').AsString:= 'NULL';
query1.ParamByName('UNIT').AsString:= 'NULL';

这样肯定行的,我就是这么用的。

#12


楼主试试下面看看...
query1.ParamByName('qty').value:=nil;
or
query1.ParamByName('qty').value:=null;

#1


如果数据库中字段允许为 null,在插入时不要给它值就是null了.
像你要qty为null,insert时只插入(goods,Unit)就行了.

#2


insert into goodsdetails (goods,Unit) values (:goods,:unit);

插入后qty就是null

#3


你的方法不错,但是如果我的字段很长(20个以上),又是以批模式添加记录,每一行都会有空值,并且空值的字段每一次都不相同,这样的话,我需要为每一个空值去写一段代码,可想而知,程序会变得非常复杂。

#4


楼上的,感谢你们的答复
因为我需要一次添加几十上百行。需且字段有20多个,上面只是我简单代了的一个例子。根据你们的提示,程序可能会很复杂,请看下面的代码:

IF GOODS=''then
begin
   insert into goodsdetails (qty,Unit) values (:qty,:unit);
end;
if qty='' then
begin
   insert into goodsdetails (goods,Unit) values (:goods,:unit);
end;
.
.
.

#5


为什么不生成insert 语句呢?

#6


如果数据库中字段允许为 null,
在插入时不要给它值自动就是null了啊.
所以这里你只需要插入(goods,Unit)就行了.

#7


如果数据库中字段允许为 null,
在插入时不要给它值自动就是null了啊.
所以这里你只需要插入(goods,Unit)就行了.

#8


总之一句话:数据库中的字段可以为空时,你在前台只不要给这个字段赋值就可以了,也就是设成空!

#9


insert into goodsdetails (qty,goods,Unit) values (:qty,:goodes,:unit);

parambyname('goods').value:=s1;(s1为空就空)

#10


只要表设计好了,不用给这字段值,不就是空了

#11


query1.ParamByName('goods').AsString:= 'BOOK';
query1.ParamByName('qty').AsString:= 'NULL';
query1.ParamByName('UNIT').AsString:= 'NULL';

这样肯定行的,我就是这么用的。

#12


楼主试试下面看看...
query1.ParamByName('qty').value:=nil;
or
query1.ParamByName('qty').value:=null;