Страница 9 из 13
Re: Diesel Pascal
Добавлено: 11.02.2016 08:43:29
*Rik*
TBlockSerial добавил, но все методы класса добавить не удалось т.к. некоторые работают с буферами через указатель, в системе указателей нет, не знаю, будет ли польза о него в таком виде, сам им не пользуюсь.
IBX обновил, в нем на fpc 3 обнаружился грандиозный косяк. TIBStringField.SetAsString вызывает метод базового класса из модуля dp TStringField.SetAsString, при переходе на fpc 3 "родительский" метод начал калечить данные. На данный момент пришлось обойтись без него, заменил исправленной конструкцией...
Re: Diesel Pascal
Добавлено: 22.04.2016 13:15:00
ogorodov
Привет Rik ... Попробовал твои последние компоненты IBX 30
Выдает Exeption: lc_ctype=UTF8 invalid charset name in DBParam
С компонентами прошлой версии такой беды небыло ... с WIN1251 работает нормально
Глянь промеж дела в чем проблема.
Re: Diesel Pascal
Добавлено: 22.04.2016 18:01:20
*Rik*
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...
Re: Diesel Pascal
Добавлено: 25.04.2016 08:01:20
ogorodov
Да все верно ... FireBird 1.5
Подскажи пожалуйста в каком месте происходит запрос по кодировке ... чтобы принудительно кодировку устанавливать без запроса
Чтобы долго самому в сырцах долго не разбираться.
Re: Diesel Pascal
Добавлено: 25.04.2016 09:19:43
*Rik*
ogorodov писал(а):Да все верно ... FireBird 1.5
Подскажи пожалуйста в каком месте происходит запрос по кодировке ... чтобы принудительно кодировку устанавливать без запроса
Чтобы долго самому в сырцах долго не разбираться.
Пакет IBExpress, модуль IBDatabase, процедуру TIBDataBase.LoadCharSize пока временно можно привести к такому виду, должно работать:
Код: Выделить всё
procedure TIBDataBase.LoadCharSize(CharSetName: string);
begin
if not Connected then Exit;
FCharLength := 4;
FCharSetID := 4;
end;
Re: Diesel Pascal
Добавлено: 25.04.2016 12:38:12
ogorodov
Спасибо Rik ... в таком варианте заработало ...
Re: Diesel Pascal
Добавлено: 24.11.2016 11:31:40
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у, пофиксить это в своих сборках. (И проверить ссылки на загрузки на сайте). Заранее спасибо!
Re: Diesel Pascal
Добавлено: 24.11.2016 11:39:37
*Rik*
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, баг воспроизводится?
Re: Diesel Pascal
Добавлено: 24.11.2016 11:52:53
v-t-l
Именно в Lazarus и удалось его вычислить.
После замены под Lazarus 1.6.2 rUnknown FPC 3.0.0 x86_64-linux-gtk 2 в структуре
на
тестовое приложение заработало нормально.
Re: Diesel Pascal
Добавлено: 24.11.2016 11:55:23
*Rik*
v-t-l писал(а):Именно в Lazarus и удалось его вычислить.
После замены под Lazarus 1.6.2 rUnknown FPC 3.0.0 x86_64-linux-gtk 2 в структуре
на
тестовое приложение заработало нормально.
А если на PtrInt заменить?
Re: Diesel Pascal
Добавлено: 24.11.2016 12:59:51
v-t-l
*Rik* писал(а):А если на PtrInt заменить?
Работает, но мне кажется, идеологически

правильнее будет
SizeInt, ведь
be_pid - это номер процесса, а не его адрес.
Re: Diesel Pascal
Добавлено: 24.11.2016 14:15:08
*Rik*
Я движок пересобрал, надо как-то сообществу разработчиков ZEOS сообщить, чтоб в следующей версии исправили..
Re: Diesel Pascal
Добавлено: 24.11.2016 14:29:30
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
Re: Diesel Pascal
Добавлено: 24.11.2016 14:40:02
*Rik*
Re: Diesel Pascal
Добавлено: 25.11.2016 08:25:59
v-t-l
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.