![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
TBlobField не записывается как NULL
StriderMan © (2006-03-02 21:09:00)Доброго времени суток, уважаемые мастера!
Пишу на Delphi7, использую InterBase и компоненты IBExpress
проблема такая:
var
fld: TBlobField
begin
fld.Clear;
....
дальше делаем
Transaction.CommitRetaining
и в итоге в таблицу попадает не NULL а пустая строка
далее самое интересное!
ищем запросом TIBSQL эту запись, находит...
и в это поле в результате запроса попадает уже не пустая строка, а строка, содержащая текст '(Blob)'
Вопрос. Как записать в блоб null?
StriderMan (2006-03-03 12:25:00) [1]нашел вот такой замечательный код в исходниках
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 .... ?
StriderMan (2006-03-02 21:33:00) [2]результаты я смотрю через утилиту 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;
API (2006-03-02 21:18:00) [3]TBlobField не записывается как NULL <...> и в итоге в таблицу попадает не NULL а пустая строка
С какой целью Вы используете TBlobField для работы со строковыми полями?
и в это поле в результате запроса попадает уже не пустая строка, а строка, содержащая текст '(Blob)'
Как Вы это определили?
Desdechado (2006-03-02 21:17:00) [4]а как привязано это поле к датасету?
что в запросе стоит?
Desdechado (2006-03-02 21:16:00) [5]> строка, содержащая текст '(Blob)'
это просто способ показа блоба в гриде
StriderMan (2006-03-02 21:15:00) [6]PS:
пробовал обNULLять по-всякому
fld.Clear;
fld.Value := NULL;
fld.SetData(nil);