Delphi 如何使用FireDAC从Sybase 16数据库返回结果参数?

Delphi 如何使用FireDAC从Sybase 16数据库返回结果参数?,delphi,firedac,delphi-10-seattle,Delphi,Firedac,Delphi 10 Seattle,我正在使用ODBC Express将一个用Delphi7编写的古老代码库更新为使用FireDAC将数据库连接到Delphi Seattle 10。目前,ODBC Express OEDataset组件指向存储的过程,并在设计时使用参数定义,包括从Sybase SPs的“Return”函数填充的@Result参数 如果我尝试对FireDAC的TFDStoredProc组件(在设计时定义参数)进行简单交换(进行最小调整),则在包含@Result参数(DataType=ftInteger,ParamT

我正在使用ODBC Express将一个用Delphi7编写的古老代码库更新为使用FireDAC将数据库连接到Delphi Seattle 10。目前,ODBC Express OEDataset组件指向存储的过程,并在设计时使用参数定义,包括从Sybase SPs的“Return”函数填充的@Result参数

如果我尝试对FireDAC的TFDStoredProc组件(在设计时定义参数)进行简单交换(进行最小调整),则在包含@Result参数(DataType=ftInteger,ParamType=ptResult)时会出现“无效参数类型”错误。如果没有@Result参数,存储过程可以正常执行,但是我无法访问“Return”值

我在ResourceOptions.UnifyParams、FetchItems.Items:=[fiMeta],ExecFunc而不是ExecProc,省略了@Result参数,等等


我肯定我错过了一些非常明显的东西,但我已经在我的桌子上敲了一天的头,试图弄明白这一点。有人有什么建议吗?

尽管看起来很奇怪,问题只是ptResult参数被添加为列表中的最后一个参数(这是使用ODBC Express完成的)。将@Result参数移动到第一个位置,并且仅移动到第一个位置,可以解决此问题。现在,我必须浏览一下文档,看看我在哪里漏掉了这个小贴士…

尽管看起来很奇怪,问题只是ptResult参数被添加为列表中的最后一个参数(这是使用ODBC Express完成的)。将@Result参数移动到第一个位置,并且仅移动到第一个位置,可以解决此问题。现在,我必须浏览一下文档,看看我在哪里漏掉了那个小道消息…

你看到了吗?-->谢谢你的信息,但不是我要找的。在Sybase中,SP的声明如下:
create procedure NewKy(InKy integer input,NewKy output)为
,其中NewKy是一个输出参数(ParamType:=ptOutput)。但是SP还有一个由返回RowCnt行定义的固有结果参数(ParamType:=ptResult)。这是我希望包含/获取的返回参数。在ODBC Express中,结果参数是在设计时在组件中定义的,但在FireDAC中似乎不起作用。您可能正在查找FDStoredProc.recordCount或.RowsAffected属性。在我的代码中,我还使用FDStoredProc.Params.ParamValues['@RETURN_VALUE'];但是我没有查看服务器上的sp是否声明@RETURN\u VALUEAlienHeadDiscs,您是否将该参数声明为ParamtType:=ptResult?您看到了吗?-->谢谢你的信息,但不是我要找的。在Sybase中,SP的声明如下:
create procedure NewKy(InKy integer input,NewKy output)为
,其中NewKy是一个输出参数(ParamType:=ptOutput)。但是SP还有一个由返回RowCnt行定义的固有结果参数(ParamType:=ptResult)。这是我希望包含/获取的返回参数。在ODBC Express中,结果参数是在设计时在组件中定义的,但在FireDAC中似乎不起作用。您可能正在查找FDStoredProc.recordCount或.RowsAffected属性。在我的代码中,我还使用FDStoredProc.Params.ParamValues['@RETURN_VALUE'];但是我没有查看服务器上的sp是否声明@RETURN\u VALUEAlienHeadDiscs,您是否将该参数声明为ParamtType:=ptResult?