Главная страница
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.056 c
15-1142682757
Ученик чародея
2006-03-18 14:52
2006.04.09
26 марта выборы в Верховный Совет Украины.


4-1137524528
HWND
2006-01-17 22:02
2006.04.09
Как узнать момент копирования текста в буфер обмена ?


2-1143012046
Ньюб2
2006-03-22 10:20
2006.04.09
предотвратить отключение монитора


2-1143442965
Физик
2006-03-27 11:02
2006.04.09
Как програмно зделать активным модальное окно


1-1141427734
fenixaz
2006-03-04 02:15
2006.04.09
Вопросы по ComboBox