Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
как записать в глобал данные без перекодирования?
|
|||
|---|---|---|---|
|
#18+
Усть некоторая последовательность байт, которую надо записать в глобал как есть, без перекодирования. Как этого добиться? Доступ осуществляется при помощи ActiveX из Delphi. Пробовал это делать так: в БД у одного из классов создал метод Код: plaintext 1. 2. 3. 4. При вызове из Delphi в глобал попадают искаженные данные. Пробовал менять тип второго параметра на %Binary. В этом случае в глобал записывается пустая строка. Подозреваю, что переход с Delphi на более другой язык программирования ничего не даст. Что посоветуете? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2010, 11:22 |
|
||
|
как записать в глобал данные без перекодирования?
|
|||
|---|---|---|---|
|
#18+
Внутри каше проблем не должно быть. Снаружи если смысл во что-нибудь перекодировать строку, а внутри каше перекодировать обратно. Тогда в глобале она будет как есть, без перекодирвоания. А какого типа искажения? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2010, 11:33 |
|
||
|
как записать в глобал данные без перекодирования?
|
|||
|---|---|---|---|
|
#18+
Hisbreht Victor , Не сталкивался с подобными проблемами, хотя связку ActiveX+Delphi используем регулярно. 1. Возможно у Вас Delphi 2009+, а там по умолчанию используются Unicode-строки. 2. Преобразуйте строку в соответствующую ей 16-ричную строку и передавайте в Cache. На стороне Cache нужно будет сделать обратное преобразование. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2010, 12:16 |
|
||
|
как записать в глобал данные без перекодирования?
|
|||
|---|---|---|---|
|
#18+
Hisbreht Victor, Передавайте двоичные данные через base64. Каше умеет декодировать (см. %SYSTEM.Encryption ), дельфи, наверняка, умеет кодировать в него ( первая ссылка ). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2010, 12:23 |
|
||
|
как записать в глобал данные без перекодирования?
|
|||
|---|---|---|---|
|
#18+
Hisbreht Victor, и еще, что говорит Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2010, 12:24 |
|
||
|
как записать в глобал данные без перекодирования?
|
|||
|---|---|---|---|
|
#18+
$zv говорит, что 32 бит 2009.1.3 Ситуация складывается следующая. Если параметром передаю AnsiString с данными, то сначала преобразует в уникод, потом в UTF-8. Не уверен, что преобразование происходит без потерь. Если используется WideString, то его просто преобразует в UTF-8 После преобразований и возвращения назад данные нечетной длины увеличиваются на 1 байт. Опять же, нет уверенности в том, что преобразования пройдут без потерь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2010, 13:35 |
|
||
|
как записать в глобал данные без перекодирования?
|
|||
|---|---|---|---|
|
#18+
Hisbreht Victor, Данные можно передать по TCP/IP каналу побайтно в CACHE читать тоже побайтно через R *C. Все должно пройти. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2010, 13:50 |
|
||
|
как записать в глобал данные без перекодирования?
|
|||
|---|---|---|---|
|
#18+
В итоге решил все передачей через сокет. Могу ошибаться, но, как мне кажется, это костыль. Было бы логично наличие типа параметра, который всегда передается без перекодирования (какой-нибудь binary). Я пробовал использовать %Binary, но в этом случае результат был вообще странным, из чего я заключил, что это не то, что я думал (я полагал, что это что-то вроде BLOB в других БД). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.12.2010, 21:22 |
|
||
|
как записать в глобал данные без перекодирования?
|
|||
|---|---|---|---|
|
#18+
Hisbreht Victor$zv говорит, что 32 бит 2009.1.3 Ситуация складывается следующая. Если параметром передаю AnsiString с данными, то сначала преобразует в уникод, потом в UTF-8. Не уверен, что преобразование происходит без потерь. Если используется WideString, то его просто преобразует в UTF-8 После преобразований и возвращения назад данные нечетной длины увеличиваются на 1 байт. Опять же, нет уверенности в том, что преобразования пройдут без потерь. Сделал тестовый код (BDS 2006): Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. Код: plaintext 1. 2. 3. 4. 5. Если тип Data изменить на %Binary, то начинаются проблемы: в Cache 5.0 приходит Unicode-строка, а в Cache 2009.1.5 - пустая строка. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.12.2010, 09:47 |
|
||
|
как записать в глобал данные без перекодирования?
|
|||
|---|---|---|---|
|
#18+
Hisbreht Victor, $zv вы так и не привели. Может быть, у вас Unicode-ная установка Cache? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.12.2010, 11:51 |
|
||
|
как записать в глобал данные без перекодирования?
|
|||
|---|---|---|---|
|
#18+
А мне кажется проблеммы в Delphi. Может он всегда перекодирует строку. А кастыль мне нравится больше. Я весь обмен гоню через TCP/IP. А VisM использую только для запуска сервера на CACHE. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.12.2010, 13:09 |
|
||
|
как записать в глобал данные без перекодирования?
|
|||
|---|---|---|---|
|
#18+
Hisbreht Victor С %Binary тоже всё работает: Код: plaintext 1. 2. 3. 4. 5. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.12.2010, 16:35 |
|
||
|
как записать в глобал данные без перекодирования?
|
|||
|---|---|---|---|
|
#18+
Alexey MaslovHisbreht Victor, $zv вы так и не привели. Может быть, у вас Unicode-ная установка Cache? Unicode. Но это дела, как мне кажется, не меняет. Если я правильно понимаю, то Cache при обращении через ActiveX всегда пытается перекодировать строку из кодировки "клиентской" в свою (В моем случае ANSI и UTF-16 в UTF-8). В принципе оно даже логично и часто даже полезно. В принципе проблема решаема разными способами (я уже решил), но мне все-таки представляется логичным, чтобы была возможность передать данные без преобразования в любом случае. Надо будет попробовать более свежие версии Cache. И, может быть, сработает конструкция, аналогичная следующей: Код: plaintext 1. 2. Насколько я понимаю, она должна сформировать данные, которые будут соответствовать типу %Binary в Cache. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.12.2010, 13:00 |
|
||
|
|

start [/forum/topic.php?fid=39&msg=36988716&tid=1557892]: |
0ms |
get settings: |
10ms |
get forum list: |
17ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
134ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
43ms |
get tp. blocked users: |
1ms |
| others: | 260ms |
| total: | 483ms |

| 0 / 0 |
