Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.12.30;
Скачать: CL | DM;

Вниз

ADO и TBlobField в Oracle   Найти похожие ветки 

 
Labert   (2003-12-03 13:54) [0]

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

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

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

что делать

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


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

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


 
Reindeer Moss Eater ©   (2003-12-03 14:07) [2]

Нет не проще


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

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


 
Silver Alex ©   (2003-12-03 14:15) [4]


> DestTableBLOBFIELD.Assign(SrcTableBLOBFIELD);

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


 
Reindeer Moss Eater ©   (2003-12-03 14:20) [5]

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


 
Silver Alex ©   (2003-12-03 14:23) [6]


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

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


 
Reindeer Moss Eater ©   (2003-12-03 14:26) [7]

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


 
Silver Alex ©   (2003-12-03 14:33) [8]

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


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

Вариант

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


 
Reindeer Moss Eater ©   (2003-12-04 09:19) [10]

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


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

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


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

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

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


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

Во-первых, там около 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)

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


 
Danilka ©   (2003-12-05 08:45) [14]

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



Страницы: 1 вся ветка

Текущий архив: 2003.12.30;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.013 c
1-99643
Delph
2003-12-16 16:35
2003.12.30
TObject.FieldAddress():Pointer


1-99554
Cyberjack
2003-12-18 02:55
2003.12.30
Интерфейс MDI


1-99637
BaDeVlad
2003-12-16 17:17
2003.12.30
Как в Richedite сделать Selectionbar?


3-99444
hursand
2003-12-06 11:32
2003.12.30
Использоват хранимых процедур


7-99794
Piero
2003-10-22 22:20
2003.12.30
Как узнать диагональ монитора