起步软件技术论坛-X3

 找回密码
 立即注册
搜索
查看: 437|回复: 12

急救:2144升级到X32617后出现的一些问题**

[复制链接]
发表于 2007-4-26 12:45:17 | 显示全部楼层 |阅读模式
我们用的数据库为ORACLE 10.2G;
升级后存储过程出错(2144中如用Database Express Engine 数据引擎,也报同样错误,只是2144中我们用了Oracle Specific数据引擎,请问X3中有此区别吗?):

我的测试代码如下:
procedure TKBBD1.TestOracleFnClick(Sender: TObject);
var
  loStoreProc: TStoredProc;
begin
  loStoreProc:=TStoredProc.Create(nil);
  //loStoreProc.ConnectionString := 'DATABASEURL=Biz:JEWIMPHARMAWAREHOUSESPACEStoredProcDB.Database'; //2144版本中的Oracle Specific数据引擎
  //loStoreProc.ConnectionString := 'DATABASEURL=Biz:JEWIMPHARMAWAREHOUSESPACEWareHouseDB.Database';  //Database Express Engine 数据引擎
  loStoreProc.ConnectionString := 'DATABASEURL=Biz:SYSTEMSYSTEM.DATABASE';
  try
    loStoreProc.StoredProcName :='F_GetFieldStyle';
    loStoreProc.Params.ParamByName('I_FieldName').AsString := 'INVCODE';
{上一句执行时,报错如下:
运行测试SPfunc的时候发生异常:Parameter 'I_FieldName' not found
类型:EDatabaseError。  }
    loStoreProc.Params.ParamByName('I_ReferTables').AsString := 'BD_INVENTORY';
    try
      loStoreProc.Execute;
      Edit1.Text := loStoreProc.Params.ParamByName('Result').AsString;
    except
      exception.Create('内部错误,调用存储过程F_GetFieldStyle(I_FieldName,I_ReferTables)出错!!');
    end;
  finally
    loStoreProc.Free;
  end;
end;

error.gif

5.3 KB, 下载次数: 180

回复

使用道具 举报

 楼主| 发表于 2007-4-26 15:12:11 | 显示全部楼层
UP,UP,UP
回复 支持 反对

使用道具 举报

发表于 2007-4-26 15:20:34 | 显示全部楼层
正在处理
回复 支持 反对

使用道具 举报

发表于 2007-4-27 10:56:58 | 显示全部楼层
错误是i_sql参数没有找到,是不是存储过程中用到了这个参数,但是程序中没有赋值呢?
把存储过程贴出来看看
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-4-27 15:48:18 | 显示全部楼层
不可能,这是2144中写的程序,升级到X3后才报的错,后来我写了一个独立的测试程序,也是如此:
我的测试代码如下: 其中用的存储过程'F_GetFieldStyle' 在上次传给你们的系统库中有
procedure TKBBD1.TestOracleFnClick(Sender: TObject);
var
  loStoreProc: TStoredProc;
begin
  loStoreProc:=TStoredProc.Create(nil);
  //loStoreProc.ConnectionString := 'DATABASEURL=Biz:\JEWIMPHARMA\WAREHOUSESPACE\StoredProcDB.Database'; //2144版本中的Oracle Specific数据引擎
  //loStoreProc.ConnectionString := 'DATABASEURL=Biz:\JEWIMPHARMA\WAREHOUSESPACE\WareHouseDB.Database';  //Database Express Engine 数据引擎
  loStoreProc.ConnectionString := 'DATABASEURL=Biz:\SYSTEM\SYSTEM.DATABASE'; //在2144中用Oracle Specific数据引擎不会出错,用Database Express Engine 数据引擎会报错,X3中始终报错

  try
    loStoreProc.StoredProcName :='F_GetFieldStyle';
    loStoreProc.Params.ParamByName('I_FieldName').AsString := 'INVCODE';
{上一句执行时,报错如下:
运行测试SPfunc的时候发生异常:Parameter 'I_FieldName' not found
类型:EDatabaseError。  }
    loStoreProc.Params.ParamByName('I_ReferTables').AsString := 'BD_INVENTORY';
    try
      loStoreProc.Execute;
      Edit1.Text := loStoreProc.Params.ParamByName('Result').AsString;
    except
      exception.Create('内部错误,调用存储过程F_GetFieldStyle(I_FieldName,I_ReferTables)出错!!');
    end;
  finally
    loStoreProc.Free;
  end;
end;

以上代码在X3中测试始终报错;
在2144中测试结果如下:用Oracle Specific数据引擎不会出错,用Database Express Engine 数据引擎会报错

把在X3中特别做的测试功能传给你们
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-4-27 15:54:43 | 显示全部楼层
把在X3中特别做的测试功能传给你们
传不上来。其实你就用上面的代码,加我上次传给你的系统库中的存储过程测试一下就行了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-4-28 08:52:33 | 显示全部楼层
UP,找到原因了吗?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-4-28 15:19:52 | 显示全部楼层
up,up,up! 注意,由于我还在用2144,所以,我的客户端用的是10.1G ,不知有无这方面的因素?
再问一下,你们那的测试结果如何?是否正常,还是也有问题?
回复 支持 反对

使用道具 举报

发表于 2007-4-28 15:41:26 | 显示全部楼层
找到问题了,
1、是因为 存储过程的名字都是大写的,你修改为“F_GETFIELDSTYLE”这个就可以了
2、loStoreProc.Params.ParamByName('Result').AsString;  不能用Result,需要修改为 loStoreProc.Params[0].AsString;
这样就可以了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-4-29 13:52:21 | 显示全部楼层
2144是不分大小写的,越升 限制 越多了,能改进成不分大小写吗?


对你的回复有疑问
loStoreProc.Params.ParamByName('Result').AsString;  不能用Result,需要修改为 loStoreProc.Params[0].AsString

我上面的代码是执行SP之后的一个返回值 的接收 ,Params[0].asstrng 代表返回值吗?
回复 支持 反对

使用道具 举报

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

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2025-1-8 05:58 , Processed in 0.053350 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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