Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2006.04.09;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.013 c
2-1143014377
Dmitrij_K
2006-03-22 10:59
2006.04.09
Путь в файлу


2-1142871605
{AleX}
2006-03-20 19:20
2006.04.09
ADO&amp;MySQL


15-1142707333
Piter
2006-03-18 21:42
2006.04.09
Как можно апгрейдить компьютер?


15-1142268082
ZeFiR
2006-03-13 19:41
2006.04.09
Карта Киева


8-1131008435
Tristania
2005-11-03 12:00
2006.04.09
Работа с экраном напрямую





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский