|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
tDbf Ошибка: Division by zero при наличии Memo
Имеется база в firebird, требуется из нее выгрузить некоторые данные в .dbf-файлы, включая поля memo. Для этого использую компонент tDbf. В частности, поля типа memo заполняю через потоки следующим образом:
Код:
(Dbf1.FieldByName('P') as TBlobField).LoadFromStream(DBModule.query.CreateBlobStream(D BModule.query.FieldByName('P'),bmRead) as TStream); В процедуре procedure Код:
TMemoFile.WriteMemo(var BlockNo: Integer; ReadSize: Integer; Src: TStream); Код:
if ((bytesBefore + Src.Size + bytesAfter + RecordSize-1) div RecordSize) <= ((ReadSize + RecordSize-1) div RecordSize) then ( Src.Size - Src.Size) + RecordSize, то будет уже: -1994891087. Хотя если слагаемые поменять местами, то снова будет 0. Думал как-то избавиться от целочисленного деления, например сократив обе части на div RecordSize, но так ИМХО несколько нарушится логика программы. Также пытался сделать вместо div RecordSize: div ((Src.Size - Src.Size) + RecordSize), но все равно возникала та же ошибка. Код: Код:
rs: Int64; rs:= (Src.Size - Src.Size) + RecordSize; и замена условия на: if ((bytesBefore + Src.Size + bytesAfter + rs-1) div rs) <= ((ReadSize + rs-1) div rs) then Самое странное, что было время, когда программа нормально отрабатывала, но что-то пошло не так и перестала... SVN не юзаю, так что откатиться не могу. Также странно, что по запросу "Division by zero tdbf" гугл молчит, значит ошибка не распространенная. Может я неправильно потоки использую для переноса blob firebird в memo .dbf? Хотя пробую наполнять memo из файла таким образом: Код:
(Dbf1.FieldByName('P') as TBlobField).LoadFromFile('c:\ses.txt'); TDbf использовался не от Брусникина Игоря Викторовича (http://www.delphisources.ru/pages/so...comp_tdbf.html), а вот этот: http://tdbf.sourceforge.net/ Первый вроде как с memo работать не умеет. MAD: пользуемся тегами, или последуют санкции. Последний раз редактировалось M.A.D.M.A.N., 24.10.2013 в 09:11. |
#2
|
||||
|
||||
Явно переменные равны нулю, делай доп проверку.
— Как тебя понимать? — Понимать меня не обязательно. Обязательно меня любить и кормить вовремя. На Delphi, увы, больше не программирую. Рекомендуемая литература по программированию |
#3
|
||||
|
||||
Мне нравится эта часть кода:
Код:
(Src.Size - Src.Size) + RecordSize; Ключ находится в этом месте: Цитата:
Последний раз редактировалось Uniq!, 24.10.2013 в 09:45. |
#4
|
|||
|
|||
В чем было дело так и не разобрался, но вспомнил, что это началось после того как скопировал проект в новую директорию, чтобы откатиться ежели чего. Запустил проект из старой директории - все нормально отрабатывает и блобы записываются. И RecordSize равен нормальному числу. Причем не ясно, что было не так, так как все библиотеки и прочие БД ФБ имели относительные пути, сами компоненты переставлялись итд...
|
#5
|
||||
|
||||
Ну блин, чего тут не понятного то, у тебя после div переменные имеют значения 0, надо ставить точки остановка на эти места и проверять, почему там 0.
— Как тебя понимать? — Понимать меня не обязательно. Обязательно меня любить и кормить вовремя. На Delphi, увы, больше не программирую. Рекомендуемая литература по программированию |