急,大哥给我说一下,这是怎么回事?

cwg789 2003-08-22 01:44:13
我做一个数据库更新的程序,我想在Edit2中输入增加的Quantity(数量),但是编译能够通过,但是白执行时,就说我的nTemp附近有错误,请问各位高人,这是怎么回事,以下是我的代码
var
nTemp: Integer;
begin
nTemp := StrToInt(Edit2.text);
Query1.Close;
Query1.SQL.Clear;
Query1.SQL.Add('Update stock ');
query1.SQl.Add('set Quantity = Quantity + nTemp');
query1.SQl.Add('where PartName = '''+ edit1.Text+'''');
query1.SQl.Add('AND ProductName = '''+ edit3.Text+'''');
...全文
71 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
zjqyb 2003-08-22
  • 打赏
  • 举报
回复
with Query do
begin
Close;
SQL.Clear;
sql.Add(Format('Update stock set Quantity = Quantity +%s',[Edit2.text]));
sql.Add('where PartName = '''+ edit1.Text+'''');
SQl.Add('AND ProductName = '''+ edit3.Text+'''');
end;
MichealLee 2003-08-22
  • 打赏
  • 举报
回复
语法错了。

nTemp属于delphi的变量,你写到sql string中去了。

修改这一句:query1.SQl.Add('set Quantity = Quantity + nTemp');

--改为:query1.SQl.Add('set Quantity = Quantity '''+ nTemp+'''');
wdsimon 2003-08-22
  • 打赏
  • 举报
回复
修正,上面应为:showmessage('edit2存在非法字符!');
wdsimon 2003-08-22
  • 打赏
  • 举报
回复
1、写个函数检查一下EDIT1的值是否全部是数字:
如返回结果为FALSE,则存在非法字符
function TForm1.checknum(str: string): boolean;
var
i:integer;
s:string;
begin
s:=trim(str);
if s<>'' then result:=true else
begin
result:=false;
exit;
end;
for i:=1 to length(s) do
begin
if (ord(s[i])>57) or (ord(s[i])<48) then
begin
result:=false;
exit;
end;
end;
end;

2、你的代码:
var
ntmp:integer;
begin
if not checknum(edit2.Text) then
begin
showmessage('edit1存在非法字符!');
exit;
end;
ntmp:=StrToInt(Edit2.text);
with query1 do
begin
close;
sql.clear;
sql.add(''Update stock set Quantity = Quantity+:AA ');
sql.add('where PartName =:BB and ProductName = :CC ');
parameters[0].value:=ntemp;
parameters[1].value:=edit1.Text;
parameters[2].value:=edit3.Text;
ExecSQL;
end;
end;


td427 2003-08-22
  • 打赏
  • 举报
回复
在Where 和 And 前面加一个空格。编译时检查为合理字符串,但运行时为非法字符。
ZyxIp 2003-08-22
  • 打赏
  • 举报
回复
var
nTemp: Integer;
begin
nTemp := StrToInt(Edit2.text);
Query1.Close;
Query1.SQL.Clear;
Query1.SQL.Add('Update stock ');
query1.SQl.Add('set Quantity = Quantity + nTemp');
query1.SQl.Add('where PartName = '''+ edit1.Text+'''');
query1.SQl.Add('AND ProductName = '''+ edit3.Text+'''');
---------------------------------
var
nTemp: Integer;
SQLText:String;
begin
nTemp := StrToInt(Edit2.text);
SQLText:='将要执行的SQL语句用字符串组合成有效的';
Showmessage(SQLText);//显示出来看一看是否正确注意空格

With Query1 do
begin
Close;
SQL.Clear;
SQL.Add(SQLText);
ExecSQL;
end;
fhuibo 2003-08-22
  • 打赏
  • 举报
回复
F8跟踪一下就知道了
angle097113 2003-08-22
  • 打赏
  • 举报
回复
你出现问题的原因是在语句与与语句之间的空格的问题
有的语句之间没有空格 编译的时候计算机认为是STRING所以编译可以通过
但是执行的时候就会有错误
tiexinliu 2003-08-22
  • 打赏
  • 举报
回复
试试另一种感觉吧:
var
nTemp: Integer;
begin
nTemp := StrToInt(Edit2.text);
Query1.Close;
Query1.SQL.Clear;
Query1.SQL.Add('Update stock ');
query1.SQl.Add('set Quantity =Quantity+:var1');
query1.SQl.Add('where PartName = '''+ edit1.Text+'''');
query1.SQl.Add('AND ProductName = '''+ edit3.Text+'''');
Query1.ParamByName('var1').AsInteger:=ntemp;




PhilexPei 2003-08-22
  • 打赏
  • 举报
回复
query1.SQl.Add('set Quantity = Quantity + ' + inttostr(nTemp));
query1.SQl.Add(' where PartName = '''+ edit1.Text+'''');//where前面加空格
PhilexPei 2003-08-22
  • 打赏
  • 举报
回复
StrToInt(trim(Edit2.text));试试

2,497

社区成员

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

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