起步软件技术论坛-X3

 找回密码
 立即注册
搜索
查看: 203|回复: 9

【搞定】版本升级后的严重问题**

[复制链接]
发表于 2007-5-9 11:35:34 | 显示全部楼层 |阅读模式
开发环境是2603,运行环境是2625
开发环境运行正常,但是运行环境报错,(错误切图见附件)

错误源代码:
var sqlStr:String;
    ok:Integer;
    H:TTransactionHandle;
begin
     Query1.Close;
     sqlStr:='SELECT COUNT(PRICE_CODE)aa FROM TB_SAL_FORMULA WHERE PRICE_CODE=''05'' AND  (CUS_ID='''' or CUS_ID is null) AND STN_CODE=100';
     Query1.CommandText:=sqlStr;
     Edit6.Text:=sqlStr;
     Query1.Execute;
     Query1.Open;
     if (Query1.FieldByName('aa').AsString='') or (SysUtils.StrToInt(Query1.FieldByName('aa').AsString)<1) then
     begin
     DataSetBroker1.DataSet.Open;
     DataSetBroker1.DataSet.Insert;
     DataSetBroker1.DataSet.FieldByName('FORMULA_DES').AsString:=Edit1.Text;
     DataSetBroker1.DataSet.FieldByName('FORMULA_OPER').AsString:=Edit2.Text;
     DataSetBroker1.DataSet.FieldByName('FORMULA_UDATE').AsString:=Edit3.Text;
     DataSetBroker1.DataSet.FieldByName('FORMULA_AUDI_PER').AsString:=Edit4.Text;
     DataSetBroker1.DataSet.FieldByName('FORMULA_AUDI_DATE').AsString:=Edit5.Text;
     DataSetBroker1.DataSet.FieldByName('REMARK').AsString:=Memo1.Text;
     DataSetBroker1.DataSet.FieldByName('FORMULA_NM').AsString:='统一中转公式:'+temp_Str;
     DataSetBroker1.DataSet.FieldByName('PRICE_CODE').AsString:='05';
     DataSetBroker1.DataSet.FieldByName('STN_CODE').AsString:='100';
     DataSetBroker1.DataSet.ApplyUpdates;

     JsDialogs.ShowMsg('统一中转价格公式添加成功!','提示');
     end
     else
     begin
         DataSetBroker1.DataSet.Locate('FORMULA_ID',GSBH,[]);
         Refresh_Find(Sender);
         if (DataSetBroker1.DataSet.FieldByName('FORMULA_AUDI_PER').AsString<>'') AND (DataSetBroker1.DataSet.FieldByName('FORMULA_AUDI_DATE').AsString<>'') then
         begin
             JsDialogs.ShowMsg('该公式被审核过,不能修改!','修改失败');
         end
         else
         begin
             ok:=JsDialogs.QuestionBox('是否要修改统一中价格公式吗?','提示',2);
             if ok=6 then
             begin
                 with InfoBrokerZGSGSXX.Info.DataSetByID('GSXX').Connection.Transaction do
                 begin
                 H:=Start(False);
                 try
                 sqlStr:='SELECT * from TB_SAL_FORMULA WHERE  PRICE_CODE=''05'' AND  (CUS_ID='''' or CUS_ID is null) AND STN_CODE=100';
                 Edit6.Text:=sqlStr;
                 Query1.Close;
                 Query1.Connection:=InfoBrokerZGSGSXX.Info.DataSetByID('GSXX').Connection;
                 Query1.CommandText:=sqlStr;
                 Query1.Execute;
                 Query1.Open;
                 //--------------------修改备份
                 InfoBrokerZGSGSXX.Info.DataSetByID('GSBF').Close;
                 InfoBrokerZGSGSXX.Info.DataSetByID('GSBF').Connection:=InfoBrokerZGSGSXX.Info.DataSetByID('GSXX').Connection;
                 InfoBrokerZGSGSXX.Info.DataSetByID('GSBF').Open;
                 InfoBrokerZGSGSXX.Info.DataSetByID('GSBF').Insert;
                 InfoBrokerZGSGSXX.Info.DataSetByID('GSBF').FieldByName('FORMULA_ID').AsString:=Query1.FieldByName('FORMULA_ID').AsString;
                 InfoBrokerZGSGSXX.Info.DataSetByID('GSBF').FieldByName('STN_CODE').AsString:=Query1.FieldByName('STN_CODE').AsString;
                 InfoBrokerZGSGSXX.Info.DataSetByID('GSBF').FieldByName('FORMULA_DES').AsString:=Query1.FieldByName('FORMULA_DES').AsString;
                 InfoBrokerZGSGSXX.Info.DataSetByID('GSBF').FieldByName('FORMULA_NM').AsString:=Query1.FieldByName('FORMULA_NM').AsString;
                 InfoBrokerZGSGSXX.Info.DataSetByID('GSBF').FieldByName('FORMULA_AUDI_PER').AsString:=Query1.FieldByName('FORMULA_AUDI_PER').AsString;
                 InfoBrokerZGSGSXX.Info.DataSetByID('GSBF').FieldByName('FORMULA_UDATE').AsString:=Query1.FieldByName('FORMULA_UDATE').AsString;
                 InfoBrokerZGSGSXX.Info.DataSetByID('GSBF').FieldByName('FORMULA_OPER').AsString:=Query1.FieldByName('FORMULA_OPER').AsString;
                 InfoBrokerZGSGSXX.Info.DataSetByID('GSBF').FieldByName('FORMULA_AUDI_DATE').AsString:=Query1.FieldByName('FORMULA_AUDI_DATE').AsString;
                 InfoBrokerZGSGSXX.Info.DataSetByID('GSBF').FieldByName('REMARK').AsString:=Query1.FieldByName('REMARK').AsString;
                 InfoBrokerZGSGSXX.Info.DataSetByID('GSBF').FieldByName('CUS_ID').AsString:=Query1.FieldByName('CUS_ID').AsString;
                 InfoBrokerZGSGSXX.Info.DataSetByID('GSBF').FieldByName('PRICE_CODE').AsString:=Query1.FieldByName('PRICE_CODE').AsString;
                 InfoBrokerZGSGSXX.Info.DataSetByID('GSBF').FieldByName('DEFAULT_ID').AsString:=Query1.FieldByName('DEFAULT_ID').AsString;
                 //备份类型 =0 修改
                 InfoBrokerZGSGSXX.Info.DataSetByID('GSBF').FieldByName('BFLX').AsString:='0';
                 InfoBrokerZGSGSXX.Info.DataSetByID('GSBF').ApplyUpdates;

                 sqlStr:='update TB_SAL_FORMULA set FORMULA_DES='''+Edit1.Text+''' ,'
                 +'FORMULA_OPER='''+Edit2.Text+''' ,FORMULA_UDATE=to_date('''+Edit3.Text+''''+','+ '''yyyy-MM-dd HH24:MI:SS'''+') ,'
                 +'REMARK='''+Memo1.Text+'''  '
                 +' WHERE  PRICE_CODE=''05'' AND (CUS_ID='''' or CUS_ID is null) AND STN_CODE=100';
                 Query1.Close;
                 Query1.Connection:=InfoBrokerZGSGSXX.Info.DataSetByID('GSXX').Connection;
                 Edit6.Text:=sqlStr;
                 Query1.CommandText:=sqlStr;
                 Query1.Execute;
                 Commit(H);
                 Except
                 Rollback(H);
                 InfoBrokerZGSGSXX.Info.DataSetByID('GSBF').Close;
                 InfoBrokerZGSGSXX.Info.DataSetByID('GSBF').Open;
                 InfoBrokerZGSGSXX.Info.DataSetByID('GSBF').Refresh;
                 JsDialogs.ShowMsg('统一中转价格公式修改成功!','提示');
                 end;
                 end;
             end;
         GSBH:='';
         end;
     end;
