Delphi SAP SAPFunctions DELIMITER вдруг игнорируется? - PullRequest
1 голос
/ 22 августа 2011

У меня есть старое приложение 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 (который позволяет использовать разделитель) должен быть по умолчанию?

Я не понимаю, как переход с D6 на 2010 может иметь какое-либо значение, если ActiveX в целевой / хост-системе одинаков.

Ответы [ 3 ]

2 голосов
/ 22 августа 2011

Я думаю, что вы правы в своем ответе. Один символ "строка" интерпретируется как Char, например «А» хранится как № 65. Это хранится в варианте. Вариант - это запись варианта, поэтому, если вариант запрашивается для строки, он возвращает «65», и процедура SAP выбирает первый символ этого.

Чтобы вы могли сделать:

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

или

Funct.Exports('DELIMITER').Value:=','#0; // makes ',' a string.
2 голосов
/ 22 августа 2011

Привет, я рекомендую вам получить обновленную версию SAPx от GSsoft, которая полностью поддерживает Unicode, вам нужно сгенерировать класс-оболочку на основе того, включен ли ваш код в Unicode или нет

ссылка для скачивания с GS-soft здесь

С наилучшими пожеланиями

1 голос
/ 22 августа 2011

Использование строки в качестве разделителя: . Funct.Exports ( 'DELIMITER') Значение: = '12345'; Движок SAP выбирает первый символ в качестве разделителя, здесь «1»

При использовании значений одинарного символа в качестве разделителя (как предполагается) происходит следующее: CR (Ascii 13) становится «1», (Ascii 44) становится «4»: (Ascii 58) становится «5»; (Ascii 59) становится «5» X (Ascii 88) становится «8» Z (90) становится «9»

Таким образом, мы можем сделать вывод, что Delphi2010 / SAP-ActiveX / Delphi-многоадресного кода преобразует, например, ";" сначала ascii-numeric-value, а затем "59". Затем движок SAP выбирает первый символ «5».

...

Не уверен, что это ошибка в коде варианта Delphi или SAP ActiveX

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...