定义参数为空 但报错了
小弟做了一个借书的功能,想在借阅信息表插入一行数据的 但我插入数据的时候报错了
错误:“不正常地定义参数对象,提供了不一致或不完整的信息。”
可能问题出在红字上 向各路高手请教。。
程序如下:
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有严重的本地化问题,建议写法:
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是有本地化问题,改用:
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函数