请高手帮找错! (50分)

J

jomee

Unregistered / Unconfirmed
GUEST, unregistred user!
用access,我想像下面这样做,但出错了。怎么办?
with DataModule2.ADOQuery_Retail do
begin
close;
SQL.Clear;
SQL.Add('INSERT INTO 零售业务 (单号,日期,数量,商品编号,规格,商品名称,零售价,折扣,售价)');
SQL.Add('VALUES :)单号,:日期,:数量,(select 商品编号,规格,商品名称,零售价,折扣,售价 form BasData where ID=:ID))');
Parameters.ParamByName('数量').Value:=Edit1.Text;
Parameters.ParamByName('单号').Value:=DH;
Parameters.ParamByName('日期').Value:=Select_data;
Parameters.ParamByName('id').Value:=strid;
ExecSQL;
我的单号,日期,数量这三个参数是从EDIT.text或其它方法中得来的,其它参数是从表basdata中
得来的。应该怎么做呀?
 
改成下面的形式试试:
INSERT INTO 零售业务 (单号,日期,数量,商品编号,规格,商品名称,零售价,折扣,售价)
select :单号,:日期,:数量, 商品编号,规格,商品名称,零售价,折扣,售价
form BasData where ID=:ID
 
就是那3个括号来的奇!
 
应该是上面的形式,最多再在 select 后加个 distinct
再注意一下值的类型,是否要加引号,以及日期的表示。
 
去括号也不行呀,
TO:xianjun, 还错呀,提示
“语法错误(数据集丢失),发生在查询语句:售价 form BasData where ID=?“ 中
 
倒~~~拼写错误!!!!!
[red]form[/red]? 是 [blue]from[/blue] 吧:)
我也经常犯这样的错误:)
 
改成下面的形式试试:
INSERT INTO 零售业务 (单号,日期,数量,商品编号,规格,商品名称,零售价,折扣,售价)
values (select :单号,:日期,:数量, 商品编号,规格,商品名称,零售价,折扣,售价
from BasData where ID=:ID)
 
to:beta
哈哈,确实是错了。不过还是不行了,语法错误
用:INSERT INTO 零售业务 (单号,日期,数量,商品编号,规格,商品名称,零售价,折扣,售价)
select :单号,:日期,:数量, 商品编号,规格,商品名称,零售价,折扣,售价 from BasData where ID=:ID
提示“至少缺少一个参数”
用:INSERT INTO 零售业务 (单号,日期,数量,商品编号,规格,商品名称,零售价,折扣,售价)
values (select :单号,:日期,:数量, 商品编号,规格,商品名称,零售价,折扣,售价
from BasData where ID=:ID)
提示:错误发生在 select ? 表达式中。
 
代码:
     SQL.Add('VALUES (:单号,:日期,:数量,(select 商品编号,规格,商品名称,零售价,折扣,售价 form BasData where ID=:ID))');
      Parameters.ParamByName('数量').Value:=Edit1.Text;
      Parameters.ParamByName('单号').Value:=DH;
      Parameters.ParamByName('日期').Value:=Select_data;
      Parameters.ParamByName('id').Value:=strid;
//================================
把上边的改为
代码:
     SQL.Add('VALUES (select '+quotedstr(DH)+',#Select_data#,'+Edit1.Text+',商品编号,规格,商品名称,零售价,折扣,售价 form BasData where ID='+strid+')');
           ExecSQL;
 
改成下面的:
sql.add('INSERT INTO 零售业务 (单号,日期,数量,商品编号,规格,商品名称,零售价,折扣,售价)'
+ 'VALUES select '+edit1.text + ',' + dh + ',' + select_data + ',商品编号,规格,商品名称,零售价,折扣,售价 form BasData where ID='+strid);
引号自己加一下。
 
还是不行呀,
我的单号,日期,数量这三个参数是从EDIT.text或其它方法中得来的,其它参数是从表basdata中
得来的。应该怎么做呀?
 
你后面的select返回的结果集有几条记录?要确保只有一条记录呀!
 
是一个条记录呀。
 
加个 top 1 确保只有一条记录试一试?
 
//form BasData
BasData 里有‘商品编号,规格,商品名称,零售价,折扣,售价’?
 
用这个,去掉你的Values,如下:
sql.add('INSERT INTO 零售业务 (单号,日期,数量,商品编号,规格,商品名称,零售价,折扣,售价) '
+ ' select '+edit1.text + ',' + dh + ',' + select_data + ',商品编号,规格,商品名称,零售价,折扣,售价 form BasData where ID='+strid);
引号自己加一下,肯定可以的,我试了。
 
字符串拼接的方式肯定是要禁止的,从DBA的角度来说。
会不会是不支持中文变量名?
改成下面的变量换成其他英文字符试试
INSERT INTO 零售业务 (单号,日期,数量,商品编号,规格,商品名称,零售价,折扣,售价)
select :单号,:日期,:数量, 商品编号,规格,商品名称,零售价,折扣,售价
form BasData where ID=:ID
===>
INSERT INTO 零售业务 (单号,日期,数量,商品编号,规格,商品名称,零售价,折扣,售价)
select :N,:D, :M, 商品编号,规格,商品名称,零售价,折扣,售价
form BasData where ID=:ID
 
把运行时的中间结果贴出来,一看就明白了。showmessage(sql.text)
 
搞定,一条语句错了几十个地方。好丢脸,不过也学会了很多,谢谢beta,Walnut_Tom,yeath,卡色,你们说错误可能我都发生了。
 
呵呵,多写几次就知道了。
 
顶部