Текущий архив: 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.46 MB
Время: 0.013 c