sQueryString, sMoney_name, sMoney_sname : string;
fChange_rate : integer;
begin
sMoney_name := '';
sMoney_sname := '';
fChange_rate := 0;
sQueryString := '';
sMoney_name := Trim(edtMoneyName.Text);
sMoney_sname := Trim(edtMoneySName.Text);
fChange_rate := StrToInt(Trim(edtChangeRate.Text));
dmFootBallForm.ADOQuery1.Close;
dmFootBallForm.ADOQuery1.SQL.Clear;
dmFootBallForm.ADOQuery1.SQL.Add('insert into FootBall..MoneyType(money_id,money_name,money_sname,change_rate) values(1, :sMoney_name, :sMoney_sname, :fChange_rate)');
dmFootBallForm.ADOQuery1.ExecSQL;
end;
9 个解决方案
#1
执行后提示:无法将NULL值插入列'money_name',表'football.dbo.MoneyType';该列不允许为空值。INSERT失败。
可每个值都有输入呀,没有空的值呀。
可每个值都有输入呀,没有空的值呀。
#2
首先,你的数据库的有些字段是不允许为空的;
其次,你的SQL语句中用了变量参数作为输入值(如::sMoney_name, :sMoney_sname, :fChange_rate),那你必须用ADOQuery1.Parameters.ParamByName('sMoney_name').value:=sMoney_name指定参数的值,否则程序执行时会将其当空值处理;(这样就多此一举了)
其次,你的SQL语句中用了变量参数作为输入值(如::sMoney_name, :sMoney_sname, :fChange_rate),那你必须用ADOQuery1.Parameters.ParamByName('sMoney_name').value:=sMoney_name指定参数的值,否则程序执行时会将其当空值处理;(这样就多此一举了)
#3
给你段程序,如果去掉有标识的那两句,数据库只有插入空行。
var
a1,b1,sqlstr:String;
begin
a1:='ss';
b1:='yy';
sqlstr:='Insert into aa (aa,bb) values (:a1,:b1)';
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add(sqlstr);
ADOQuery1.Parameters.ParamByName('a1').value:=a1; //去掉
ADOQuery1.Parameters.ParamByName('b1').value:=b1; //去掉
ADOConnection1.BeginTrans;
ADOQuery1.ExecSQL;
ADOConnection1.CommitTrans;
end;
var
a1,b1,sqlstr:String;
begin
a1:='ss';
b1:='yy';
sqlstr:='Insert into aa (aa,bb) values (:a1,:b1)';
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add(sqlstr);
ADOQuery1.Parameters.ParamByName('a1').value:=a1; //去掉
ADOQuery1.Parameters.ParamByName('b1').value:=b1; //去掉
ADOConnection1.BeginTrans;
ADOQuery1.ExecSQL;
ADOConnection1.CommitTrans;
end;
#4
dmFootBallForm.ADOQuery1.ExecSQL;
在这段代码前面加入
dmFootBallForm.parameties.paramByName('smoney_name'):=你所要传的值,
...
三个变量都要这样加,
在这段代码前面加入
dmFootBallForm.parameties.paramByName('smoney_name'):=你所要传的值,
...
三个变量都要这样加,
#5
你没有给参数赋值的
dmFootBallForm.ADOQuery1.SQL.Add('insert into FootBall..MoneyType(money_id,money_name,money_sname,change_rate) values(1, :sMoney_name, :sMoney_sname, :fChange_rate)');
//这里应该给参数的赋值的
parameters.ParamByName(sMoney_name).value:=sMoney_name;
parameters.ParamByName(sMoney_sname).value:=sMoney_sname;
parameters.ParamByName(fChange_rate).value:=fChange_rate;
dmFootBallForm.ADOQuery1.ExecSQL;
dmFootBallForm.ADOQuery1.SQL.Add('insert into FootBall..MoneyType(money_id,money_name,money_sname,change_rate) values(1, :sMoney_name, :sMoney_sname, :fChange_rate)');
//这里应该给参数的赋值的
parameters.ParamByName(sMoney_name).value:=sMoney_name;
parameters.ParamByName(sMoney_sname).value:=sMoney_sname;
parameters.ParamByName(fChange_rate).value:=fChange_rate;
dmFootBallForm.ADOQuery1.ExecSQL;
#6
应该是dmFootBalForm.adoQuery1.parameties.paramByName('sMoney_name'):=你所要传的值,
#7
如果用存储过程,应该如何实现以上这段代码要实现的目的呢,请朋友帮着写一段。谢谢!
#8
直接用dmFootBallForm.ADOQuery1.SQL.Add('insert into FootBall..MoneyType(money_id,money_name,money_sname,change_rate) values(1, '''+sMoney_name+''', '+sMoney_sname+''','+fChange_rate+''')');就是了,何必这么兴师动众。
#9
楼上的说得对,SQLSERVER支持变量的,不用参数也行!
#1
执行后提示:无法将NULL值插入列'money_name',表'football.dbo.MoneyType';该列不允许为空值。INSERT失败。
可每个值都有输入呀,没有空的值呀。
可每个值都有输入呀,没有空的值呀。
#2
首先,你的数据库的有些字段是不允许为空的;
其次,你的SQL语句中用了变量参数作为输入值(如::sMoney_name, :sMoney_sname, :fChange_rate),那你必须用ADOQuery1.Parameters.ParamByName('sMoney_name').value:=sMoney_name指定参数的值,否则程序执行时会将其当空值处理;(这样就多此一举了)
其次,你的SQL语句中用了变量参数作为输入值(如::sMoney_name, :sMoney_sname, :fChange_rate),那你必须用ADOQuery1.Parameters.ParamByName('sMoney_name').value:=sMoney_name指定参数的值,否则程序执行时会将其当空值处理;(这样就多此一举了)
#3
给你段程序,如果去掉有标识的那两句,数据库只有插入空行。
var
a1,b1,sqlstr:String;
begin
a1:='ss';
b1:='yy';
sqlstr:='Insert into aa (aa,bb) values (:a1,:b1)';
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add(sqlstr);
ADOQuery1.Parameters.ParamByName('a1').value:=a1; //去掉
ADOQuery1.Parameters.ParamByName('b1').value:=b1; //去掉
ADOConnection1.BeginTrans;
ADOQuery1.ExecSQL;
ADOConnection1.CommitTrans;
end;
var
a1,b1,sqlstr:String;
begin
a1:='ss';
b1:='yy';
sqlstr:='Insert into aa (aa,bb) values (:a1,:b1)';
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add(sqlstr);
ADOQuery1.Parameters.ParamByName('a1').value:=a1; //去掉
ADOQuery1.Parameters.ParamByName('b1').value:=b1; //去掉
ADOConnection1.BeginTrans;
ADOQuery1.ExecSQL;
ADOConnection1.CommitTrans;
end;
#4
dmFootBallForm.ADOQuery1.ExecSQL;
在这段代码前面加入
dmFootBallForm.parameties.paramByName('smoney_name'):=你所要传的值,
...
三个变量都要这样加,
在这段代码前面加入
dmFootBallForm.parameties.paramByName('smoney_name'):=你所要传的值,
...
三个变量都要这样加,
#5
你没有给参数赋值的
dmFootBallForm.ADOQuery1.SQL.Add('insert into FootBall..MoneyType(money_id,money_name,money_sname,change_rate) values(1, :sMoney_name, :sMoney_sname, :fChange_rate)');
//这里应该给参数的赋值的
parameters.ParamByName(sMoney_name).value:=sMoney_name;
parameters.ParamByName(sMoney_sname).value:=sMoney_sname;
parameters.ParamByName(fChange_rate).value:=fChange_rate;
dmFootBallForm.ADOQuery1.ExecSQL;
dmFootBallForm.ADOQuery1.SQL.Add('insert into FootBall..MoneyType(money_id,money_name,money_sname,change_rate) values(1, :sMoney_name, :sMoney_sname, :fChange_rate)');
//这里应该给参数的赋值的
parameters.ParamByName(sMoney_name).value:=sMoney_name;
parameters.ParamByName(sMoney_sname).value:=sMoney_sname;
parameters.ParamByName(fChange_rate).value:=fChange_rate;
dmFootBallForm.ADOQuery1.ExecSQL;
#6
应该是dmFootBalForm.adoQuery1.parameties.paramByName('sMoney_name'):=你所要传的值,
#7
如果用存储过程,应该如何实现以上这段代码要实现的目的呢,请朋友帮着写一段。谢谢!
#8
直接用dmFootBallForm.ADOQuery1.SQL.Add('insert into FootBall..MoneyType(money_id,money_name,money_sname,change_rate) values(1, '''+sMoney_name+''', '+sMoney_sname+''','+fChange_rate+''')');就是了,何必这么兴师动众。
#9
楼上的说得对,SQLSERVER支持变量的,不用参数也行!