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

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

ADO и TBlobField в Oracle [D5]


Labert ©   (2003-12-03 13:54:00) 

Есть две таблицы с одинаковой структурой под Oracle8i.
Короче надо данные перенести из одной в другую.
Проблема в том, что в таблицах есть поле типа LONG RAW,
Delphi для него создал компонент типа TBlobField.

Короче пишу так:
SrcTable.Append;
DestTableBLOBFIELD.Value := SrcTableBLOBFIELD.Value;
SrcTable.Post;

ну так вот.
некоторые записи копируются нормально (там где в этом поле не очень длинное значение),
а в некоторых копируемое значение обрезается (например, с 80 килобайт до 15 килобайт)
причем никаких сообщений об ошибках не выводится

что делать

помогите, пожалуйста


Danilka   (2003-12-05 08:45:00) [1]

хм, а зачем вообще записи на клиента тащить, не правильнее-ли сделать все на сервере? вообще-то с LONG RAW я не работал, все как-то с обычным блобом, но все-таки?


Labert   (2003-12-05 08:23:00) [2]

Во-первых, там около 50-ти строк в среднем по 50 Кб,
во-вторых, повторяю, я для каждой записи делал так:

SrcTable.Append;
DestTableBLOBFIELD.Value := SrcTableBLOBFIELD.Value;
DestTableBLOBFIELD.SaveToFile(some_file1)
SrcTableBLOBFIELD.SaveToFile(some_file2)
SrcTable.Post;

Данные в оба файла сохраняются правильные, а в таблицу попадают неправильные.

пробовал даже так (изврат, конечно):

DestTableBLOBFIELD.SaveToFile(some_file1)
SrcTableBLOBFIELD.LoadFromFile(some_file1)

тот же результат


Reindeer Moss Eater   (2003-12-04 22:01:00) [3]

Фетчит, когда сохраняет рекордсет в файл. И это правильно.
А ты сохраняешь рекордсет в файл?
Нет.

Представь, что у тебя в таблице с LONG RAW полем 100 записей.
В каждом блоб поле 1 мб данных.
Сколько времени происходило бы отурытие датасета, если бы все блобы фетчились полностью при открытии таблицы?
Не всех ста строк, а хотя бы тех, что передаются на клиента сразу.
Это происходит на смом деле? Нет не происходит.


Labert   (2003-12-04 18:07:00) [4]

но ведь он фетчит - SaveToFile правильные данные сохраняет


Reindeer Moss Eater   (2003-12-04 09:19:00) [5]

При чем здесь АДО?
У тебя набор данных из многих строк и в списке полей есть LONG RAW.
Драйверу что, все их фетчить до последнего байта только потому что кто-то такие запросы пишет неподумавши?


Labert   (2003-12-03 14:37:00) [6]

Вариант

Insert into ToTAble(BLOBFIELD)
select blobfield from FromTable

не проходит, Oracle не разрешает такую операцию именно для LONG RAW.

С Assign сейчас попробую, но думаю, это не поможет, так как:

Присваивание
DestTableBLOBFIELD.Value := SrcTableBLOBFIELD.Value;
проходит нормально, все данные переносятся хорошо
Я проверял так:
после присваивания делаю

DestTableBLOBFIELD.SaveToFile(some_file1)
SrcTableBLOBFIELD.SaveToFile(some_file2)

файлы получаются одинаковые.

но потом в таблицу записываются обрезанные данные.

короче, с удовольствием побил бы лицо создателям ADO


Silver Alex   (2003-12-03 14:33:00) [7]

понятно.ORACLE не особо знаю.Первый раз такое слышу. И что это за тип LONG RAW ?И какая вообще разница?как же запросом вставить записи?Без Делфы?не верится что-то, но спорить не буду


Reindeer Moss Eater   (2003-12-03 14:26:00) [8]

Я не хочу сказать, я сказал, что не будет работать.
Потому что LONG RAW и потому что ORACLE.


Silver Alex   (2003-12-03 14:23:00) [9]


> Твой вариант неприемлим вообще. По ряду объективных причин.

да ну?хочешь сказать так вообще не будет работать что-ли?Каких причин? может я чего не понял?


Reindeer Moss Eater   (2003-12-03 14:20:00) [10]

Silver Alex
Твой вариант неприемлим вообще. По ряду объективныхпричин.
Хоть одна там запись, хоть миллион.


Silver Alex   (2003-12-03 14:15:00) [11]


> DestTableBLOBFIELD.Assign(SrcTableBLOBFIELD);

и чем лучше(или проще), я так понимаю там не одна запись "Короче надо данные перенести из одной в другую."


Reindeer Moss Eater   (2003-12-03 14:08:00) [12]

DestTableBLOBFIELD.Assign(SrcTableBLOBFIELD);
не помогает?


Reindeer Moss Eater   (2003-12-03 14:07:00) [13]

Нет не проще


Silver Alex   (2003-12-03 14:06:00) [14]

проще запросом
Insert into ToTAble(BLOBFIELD)
select blobfield from FromTable


Наверх

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