Delphi SAP SAP Functions DELLIMITER突然忽略了?

slwdgvem  于 2023-08-04  发布在  其他
关注(0)|答案(3)|浏览(134)

我有一个旧的 Delphi 应用程序,它使用SAP ActiveX SAPFunctions

var
TmpSAPFunctions: TSAPFunctions;
...
begin
...
TmpSAPFunctions.RemoveAll;
Funct:=TmpSAPFunctions.Add('RFC_READ_TABLE');
Funct.Exports('QUERY_TABLE').Value:='JEST';
Funct.Exports('DELIMITER').Value:=',';

字符串
然后,我在 Delphi 2010中重新编译了应用程序,但是奇怪的事情发生了。我不再得到逗号分隔的CSV数据,而是数据似乎是FWV(固定宽度值)
我只是在更新应用程序的其他部分,所以我对SAP编程并不太熟悉,但我从搜索网络中了解到CSV模式(允许使用分隔符)应该是默认的?
我不明白从D 6到2010的变化如何可以有任何不同时,在目标/主机系统上的ActiveX是相同的。

tpxzln5u

tpxzln5u1#

我认为你的回答是对的。单个字符“字符串”被解释为Char,例如“A”存储为#65。这存储在变体中。变体是一个变体记录,因此如果在该变体中查询字符串,它将返回“65”,SAP例程将选择该字符串的第一个字符。
所以你可以这样做:

Funct.Exports('DELIMITER').Value:=string(',');

字符串
或者是

Funct.Exports('DELIMITER').Value:=','#0; // makes ',' a string.

erhoui1w

erhoui1w2#

嗨,我建议你从GSsoft获得一个完全支持Unicode的SAPx的更新版本,你需要根据你的ap是否启用Unicode来重新生成 Package 器类
GS-soft的下载链接是here
最好的问候

0s7z1bwu

0s7z1bwu3#

使用字符串作为分隔符,如下所示:函数导出('DELIMITER')。值:='12345'; SAP引擎选择第一个字符作为分隔符,此处为“1”
当使用单字符值作为分隔符时(假设),会发生以下情况:CR(Ascii 13)变为“1”,(Ascii 44)变为“4”:(Ascii 58)变成“5”;(Ascii 59)变成“5”X(Ascii 88)变成“8”Z(90)变成“9”
因此,我们可以得出结论,Delphi 2010/SAP-ActiveX/Delphi-variant-code转换例如。“;”将第一个ascii数值转换为“59”。SAP引擎然后选择第一个字符“5”。
...
不确定这是 Delphi 变体代码还是SAP ActiveX中的错误

相关问题