Исходные данные:
1. среда разработки: Borland c++ 6
2. версия fibplus: 6.5
3. база: firebird 2.0...
4. таблица в бд со след полями:
a. id типа integer ( первичный ключ - автоинкремент)
b. name типа Varchar(40) ( кодировка WIN1251)
c. timeCreated типа TimeStamp ( значение по умолчанию - NOW)
d. descr типа Blob ( SUB_TYPE 1 SEGMENT SIZE 400 значение по умолчанию - NULL)
5. Исполизуемые компоненты:
1. FibPlus: TpFIBDataBase, TpFIBTransaction (2шт - чтение и запись), TpFIBDataSet
2. WIN32: TRichEdit
6. SQL запросы в DataSet:
a. Insert
INSERT INTO TYPE_CONV(
NAME,
TIMECREATED,
DESCR
)
VALUES(
:NAME,
:TIMECREATED,

)
b. Update
UPDATE TYPE_CONV
SET
NAME = :NAME,
TIMECREATED = :TIMECREATED,
DESCR =

WHERE TYPE_ID = :OLD_TYPE_ID
c. Refresh
SELECT
NAME,
TIMECREATED,
DESCR
FROM
TYPE_CONV
WHERE
TYPE_CONV.TYPE_ID = :OLD_TYPE_ID
7. Это тестовая программа
Описание проблемы:
1. При выполнении такого кода все проходит нормально:
DataSet1->Insert();
DataSet1->FieldByName("NAME")->AsString = "Пробник1";
DataSet1->Post();
Т.е. в таблицу данные записываются.
2. Однако, при выполнении такого кода - вылетает ошибка, но данные в таблицу записываются (name - нормально , а blob какой то бред):
DataSet1->Insert();
DataSet1->FieldByName("NAME")->AsString = "Пробник";
TMemoryStream* memStream = new TMemoryStream();
try
{
RichEdit1->Lines->SaveToStream(memStream);
memStream->Position = 0;
((TFIBBlobField*)DataSet1->FieldByName("DESCR"))->LoadFromStream(memStream);
}
__finally
{
delete memStream;
}
DataSet1->Post();
Данная ошибка вылезает после выполнения DataSet1->Post();
Текст ошибки:
Project Project1.exe raised exception class EFIBInterBaseError with message 'mainForm.ReadTransaction:
Unsuccessful execution caused by system error that does not preclude succesful execution of subsequent statements. Invalid transaction handle (expecting explicit transaction start).
Заранее спасибо!