Главная страница
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.03 c
4-1137524528
HWND
2006-01-17 22:02
2006.04.09
Как узнать момент копирования текста в буфер обмена ?


15-1142724810
Германн
2006-03-19 02:33
2006.04.09
Верный (правильный) вопрос


15-1142584014
Alex_Delphi
2006-03-17 11:26
2006.04.09
Посоветуйте какой генератор отчотов наиболее лучий для работы


6-1130764717
Hitman2083
2005-10-31 16:18
2006.04.09
Вывод окна терминала


15-1142925934
nick-from
2006-03-21 10:25
2006.04.09
Отслеживание выходов в интернет по-простому