![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
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