Метод таблицы (t: Table) ReadString вызывается, если надо прочесть значение поля типа Char (строка фиксированной длины). При этом, неверно определяется длина строки, которую надо указать в байтах, а вместо этого передаётся кол-во символов. Поскольку уникод, то длина байтового массива получается урезанной вдвое.

Умножил  LEN(str) на 2 и строки стали читаться правильно, с точностью до символа.

Вот правленный код:
## Код:
```
PROCEDURE (t: Table) ReadString (row, column: INTEGER; OUT str: ARRAY OF CHAR);
...
         Check(WinSql.SQLGetData(t.stmt, SHORT(column + 1), WinSql.SQL_C_WCHAR,
                                          SYSTEM.ADR(str), LEN(str)*2, len),

...               NIL, t.stmt, res);
```


P.S. И, конечно, лучше умножать не на 2, а на SIZE(CHAR). При этом, конечно, учитывается допущение, что размер CHAR соответствует коэффициенту SQL_C_WCHAR.

(модератор) прикреплено к существующей теме