Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

FireBird BLOB [D6]


Zabludshiy ©   (2007-07-16 16:58:00) 

Доброго времени суток. Помогите плс. Не получается изменить блоб. На форме IBDatabase, к нему подключен IBDataset и IBSQL. В таблице (firebird) есть поле типа BLOB. При попытке изменить его (там только текст должен быть) делаю следующим образом:

...
   IBDS1.Edit;
   IBDS1MEMO.Value:=str;
   IBDS1.Post;
...

Пишет "Cannot modify a read-only dataset".
Само поле - не read only, в IBDataset не нашел даже такого свойства. Другие поля (не блобы) изменяю легко через IBSQL,

Может туплю, подскажите как бороться или ссылку на внятную статью/книгу про работу с блобами IB/FB в delphi.

Delphi 6, FireBird


Zabludshiy   (2007-07-16 19:25:00) [1]

Заработало. Спасибо всем за помощъ!


Zabludshiy   (2007-07-16 19:22:00) [2]

Вот и я подозреваю, что где-то что-то в свойствах нето... Спасибо, будем разбираться.


engine   (2007-07-16 19:18:00) [3]

> [8] Zabludshiy   (16.07.07 19:16)
> Я хочу понять, почему не работает [1]

Ну у меня нет оснований полагать, что [1] не работает.
В моих проектах отлично работает.


Zabludshiy   (2007-07-16 19:16:00) [4]

Пробовал несколькими способами записывать этот блоб, так как написано
в Zabludshiy   (16.07.07 16:58);
потом через IBDS1MEMO.loadfromstream;
получилось только так как Zabludshiy   (16.07.07 18:58) [4],
но я так понимаю что это не совсем правильно.
Я хочу понять, почему не работает [1]


engine   (2007-07-16 19:12:00) [5]

> [6] Zabludshiy   (16.07.07 19:07)

То, что тебе написали в [1] и то, что ты написал в [4] совершенно разные вещи.
Используй параметры.


Zabludshiy   (2007-07-16 19:07:00) [6]

MEMO - это и есть блоб.


engine   (2007-07-16 19:06:00) [7]

> [4] Zabludshiy   (16.07.07 18:58)

А при чем здесь блоб?


Zabludshiy   (2007-07-16 18:58:00) [8]

Дык почему тогда когда выполняется такой код

   IBSQL1.Close;
   IBSQL1.SQL.Clear;
   IBSQL1.SQL.Add('update ORGANIZATIONS set ');
   IBSQL1.SQL.Add('MEMO = '''+str+''' ');
   IBSQL1.SQL.Add('where ORG_ID = '+IBDS1.fieldbyname('ORG_ID').AsString );
   IBSQL1.ExecQuery;
   IBDS1.Close;
   IBDS1.Open;

и размер строки str около 100К вываливается ошибка, а если размер около 10К - всё нормально записывается?


engine   (2007-07-16 18:43:00) [9]

> [2] Zabludshiy   (16.07.07 18:39)

не правильно ты всё понимаешь.


Zabludshiy   (2007-07-16 18:39:00) [10]

Через update, как я понимаю, не получится передать строку больше 32к, в принципе я так и делаю, но не уверен, что со временем этого не будет мало...


Desdechado   (2007-07-16 17:01:00) [11]

UPDATE tbl SET blb = :prm WHERE id = :x

и читать справку Modifying read-only datasets


Наверх

Титульная страница Поиск, карта сайта Написать письмо