end;

Snap1.jpg

9.27 KB, 下载次数: 125

回复

使用道具 举报

发表于 2007-5-9 11:51:12 | 显示全部楼层
用2625德Studio连开发环境,看看错误定位在哪句话上了
回复 支持 反对

使用道具 举报

发表于 2007-5-9 11:58:07 | 显示全部楼层
Query1.Execute;
                 Query1.Open;

这个不要连着写,如果是select语句,就用Open
如果是update语句或者delete语句,就用execute
回复 支持 反对

使用道具 举报

发表于 2007-5-9 12:10:59 | 显示全部楼层
还有
                 InfoBrokerZGSGSXX.Info.DataSetByID('GSBF').Close;
                 InfoBrokerZGSGSXX.Info.DataSetByID('GSBF').Open;
                 InfoBrokerZGSGSXX.Info.DataSetByID('GSBF').Refresh;
既然close又Open了,就不用Refresh了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-5-9 12:27:28 | 显示全部楼层
是三楼和四楼的语句引发的错误吗?
回复 支持 反对

使用道具 举报

发表于 2007-5-9 13:36:54 | 显示全部楼层
应该是3楼造成的
回复 支持 反对

使用道具 举报

发表于 2007-5-9 14:53:18 | 显示全部楼层
楼主,问题搞定没有?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-5-9 15:12:36 | 显示全部楼层
是3楼问题,不过得一个一个改,为啥2603的没事?
回复 支持 反对

使用道具 举报

发表于 2007-5-9 15:42:28 | 显示全部楼层
我在2625版本上测试,结果是一条select * from tperson的sql语句如果是用TQuery.Execute的话,错误信息是:
ExecuteSQL error: The executeUpdate method must not return a result set.

不是1楼的错误
回复 支持 反对

使用道具 举报

发表于 2007-5-11 12:08:28 | 显示全部楼层
我这里分别用这两个版本,分别连接Oracle数据库和SQLServer数据库,结果如下:

2603版本 + Oracle 数据库   select * from tperson语句用TQuery.Execute来执行 不出错
2625版本 + Oracle 数据库   select * from tperson语句用TQuery.Execute来执行 不出错

2603版本 + SQL Server 数据库   select * from tperson语句用TQuery.Execute来执行 出错“ExecuteSQL error: The executeUpdate method must not return a result set.”
2625版本 + SQL Server 数据库   select * from tperson语句用TQuery.Execute来执行 出错“ExecuteSQL error: The executeUpdate method must not return a result set.”

结论:
  两个版本在两个数据库上执行的结果都是前后没有差异
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2025-1-9 16:51 , Processed in 0.040789 second(s), 19 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表