新开问题(insert into怎么提式语句错误)(200分)

  • 主题发起人 主题发起人 ddw
  • 开始时间 开始时间
D

ddw

Unregistered / Unconfirmed
GUEST, unregistred user!
下面的句子错吗(总提示insert into语句语法错误)

procedure TForm2.Button1Click(Sender: TObject);
begin
form2.ADOTable1.Open;
Adoquery1.Close;
adoquery1.SQL.Clear;
adoquery1.SQL.Add('insert into 总表(D1,D2,D3,D4,D5,D6,D7,D8,D9,D10,D11,D12,D13,D14,D15,D16,D17,D18,D19,D20,D21,D22,D23,D24,D25,D26,D27,D28,D29,D30,D31,D32,D33,D34,D35,D36,D37,D38,D39,D40,D41,D42,D43,D44,D45,D46,D47,D48),');
adoquery1.sql.Add('SUM(CASE 地区代码 WHEN D01 THEN 数量 ELSE 0 END) AS D01,');
adoquery1.SQL.Add('SUM(CASE 地区代码 WHEN D02 THEN 数量 ELSE 0 END) AS D02,');



adoquery1.SQL.Add('SUM(CASE 地区代码 WHEN D47 THEN 数量 ELSE 0 END) AS D47,');
adoquery1.sql.Add('SUM(CASE 地区代码 WHEN D48 THEN 数量 ELSE 0 END) AS D48,');
ADOQUERY1.SQL.Add('FROM 各地车总数量 C , 车型代码 A');
Adoquery1.SQL.Add('c.月份<12');
Adoquery1.SQL.Add('AND A.车型代码 *= C.车型代码');
Adoquery1.SQL.Add('GROUP BY a.车型代码');
Adoquery1.ExecSQL;

end;

 
D48),'
改为 D48) select'


-----
http://www.8421.org
 
够愚蠢
居然把select给弄掉了

但是现在又出现”语法错误(操作符丢失)在查询表达式‘SUM(CASE 地区代码 WHEN D01 THEN 数量 ELSE 0 END)‘中
 
是不是应该这样写
SUM(CASE 地区代码 WHEN ‘D01’ THEN 数量 ELSE 0 END)//在d01外有个单引号。
原来在sql sever中是这样写的,
但是加上sql.add('SUM(CASE 地区代码 WHEN D01 THEN 数量 ELSE 0 END)')如果在D01上加单引号,就提示错误

就不能用了
 
access数据库不支持子查询(欠套查询),你的sql估计只有在sql server里才能执行
 
to qdyoung
不能把,这样对我的打击可太大了,这几个语句我还是好不容易问出来了。

如果有空,帮我看看
http://www.delphibbs.com/delphibbs/dispq.asp?LID=1178360
虽然已经结束了,但是还是请你帮帮忙。
看看该怎么写成能在delphi里面运行的。
 
'D01' 改为 ''D01''
试试,字符串里面的单引号要用两个
 
to qdyoung :
也不行啊,还是那句提示。[:(]
 
什么叫操作符丢失啊,没看到缺啥啊
 
adoquery1.sql.Add('SUM(CASE 地区代码 WHEN ''D01'' THEN 数量 ELSE 0 END) AS D01,');
这里面sum那块缺什么操作符阿??
 
CASE 地区代码 WHEN ''D01'' THEN sum(数量) ELSE 0 END
 
access肯定支持不了 case ... then
 
to 完颜康
结果还是那句话,语法错误(操作符丢失)。
to qdyong
那那种数据库支持delphi的这种操作阿
 
sql server,sybase
oracle也可以,不过语法不一样
 
to qdyong,我刚才换成了sql sever的数据库,结果倒不提示sum那里出错了,
现在提示改为在from附近有语法错误。

from附近的语句为
adoquery1.sql.Add('SUM(CASE 地区代码 WHEN D48 THEN 数量 ELSE 0 END) AS D48,');
ADOQUERY1.SQL.Add('FROM 各地车总数量 C , 车型代码 A');
Adoquery1.SQL.Add('c.月份<12');
Adoquery1.SQL.Add('AND A.车型代码 *= C.车型代码');
Adoquery1.SQL.Add('GROUP BY a.车型代码');
Adoquery1.ExecSQL;
(以上sql的语句,在sql sever2000中的查询分析其中,可是能执行的阿。)
另外,将来要是给别人用这套软件的时候,难道我还要在给他按一个sql sever2000吗,我怕他们的机器跑不起来。

 
Adoquery1.SQL.Add('c.月份<12');
改为
Adoquery1.SQL.Add('where c.月份<12');

Adoquery1.SQL.Add('AND A.车型代码 *= C.车型代码');
改为
Adoquery1.SQL.Add('AND A.车型代码 <> C.车型代码');
 
现在from附近的问题已经解决,因为在上一行sum那里最后不应该有逗号,但是又出现新问题。
在“第51行,"附近出现错误,那个第51行。??程序里,没看出来错阿。

ADOTable1D32: TIntegerField;(这是51行的句子)和别人没什么差别。
那什么51行,表里面???
 
第51行语法错误,不懂
 
如果要是sql 语句的第51行错误的话,那好像应该是这行
Adoquery1.SQL.Add('Where C.月份<12');
 
把你的sql先在查询分析器里面运行吧,语法错误就是语法错误,与delphi没有关系
c有没有月份字段?
 
后退
顶部