function OpenParam(paramin: TOciParam; paramout: TField) : boolean;
var BlobBuffer:TBlobField;
begin
try
OpenParam:=true;
if paramout.IsBlob
then begin
BlobBuffer.Create(nil);
BlobBuffer.NewValue:=paramout.Value;
paramin.AssignField(BlobBuffer);
BlobBuffer.Free;
end
else paramin.AssignField(paramout);
except
OpenParam:=false;
end;
end;
InterBase и Oracle
Требуется переносить данные из полей InterBase в поля Oracle, В ТОМ ЧИСЛЕ И BLOB.
Я решил задачу так, но:
Код:
В ней, при любом поле кроме Blob всё работает нормально, но если Blob, то начинается:
во первых оказывается создаваться BlobBuffer, выдовая ошибку адрисации при первом же обращении (именно при обращении, в Create он так и не входит, я проверял)
во вторых переноситься значение поля отказывается из-за внутрених проверок TOciParam.
Собственно вся проверка paramout.IsBlob делалась из за второго пункта.
Если просто написать value:=value или Assign или AssignField, то при выполнении запроса возникает ошибка т.к. поля переносятся, как обычные, а это нелзя.
TOciParam параметр в запросе, компонентов Oracle, Арефьева.
TField поле в запросе, компонентов InterBase.
Сзаранее спасибо.:)
-ты обращаешься не к классу объекта при создании (Create), а к (якобы) его экземпляру, который еще не существует, а указывает хз на какой адрес (в том числе и nil)...
Чтобы исправить эту ошибку трэба делать
BlobBuffer := TBlobField.Create(nil), но работать скорее всего твоя реализация не будет.
Советую использовать на входе TField и для переноса BLOBа TBLOBStream, тогда можно будет использовать данную функцию для разных СУБД.