Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.04.09;
Скачать: CL | DM;

Вниз

TBlobField не записывается как NULL   Найти похожие ветки 

 
StriderMan ©   (2006-03-02 21:09) [0]

Доброго времени суток, уважаемые мастера!

Пишу на Delphi7, использую InterBase и компоненты IBExpress

проблема такая:


var
 fld: TBlobField
begin
 fld.Clear;
....


дальше делаем

 Transaction.CommitRetaining

 и в итоге в таблицу попадает не NULL а пустая строка

далее самое интересное!
ищем запросом TIBSQL эту запись, находит...

и в это поле в результате запроса попадает уже не пустая строка, а строка, содержащая текст "(Blob)"

Вопрос. Как записать в блоб null?


 
StriderMan ©   (2006-03-02 21:15) [1]

PS:

пробовал обNULLять по-всякому

fld.Clear;
fld.Value := NULL;
fld.SetData(nil);


 
Desdechado ©   (2006-03-02 21:16) [2]

> строка, содержащая текст "(Blob)"
это просто способ показа блоба в гриде


 
Desdechado ©   (2006-03-02 21:17) [3]

а как привязано это поле к датасету?
что в запросе стоит?


 
API   (2006-03-02 21:18) [4]

TBlobField не записывается как NULL <...> и в итоге в таблицу попадает не NULL а пустая строка

С какой целью Вы используете TBlobField для работы со строковыми полями?

и в это поле в результате запроса попадает уже не пустая строка, а строка, содержащая текст "(Blob)"

Как Вы это определили?


 
StriderMan ©   (2006-03-02 21:33) [5]

результаты я смотрю через утилиту IBExpert. в нем можно посмортеть БЛОБ в любом виде, в т.ч. как строку. Вот там-то и отображается пустая строка а не null.


> С какой целью Вы используете TBlobField для работы со строковыми
> полями?


один блоб используется для записи строки неограниченной длины, а другой - для картинок.


> а как привязано это поле к датасету?


для доступа к таблице используются в разных случаях либо TIBTable с полями, тогда как раз и проявляется эффект что вместо NULL записывается пустая строка,

либо TIBSQL, которым производится поиск в таблице по уникальному полю.
После поиска, поля из запроса переписываются в запрос типа UPDATE, в который и попадает злосчастный "Blob"


procedure TdmTableReport.FillParamsByDataQuery(const AParams: TIBXSQLDA);
var
 i: integer;
begin
 if (DataQuery = nil) then Exit;
 for i := 0 to DataQuery.FieldCount - 1 do
   AParams.ByName(DataQuery.Fields[i].Name).Value := DataQuery.Fields[i].Value;
end;


 
StriderMan ©   (2006-03-03 12:25) [6]

нашел вот такой замечательный код в исходниках

function TIBXSQLVAR.GetAsVariant: Variant;
begin
 if IsNull then
   result := NULL
 { Check null, if so return a default string }
 else case FXSQLVAR.SqlDef of
     SQL_ARRAY:
       result := "(Array)"; {do not localize}
     SQL_BLOB:
       result := "(Blob)"; {do not localize}

а так как пустая строка не является NULL то получаем вместо пустой строки "(Blob)"

И о чем думали разработчки IBX .... ?



Страницы: 1 вся ветка

Текущий архив: 2006.04.09;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.039 c
4-1137667012
IGSE
2006-01-19 13:36
2006.04.09
WIN XP ПОЛНЫЙ ПУТЬ ПРОЦЕССА


2-1142518530
Dust
2006-03-16 17:15
2006.04.09
комноненты Indi, что я делаю неправильно?


2-1143508187
Bratskiy
2006-03-28 05:09
2006.04.09
массив в переменной типа OleVariant


15-1142607428
oldman
2006-03-17 17:57
2006.04.09
бывает же такое (кто их усил таблицы на форму кидать???) :)))


8-1130618516
SergProger
2005-10-30 00:41
2006.04.09
Структура gif.