首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

定义参数为空 但报错了解决方案

2012-03-15 
定义参数为空 但报错了小弟做了一个借书的功能,想在借阅信息表插入一行数据的 但我插入数据的时候报错了错

定义参数为空 但报错了
小弟做了一个借书的功能,想在借阅信息表插入一行数据的 但我插入数据的时候报错了 
错误:“不正常地定义参数对象,提供了不一致或不完整的信息。”
可能问题出在红字上 向各路高手请教。。
程序如下:
procedure Tfrm_jsqr.Button1Click(Sender: TObject);
var
b:integer;
c:string;
begin
b:=data1.ADOqr.fieldbyname('书籍总数').Value;
if b=0 then
application.MessageBox('此书全部外借中。。。','提示',64)
  else
  begin
  with data1.ADOdzxx do
  begin
  close;
  sql.clear;
  sql.Add('select * from 读者信息表 where ID=:c');
  parameters.ParamByName('c').Value:=edit1.Text;
  open;
  end;
  data1.ADOdzxx.Active:=true;
  with data1.ADOjyxx do
  begin
  close;
  sql.Clear;
  sql.Add('insert 借阅信息表 value (:a,:b,:c,:d,:e,:f)');
  parameters.ParamByName('a').Value:=edit2.Text;
parameters.ParamByName('b').Value:=data1.ADOdzxx.fieldbyname('姓名').Value;
parameters.ParamByName('c').Value:=datetostr(date());
parameters.ParamByName('d').Value:=datetostr(date());
parameters.ParamByName('e').Value:=null;
parameters.ParamByName('f').Value:=null; open;
  end;
  data1.ADOjyxx.Active:=true;
  end;
  b:=b-1;
end;

补充:借阅信息表的a b c d e f 类型分别为 varchar varchar datetime datetime int datetime 
最后的俩个 我是允许为空的

[解决办法]
楼主你这种写法存在严重问题,而且datetostr有严重的本地化问题,建议写法:

Delphi(Pascal) code
with data1.ADOjyxx do  begin    Close;    Sql.Clear;    Sql.Add('Select * From 借阅信息表 Where 1=2');    Open;    Append;    FieldByName('FieldName').AsString := edit2.Text;    FieldByName('FieldName').AsDateTime := Date();    Post  end;
[解决办法]
给你的代码为什么不好好看看,而且手动调试一下呢,都告诉你的代码是有问题的,你哪样写即使在你电脑上没问题,到别的电脑运行就可能出错,这些都是因为你的DateToStr是有本地化问题,改用:
Delphi(Pascal) code
with data1.ADOjyxx do  begin    Close;    Sql.Clear;    Sql.Add('Select * From 借阅信息表 Where 1=2');    Open;    Append;    FieldByName('FieldName').AsString := edit2.Text;    FieldByName('FieldName').AsDateTime := Date();    Post  end;
[解决办法]
IncDays函数

热点排行