关于' 'is not a valid integer value的问题

wanglei198929 2009-06-01 02:00:56
我在编写仓库管理系统,在插入数据的时候先对表中已有的商品进行判断,假如是空,则直接插入,假如插入商品已经存在,则把要插入商品的数量添加到已有的数量上去,下面是我的代码
with query1 do
begin
close;
sql.Clear;
sql.Add('insert into ruku(入库单号,商品名称,入库数量,入库日期,入库人,操作员)');//插入ruku表操作
sql.Add('values(:x1,:x2,:x3,:x4,:x5,:x6)');
ParamByName('x1').AsString:=edit1.Text;
ParamByName('x2').AsString:=edit2.Text;
ParamByName('x3').AsString:=edit3.Text;
ParamByName('x4').AsString:=edit4.Text;
ParamByName('x5').AsString:=edit5.Text;
ParamByName('x6').AsString:=edit6.Text;
try
execsql;
except
showmessage('数据库错误');
end;
end;
with query1 do
begin
close;
sql.clear;
sql.add('select * from kucun where 商品名称=:x2');//查询kucun表中商品是否存在
parambyname('x2').AsString:=edit2.Text;
open;
end;
k:=query1.Fields[0].AsString;
if trim(k)='' then//判断
with query1 do
begin
close;
sql.Clear;
sql.Add('insert into kucun(商品名称,商品数量)');
sql.Add('values(:x2,:x3)');
parambyname('x2').AsString:=edit2.Text;
parambyname('x3').AsString:=edit3.Text;
try
execsql;
except
showmessage('数据库错误');
end
end
else

pro_num:=strtoint(edit3.Text)+strtoint(query1.Fields[0].AsString);//这里我想把插入的商品数量edit3.text的值和查询到kucun表中商品数量相加,再把kucun表更新,单步调试在这里报错' 'is not a valid integer value,我不知道哪里除了问题
with query1 do
begin
close;
sql.Clear;
sql.Add('updata kucun')

end;


showmessage('数据已经保存');

query1.Close;
edit1.Clear;
edit2.Clear;
edit3.Clear;
edit4.Clear;
edit5.Clear;
edit6.Clear;
query2.Active:=false;
query2.Active:=true;
end;
...全文
12256 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
lishibi 2011-09-22
  • 打赏
  • 举报
回复
有问题
阿三 2009-06-01
  • 打赏
  • 举报
回复
sql.add('select 商品数量 from kucun where 商品名称=:x2');//查询kucun表中商品是否存在
把*改成你的字段名
k:=query1.Fields[0].AsString;
然后你在后面直接有K就可以了,当k或edit3.text为空时,你要给个默认值0。
yct0605 2009-06-01
  • 打赏
  • 举报
回复
另外你的错误提示,应该是在数据库操作时表的字段的类型判断的问题,比如数量是整型而你对数据库操作时采用了字符型那就会报错的。
yct0605 2009-06-01
  • 打赏
  • 举报
回复
{
具体代码没有看,根据你提供的内容,给你一个思路,
1.进行商品判断,如果商品存在则把数量添加进去。
2.如果商品不存在则把商品添加到表里面。
手写一点代码供参考}
with adoquery1 do
begin
close;
sql.clear;
sql.add('select * from 表名 where 商品名称='''+edit1.text+'''');
open;
end;
if adoquery1.recordcount>0 then{找到商品名称存在}
begin
with adoquery1 do
begin
close;
sql.clear;
sql.add('update 表名 set 数量 where 商品名='''+edit1.text+'''');
......
end;
end
else{商品不存在}
begin
close;
sql.clear;
sql.add('insert into 表名(字段名)values(字段对应的变量)');
......
end;

lyguo 2009-06-01
  • 打赏
  • 举报
回复
声明一个
var
sSql:String;

sSql := 'insert into ruku(入库单号,商品名称,入库数量,入库日期,入库人,操作员)'
with query1 do
begin
Sql.txt:= sSql;在此可设置断点来看SQL语句 包括中间的值是否正确。

不要用 ParamByName( 这样不容易找出错在什么地方。
7年 2009-06-01
  • 打赏
  • 举报
回复
pro_num:=strtoint(edit3.Text)+strtoint(query1.Fields[0].AsString);
确定edit3.text和query1.field[0].asstring中全部是数字?
hongqi162 2009-06-01
  • 打赏
  • 举报
回复
strtoint(edit3.Text)+strtoint(query1.Fields[0].AsString);//这里edit3.Text为空或query1.Fields[0].AsString为空导致strtoint出现异常
wanglei198929 2009-06-01
  • 打赏
  • 举报
回复
刚刚试过了,还是提示同样的错误,我前面只定义了2个变量
var

pro_num:integer;
k:string;
prabbit 2009-06-01
  • 打赏
  • 举报
回复
k:=query1.Fields[0].AsString;
if trim(k)='' then//判断
begin//增加一个
with query1 do
begin
close;
sql.Clear;
sql.Add('insert into kucun(商品名称,商品数量)');
sql.Add('values(:x2,:x3)');
parambyname('x2').AsString:=edit2.Text;
parambyname('x3').AsString:=edit3.Text;
try
execsql;
except
showmessage('数据库错误');
end;
end;//增加一个
end
else

pro_num:=strtoint(edit3.Text)+strtoint(query1.Fields[0].AsString);//这里我想把插入的商品数量edit3.text的值和查询到kucun表中商品数量相加,再把kucun表更新,单步调试在这里报错' 'is not a valid integer value,我不知道哪里除了问题
with query1 do
begin
close;
sql.Clear;
sql.Add('updata kucun')

end;
wanglei198929 2009-06-01
  • 打赏
  • 举报
回复
换了一种方法,已经解决问题了,主要是数据库中商品数量是char类型的问题,谢谢大家

2,497

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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