![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Работа с Blob [D7, FB 2]
dik © (2007-10-26 00:25:00)Уважаемые мастера, задачка вроде бы простая, требуется очистить поле с картинкой.
Картинка в поле Field, тип TBlobField.
делаю:
Field.DataSet.Edit;
Field.Value := Null;
или
Field.DataSet.Edit;
Field.Clear;
или
Field.DataSet.Edit;
Field.Value := '';
В любом случае после указанных операций вижу в отладчике:
Field.OldValue = Field.NewValue = картинка
очистки поля не происходит,
а признак модификации Field.Modified = false
Если не поскажете, в чем дело, пойду лечиться, т.к. глазам своим уже не верю.
Johnmen (2007-10-28 00:09:00) [1]
> Маша Шрайбер © (26.10.07 14:23) [11]
При использовании библиотек прямого доступа, следует добавить.
Маша Шрайбер (2007-10-26 14:23:00) [2]Вполне возможно, что не байки, т.к. содержимое блоб поля и работа с ним никаким боком не связана с набором данных, якобы его содержащим. По кр.мере это справедливо для IB/FB.
kaif (2007-10-26 13:46:00) [3]Я использую IBX6.04 под D6.
Вообще скачай обновление IBX, возможно у тебя старая версия. Вроде бы у меня таких проблем не возникало, во всяком случае методы Picture.Assign(nil) или Picture.Bitmap.Assign(nil) в визуальных контролах у меня давали требуемый результат.
dik (2007-10-26 12:51:00) [4]У меня IB-компоненты, проследил пошагово, не байки.
Правильный_Вася (2007-10-26 11:58:00) [5]
> не порождается событие DataEvent
байки
в Бде и дбэкспресс, слиентдатасете - везде порождается
Ega23 (2007-10-26 11:55:00) [6]А где Post?
dik (2007-10-26 11:54:00) [7]Спасибо всем, разобрался.
При очистке поля типа TBlobField не порождается событие DataEvent, хотя и должно порождаться, чтобы связанный с полем контрол мог отреагировать на изменение данных, кроме того, не выставляется флаг Field.Modified, и когда датасет пытается сохранить только измененные поля, он оказывается грубо обманутым. Проконтролировать эту ситуацию (что-то было в поле и поле было очищено) в стандартных компонентах (DB, IDB) невозможно, во всяком случае я такого способа не нашел. Поэтому приходится теперь сохранять все имеющиеся Blob поля, были они изменены или нет.
Не знаю, в компонентах FIBplus этот глюк убран?
Правильный_Вася (2007-10-26 11:12:00) [8]Field.Clear работает великолепно
еще лучше работает UPDATE x SET y = NULL
Виталий Панасенко (2007-10-26 09:24:00) [9]Field.Clear
r
> В любом случае после указанных операций вижу в отладчике:
>
> Field.OldValue = Field.NewValue = картинка
А это очень похоже на то, что используется кешапдейт.. И, как вариант, не вызывается AppllyUpdates
dik (2007-10-26 08:26:00) [10][1] ...DBImage1.Picture.Bitmap.Assign(nil)....
Пробовал, только нужно делать DBImage1.Picture := nil;
не помогает, хотя картинка и очищается но не происходят изменения в поле Field.
[2]...метод Post вызывается?...
Разумеется, и Refresh срабатывает, да что толку, если в базу изменения просто не ушли, поскольку не было измения в самом поле.
Германн (2007-10-26 02:18:00) [11]
> kaif © (26.10.07 02:09) [1]
> Просто компетентных ответов на вопрос "пока я не поступило",
> поэтому я пытаюсь подать хоть какое-то направление для
> поиска решения. :)
>
Кавычки добавил я. Извини, Ашот.:)
Ну тогда и я выскажусь, раз "компетентных ответов" пока не было. А метод Post вызывается? Про Refresh может быть скажу позже. :)
kaif (2007-10-26 02:09:00) [12]Я не помню этой темы. Если подключен какой-нибудь TDBImage для отображения картинки, то, кажется, я присваивал nil объекту Bitmap. Что-то вроде DBImage1.Picture.Bitmap.Assign(nil). И то это не сразу работало. Но "вслепую" как очистить - не помню. Допускаю, что даже простое присутствие визуального компонента может каким-то образом мешать очистить поле так, как Вы пытаетесь это сделать. Для меня класс TGraphic Delphi всегда оставался несколько непонятным. Похоже, что было бы лучше, если бы это был интерфейс, а не класс.
Если сморозил ересь, прошу простить.
Просто компетентных ответов на вопрос пока я не поступило, поэтому я пытаюсь подать хоть какое-то направление для поиска решения. :)