Diesel Pascal
Модератор: Модераторы
- *Rik*
- постоялец
- Сообщения: 453
- Зарегистрирован: 19.04.2011 12:18:51
- Откуда: Урал
- Контактная информация:
TBlockSerial добавил, но все методы класса добавить не удалось т.к. некоторые работают с буферами через указатель, в системе указателей нет, не знаю, будет ли польза о него в таком виде, сам им не пользуюсь.
IBX обновил, в нем на fpc 3 обнаружился грандиозный косяк. TIBStringField.SetAsString вызывает метод базового класса из модуля dp TStringField.SetAsString, при переходе на fpc 3 "родительский" метод начал калечить данные. На данный момент пришлось обойтись без него, заменил исправленной конструкцией...
IBX обновил, в нем на fpc 3 обнаружился грандиозный косяк. TIBStringField.SetAsString вызывает метод базового класса из модуля dp TStringField.SetAsString, при переходе на fpc 3 "родительский" метод начал калечить данные. На данный момент пришлось обойтись без него, заменил исправленной конструкцией...
Привет Rik ... Попробовал твои последние компоненты IBX 30
Выдает Exeption: lc_ctype=UTF8 invalid charset name in DBParam
С компонентами прошлой версии такой беды небыло ... с WIN1251 работает нормально
Глянь промеж дела в чем проблема.
Выдает Exeption: lc_ctype=UTF8 invalid charset name in DBParam
С компонентами прошлой версии такой беды небыло ... с WIN1251 работает нормально
Глянь промеж дела в чем проблема.
- *Rik*
- постоялец
- Сообщения: 453
- Зарегистрирован: 19.04.2011 12:18:51
- Откуда: Урал
- Контактная информация:
ogorodov писал(а):Привет Rik ... Попробовал твои последние компоненты IBX 30
Выдает Exeption: lc_ctype=UTF8 invalid charset name in DBParam
С компонентами прошлой версии такой беды небыло ... с WIN1251 работает нормально
Глянь промеж дела в чем проблема.
FireBird какой версии используешь?
Сейчас, чтобы определить сколько места занимает 1 символ в байтах для указанной в lc_ctype кодировки, компоненты делают запрос к FireBird и он возвращает длину 1 символа в байтах, если FireBird в ответе ни чего не вернул, предполагается что FireBird ни чего не знает о указанной кодировке и в результате возникает указанное тобой исключение... Могу предположить, твоя версия FireBird не обладает соответствующим функционалом. У меня на FireBird 2.5 и 3.0 ошибка не воспроизводится.
Видимо придется ещё что-то придумать для определения длины 1 символа для указанной кодировки, без запроса к FireBird...
Да все верно ... FireBird 1.5
Подскажи пожалуйста в каком месте происходит запрос по кодировке ... чтобы принудительно кодировку устанавливать без запроса
Чтобы долго самому в сырцах долго не разбираться.
Подскажи пожалуйста в каком месте происходит запрос по кодировке ... чтобы принудительно кодировку устанавливать без запроса
Чтобы долго самому в сырцах долго не разбираться.
- *Rik*
- постоялец
- Сообщения: 453
- Зарегистрирован: 19.04.2011 12:18:51
- Откуда: Урал
- Контактная информация:
ogorodov писал(а):Да все верно ... FireBird 1.5
Подскажи пожалуйста в каком месте происходит запрос по кодировке ... чтобы принудительно кодировку устанавливать без запроса
Чтобы долго самому в сырцах долго не разбираться.
Пакет IBExpress, модуль IBDatabase, процедуру TIBDataBase.LoadCharSize пока временно можно привести к такому виду, должно работать:
Код: Выделить всё
procedure TIBDataBase.LoadCharSize(CharSetName: string);
begin
if not Connected then Exit;
FCharLength := 4;
FCharSetID := 4;
end;
Спасибо Rik ... в таком варианте заработало ...
Нашел баг в Zeos src/plain/ZPlainPostgreSqlDriver.pas
Объявления, по крайней мере, одной структуры не рассчитаны на что-нибудь, кроме 32 бит
Потому вылетает на постгрес-событиях на win64 и lin64.
Как, кстати, объявлен архитектуро-зависимый Integer?
Добавлено спустя 5 минут 28 секунд:
Да, большая просьба к Rikу, пофиксить это в своих сборках. (И проверить ссылки на загрузки на сайте). Заранее спасибо!
Объявления, по крайней мере, одной структуры не рассчитаны на что-нибудь, кроме 32 бит
Код: Выделить всё
TZPostgreSQLNotify = packed record
relname: PAnsiChar; { name of relation containing data }
be_pid: Integer; { process id of backend } // А должен под 64 бита быть равен Int64
payload: PAnsiChar; {additional data in notify}
end;Потому вылетает на постгрес-событиях на win64 и lin64.
Как, кстати, объявлен архитектуро-зависимый Integer?
Добавлено спустя 5 минут 28 секунд:
Да, большая просьба к Rikу, пофиксить это в своих сборках. (И проверить ссылки на загрузки на сайте). Заранее спасибо!
- *Rik*
- постоялец
- Сообщения: 453
- Зарегистрирован: 19.04.2011 12:18:51
- Откуда: Урал
- Контактная информация:
v-t-l писал(а):Нашел баг в Zeos src/plain/ZPlainPostgreSqlDriver.pas
Объявления, по крайней мере, одной структуры не рассчитаны на что-нибудь, кроме 32 битКод: Выделить всё
TZPostgreSQLNotify = packed record
relname: PAnsiChar; { name of relation containing data }
be_pid: Integer; { process id of backend } // А должен под 64 бита быть равен Int64
payload: PAnsiChar; {additional data in notify}
end;
Потому вылетает на постгрес-событиях на win64 и lin64.
Как, кстати, объявлен архитектуро-зависимый Integer?
Добавлено спустя 5 минут 28 секунд:
Да, большая просьба к Rikу, пофиксить это в своих сборках. (И проверить ссылки на загрузки на сайте). Заранее спасибо!
Иногда ошибки возникают в результате неудачного "прикручивания" компоненты к движку Дизель-Паскаль...
А если тестовое приложение сделать, в самом Lazarus, баг воспроизводится?
Именно в Lazarus и удалось его вычислить.
После замены под Lazarus 1.6.2 rUnknown FPC 3.0.0 x86_64-linux-gtk 2 в структуре на тестовое приложение заработало нормально.
После замены под Lazarus 1.6.2 rUnknown FPC 3.0.0 x86_64-linux-gtk 2 в структуре
Код: Выделить всё
be_pid: Integer;Код: Выделить всё
be_pid: Int64;- *Rik*
- постоялец
- Сообщения: 453
- Зарегистрирован: 19.04.2011 12:18:51
- Откуда: Урал
- Контактная информация:
v-t-l писал(а):Именно в Lazarus и удалось его вычислить.
После замены под Lazarus 1.6.2 rUnknown FPC 3.0.0 x86_64-linux-gtk 2 в структуренаКод: Выделить всё
be_pid: Integer;тестовое приложение заработало нормально.Код: Выделить всё
be_pid: Int64;
А если на PtrInt заменить?
*Rik* писал(а):А если на PtrInt заменить?
Работает, но мне кажется, идеологически
Спасибо!
Ссылки на странице http://visual-t.ru/download.html не все корректны:
TxDBF -> http://visual-t.ru/files/ibx.7z
Откомпилированный движок под Linux x64: Загрузить(tar.gz) -> http://visual-t.ru/files/exewindows64.7z
Ссылки на странице http://visual-t.ru/download.html не все корректны:
TxDBF -> http://visual-t.ru/files/ibx.7z
Откомпилированный движок под Linux x64: Загрузить(tar.gz) -> http://visual-t.ru/files/exewindows64.7z
- *Rik*
- постоялец
- Сообщения: 453
- Зарегистрирован: 19.04.2011 12:18:51
- Откуда: Урал
- Контактная информация:
v-t-l писал(а):Спасибо!
Ссылки на странице http://visual-t.ru/download.html не все корректны:
TxDBF -> http://visual-t.ru/files/ibx.7z
Откомпилированный движок под Linux x64: Загрузить(tar.gz) -> http://visual-t.ru/files/exewindows64.7z
Спасибо, исправил.
v-t-l писал(а):Нашел баг в Zeos src/plain/ZPlainPostgreSqlDriver.pas
Объявления, по крайней мере, одной структуры не рассчитаны на что-нибудь, кроме 32 битКод: Выделить всё
TZPostgreSQLNotify = packed record
relname: PAnsiChar; { name of relation containing data }
be_pid: Integer; { process id of backend } // А должен под 64 бита быть равен Int64
payload: PAnsiChar; {additional data in notify}
end;
Кстати, достаточно убрать из объявления packed record слово packed, и всё работает правильно и в 32 и в 64.
Добавлено спустя 34 минуты 17 секунд:
Тем более, что process id не превышает 32 бита ни в win64, ни в lin64.
