2000 Server
Delphi5+Patch+AdoPatch1+AdoPatch2
程序执行下列语句,有的时候出现'Invalid Column Name '零件名称''
重新执行又好使了
通常不出问题,我没办法了,求教大家
with QuerySum do begin
 Close;
 Sql.Clear;
 Sql.Add(Format('select Sum(合计成本),Sum(材料成本),Sum(原材料),Sum(外购外协),Sum(工时成本),Sum(工时总数),Count(*) from 零件生产成本表 where 产品型号=''%s'' and 统计标志!=0',[WholeName1]));
 Open;
 ff[1]:=Fields[0].AsFloat;
 ff[2]:=Fields[1].AsFloat;
 ff[3]:=Fields[2].AsFloat;
 ff[4]:=Fields[3].AsFloat;
 ff[5]:=Fields[4].AsFloat;
 ff[6]:=Fields[5].AsFloat;
 ff[7]:=Fields[6].AsFloat;
 Close;
 Sql.Clear;
 Sql.Add(Format('Declare @aa int set @aa=(Select Min(序号) from 零件生产成本表 where 产品型号=''%s'')',[WholeName1]));
 Sql.Add('Select * Into #TempTable from 零件生产成本表 where 序号=@aa');
 Sql.Add(Format('If Not Exists(Select 产品型号 from 整机生产成本表 Where 产品型号=''%s'')',[WholeName1]));
 Sql.Add(Format('insert 整机生产成本表 Select 序号,产品型号,零件名称,图号,件号,单位,数量,净重,备注,''%8.2f'',''%8.2f'',''%8.2f'',''%8.2f'',''%8.2f'',0,Null,0,0,''%8.2f'',''%8.0f'',整机编号,Null from 零件生产成本表 where 序号=@aa',[ff[1],ff[2],ff[3],ff[4],ff[5],ff[6],ff[7]]));
 Sql.Add(Format('Else Update 整机生产成本表 Set 合计成本=''%8.2f'',材料成本=''%8.2f'',原材料=''%8.2f'',外购外协=''%8.2f'',工时成本=''%8.2f'',总工时数=''%8.2f'',零件数量=''%8.0f'',',[ff[1],ff[2],ff[3],ff[4],ff[5],ff[6],ff[7]]));
 Sql.Add(Format('序号=a.序号,零件名称=a.零件名称,图号=a.图号,件号=a.件号,单位=a.单位,数量=a.数量,净重=a.净重,备注=a.备注,整机编号=a.整机编号 From #TempTable a Where 整机生产成本表.产品型号=''%s''',[WholeName1]));
 Sql.Add('Drop Table #TempTable');
 ExecSql;
 end;
 ShowMessage('整机统计完毕!');

解决方案 »

  1.   

    太长了。
    查看一下Sql.Text是不是正确。
      

  2.   

    sql.text 是正确的
    能够正确执行
    问题是偶尔会出现'Invalid Column Name'
    重新执行又好了,
    要是能捕获到问题,就好解决了
    不知道什么时候又出现问题
      

  3.   

    用SQL server的profiler调试一下你的SQL语句
      

  4.   

    我以前没装AdoPatch的时候也遇到奇怪问题(Ado),后来打补丁,就好了
    可是,我这个是打了补丁的,也这样子
      

  5.   

    Sql.Add(Format('insert 整机生产成本表 Select 序号,产品型号,零件名称,图号,件号,单位,数量,净重,备注,''%8.2f'',''%8.2f'',''%8.2f'',''%8.2f'',''%8.2f'',0,Null,0,0,''%8.2f'',''%8.0f'',整机编号,Null from 零件生产成本表 where 序号=@aa',[ff[1],ff[2],ff[3],ff[4],ff[5],ff[6],ff[7]]));
    这语句有问题: insert into tablename
      

  6.   

    要是还是不行的话,,你就用Delphi 6,式Delphi 7 吧,,,
      应该不会出现这问题
      

  7.   

    我觉得还不如把下面的sql写成存储过程。
      

  8.   

    sql.text 是正确的
    能够正确执行
    问题是偶尔会出现'Invalid Column Name'
    --------------------------------------------
    mrfanghansheng(***木鱼***) : 最好不要使用中文字段名
    不对吗 ? 为何你说不是问题所在 ?