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

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

копирование blob [IB7]


July ©   (2006-09-06 12:31:00) 

Такая картина - в процедуре один запрос делает выборку из таблицы, записывает результат в локальные переменные, одна из них - типа blob. Потом другой запрос делает вставку в таблицу и одно из вставляемых полей - тоже типа blob, в него и делается попытка записать ту переменную. Есть подозрение, что скорее всего наш blob вовсе не копируется, а в новую запись просто вставляется указатель на ту же область данных, где хранится исходный массив blob.
Вопрос - каким образом, пользуясь средвами СУБД, действительно скопировать значение поля типа blob, т.е. создать его второй экземпляр и передать указатель именно на него, а не на исходный?
Буду признательна также за ссылки на какие-нибудь русскоязычные материалы по подобным вопросам о манипулировании blob-ами.


July   (2006-09-07 18:00:00) [1]


> Это что такое?


собственно содержимое поля


Desdechado   (2006-09-07 17:36:00) [2]

> blob-массив
Это что такое?


July   (2006-09-07 17:30:00) [3]


> Запоминаешь ID записи, манипулируешь с другими значениями,
>  потом делаешь:
> INSERT INTO A( x,y )
>   SELECT :переменная1, константа2, блоб_поле
>     FROM Tabl WHERE ID=:сохраненныйID
> В переменной твои манипулированные значения, а блоб возьми
> живой, с пылу-с жару.


Ну ладно, посоветую коллеге этот способ, пусть пробует.
Однако, Desdechado, есть ли 100% гарантия, что будет скопирован сам blob-массив, а не указатель на этот массив, созданный для исходной записи?
Страдаю недостатком знаний по этому вопросу


Desdechado   (2006-09-07 14:02:00) [4]

> Не, одним запросом не получится
Почему?
Запоминаешь ID записи, манипулируешь с другими значениями, потом делаешь:
INSERT INTO A( x,y )
  SELECT :переменная1, константа2, блоб_поле
    FROM Tabl WHERE ID=:сохраненныйID

В переменной твои манипулированные значения, а блоб возьми живой, с пылу-с жару.


July   (2006-09-07 13:41:00) [5]


> ibase.ru


Да, забыла, сейчас там поищу.
..но пока что везде встечаются только вопросы, касающиеся рабрты с блобами из приложения, а мне нужно в процедуре..


> INSERT INTO A( x,y ) SELECT m, n FROM B ...


Не, одним запросом не получится, прежде чем вставить запись, после извлечения делается еще несколько операций..


Desdechado   (2006-09-06 18:06:00) [6]

ibase.ru
много всего

INSERT INTO A( x,y ) SELECT m, n FROM B ...


July   (2006-09-06 17:34:00) [7]


> Во-первых, "примерно" не считается.


:) ну ладно, не считается :)
Не сочтите за самонадеянность, но через конструкцию insert с select-ом я эту операцию не пробовала делать (просто занимаюсь сейчас другим), однако думаю что в этом случае уж точно можно будет не сомневаться, что скопируется не сам массив blob, а указатель на него.


> Во-вторых, не вижу описания и текста ошибки.


Проблема возникала не у меня, у коллеги, сейчас не могу точно процитировать, завтра может быть уточню и напишу.
Но вообще подобные непонятки с blob-ами периодически всплывают и пока чаще всего приводят к выводу - а ну его нафиг этот blob, обойдемся длиннющими varchar-ами :)
Но это же не выход ;)

Повторюсь - почитать бы что-нибудь об этом, а? :))
хоть чуточку более понятное чем англоязычная документация на IB..


Desdechado   (2006-09-06 14:00:00) [8]

Во-первых, "примерно" не считается.
Во-вторых, не вижу описания и текста ошибки.


July   (2006-09-06 13:49:00) [9]


> это на клиенте или в ХП?

все делается запросами в перелах одной ХП


> Может, вставлять копию блоб лучше через INSERT ... SELECT


примерно это и делается, однако при дальнейшей работе возникают ошибки, которые и натолкнули на соображения, высказанные выше


Desdechado   (2006-09-06 13:33:00) [10]

> в локальные переменные
это на клиенте или в ХП?
Может, вставлять копию блоб лучше через INSERT ... SELECT


Наверх

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