求助:用BDE的query时,如何为某字段为为DATE或INTEGER的类型赋空值

yqdragon 2005-06-16 09:11:29
对数据库而言,SQL-SERVER和DB2的日期类型均允许为空值
在用BDE的Query时(注意不是ADO的adoquery),在插入数据时参数必须赋个值(不赋值会报错),假如日期类型为空如何赋值呢?

若用DB2建表CREATE TABLE person(name varchar(20),birs date,age integer)
procedure TFrmMain.Button1Click(Sender: TObject);
begin
with dm.q_pub do
begin
close;
sql.clear;
sql.add('insert into person values(:name,:birs,:age)');
params.ParamByName('name').value:='11';
params.ParamByName('birs').Value := '1998-9-9'; //若值为空如何写?
//params.ParamByName('birs').Value := ''; //若这么写(或=null,=nil),运行均通不过
params.ParamByName('age').Value := '';
//上句(或写成.asstring=''),运行通不过,如何赋空值?
execsql;
Showmessage('success');
end;
end;


若用sql-server建表CREATE TABLE person(name varchar(20),birs datetime,age integer)
procedure TFrmMain.Button1Click(Sender: TObject);
begin
with dm.q_pub do
begin
close;
sql.clear;
sql.add('insert into person values(:name,:birs,:age)');
params.ParamByName('name').value:='11';
params.ParamByName('birs').Value := '1998-9-9'; //若值为空如何写?
//params.ParamByName('birs').Value := '';
//若按上句写法,数据库中实际插入一个默认1900-1-1的值而不是空值,如何插入空值?
params.ParamByName('age').Value := '';
//上句写法,数据库中实际插入的是0而不是空值,如何插入空值?
execsql;
Showmessage('success');
end;
end;

请测试过回,谢谢!
...全文
191 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
yqdragon 2005-06-18
  • 打赏
  • 举报
回复
??????????????????????????????????
duanhai 2005-06-17
  • 打赏
  • 举报
回复
我一直以为用NULL是可以的,没有想到你说不行

放弃参数形式直接制造SQL语句吧

如:
with dm.q_pub do
begin
Close;
SQL.Text := format('Insert into person values(%s,%s,%s)',
[QuotedStr('11'), QuotedStr('1989-01-01'), 'NULL']);
execsql;
end;
yqdragon 2005-06-17
  • 打赏
  • 举报
回复
高手帮忙啊,大家对这种情况都怎么处理的啊?没人知道吗?????????
yqdragon 2005-06-17
  • 打赏
  • 举报
回复
帅哥,我的字段很多,而且值不一定为null,要用参数形式的。
???????????????????
zdr690929 2005-06-17
  • 打赏
  • 举报
回复
INTER型怎能为空呢?高成“0”不行吗?
如果设置成“NULL”不行,就没办法了。
空值本来就不是个INTER型的数据,但对STRING型,空值就可以
lovend 2005-06-16
  • 打赏
  • 举报
回复
帮你顶

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