|
Ошибка в OO API Firebird 3.0
|
|||
---|---|---|---|
#18+
При выполнения операторов с входными параметрами если база данных с кодировкой символов UTF-8 функции getMessageLength(), getOffset(),getNullOffset() для поле1 CHAR и VARCHAR() выдают неправильные результаты. Например база данных : CREATE DATABASE 'UTF.FDB' PAGE_SIZE 4096; ALTER DATABASE SET DEFAULT CHARACTER SET UTF8; CREATE TABLE Owners ( ID SMALLINT PRIMARY KEY, NAME MYNAME VARCHAR(40) COLLATE UNICODE_CI_AI); Выполнение следующих операторов (Visual studio C++ и Embarcadero c++): IStatement* stmt = att->prepare(&status, tra, 0, "UPDATE Owners SET Name = ? WHERE ID = 0", SQL_DIALECT_CURRENT, IStatement::PREPARE_PREFETCH_METADATA); IMessageMetadata* meta = stmt->getInputMetadata(&status); char* buffer = new char[meta->getMessageLength(&status)]; //ошибка размер буфера 164 вместо нужных 44 //копирование требуемых символов в кодировке UTF-8 short* flag = (short*)&buffer[meta->getNullOffset(&status, 0)]; //ошибка 162 вместо 42 att->execute(&status, tra, 0, "UPDATE Owners SET Name = ? WHERE ID = 0", SQL_DIALECT_CURRENT, meta, buffer, NULL, NULL); //вызовет исключение "Malformed string" В Embarcadero Delphi при использовании firebird.pas из комплекта поставки Firebird ошибок в вышеуказанных функциях нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.02.2022, 10:31 |
|
Ошибка в OO API Firebird 3.0
|
|||
---|---|---|---|
#18+
undrey33, Нет там никаких ошибок ... |
|||
:
Нравится:
Не нравится:
|
|||
12.02.2022, 10:36 |
|
Ошибка в OO API Firebird 3.0
|
|||
---|---|---|---|
#18+
undrey33, Под каждый utf8 символ резервируется 4 байта в буфере. PS пользуйся тегом src - это невозможно читать. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.02.2022, 12:04 |
|
Ошибка в OO API Firebird 3.0
|
|||
---|---|---|---|
#18+
А почему тогда att:IAttacment; stmt:IStatment; meta:IMetadata; ... stmt:=att.prepare(Status,Tra,0,'UPDATE Owners SET Naame=? WHERE ID=0', SQL_Dialect_CURRENT,IStatement.PREPARE_PREFETCH_METADATA); meta:=stmt.getInputMetadata(Status); meta.getMessageLength(Status) даёт результат 44 для UTF-8 ... |
|||
:
Нравится:
Не нравится:
|
|||
12.02.2022, 13:44 |
|
Ошибка в OO API Firebird 3.0
|
|||
---|---|---|---|
#18+
Почему тогда stmt:=att.prepare(Status,tra,0,'UPDATE Owners SET Name=? WHERE ID-0', SQL_DIALECT_CURRENT,IStatement.PREPARE_PREFETCH_METADATA); meta:=stmt.getInputMetadata(Status); и meta.getMessageLength(Status); даёт результат 44 для UTF-8 ... |
|||
:
Нравится:
Не нравится:
|
|||
12.02.2022, 13:49 |
|
Ошибка в OO API Firebird 3.0
|
|||
---|---|---|---|
#18+
Потому что ты забыл указать connection charset или указал его однобайтовый. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
12.02.2022, 13:56 |
|
Ошибка в OO API Firebird 3.0
|
|||
---|---|---|---|
#18+
Указывал connected charset как UTF-8 или не указывал на C++ не работает а в Delphi всё работает. Если указывать же в строке соединения connected charset как WIN1251 то всё работает, но для этого случая не подходит. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.02.2022, 14:23 |
|
Ошибка в OO API Firebird 3.0
|
|||
---|---|---|---|
#18+
На этом ОО API работает isql и (самое главное) - старое API. То, что ты рассказываешь, без полного воспроизводимого примера с кодом - сказочки. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
12.02.2022, 14:35 |
|
Ошибка в OO API Firebird 3.0
|
|||
---|---|---|---|
#18+
Завтра сброшу реальный пример так как сегодня уже занят. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.02.2022, 15:53 |
|
Ошибка в OO API Firebird 3.0
|
|||
---|---|---|---|
#18+
На простом примере всё работает. Так что извиняюсь нет там никакой ошибки ... |
|||
:
Нравится:
Не нравится:
|
|||
13.02.2022, 09:53 |
|
Ошибка в OO API Firebird 3.0
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov На этом ОО API работает isql и (самое главное) - старое API. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.02.2022, 12:00 |
|
Ошибка в OO API Firebird 3.0
|
|||
---|---|---|---|
#18+
Мимопроходящий, да ... |
|||
:
Нравится:
Не нравится:
|
|||
14.02.2022, 12:00 |
|
|
start [/forum/topic.php?fid=40&tid=1559827]: |
0ms |
get settings: |
22ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
35ms |
get topic data: |
14ms |
get forum data: |
3ms |
get page messages: |
282ms |
get tp. blocked users: |
3ms |
others: | 376ms |
total: | 755ms |
0 / 0 |