Поиск:

Ответ в темуСоздание новой темы Создание опроса
> BLOB загрузить/извлечь, архив 
:(
    Опции темы
IgorDV
Дата 16.4.2007, 15:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 60
Регистрация: 14.4.2007

Репутация: нет
Всего: нет



Немогли бы выложить краткий пример как используя компоненты ADO загрузить в blob поле, сохранить из blob на  диск файл?
Буду весьма благодарен!
PM MAIL ICQ   Вверх
SenkraD
Дата 16.4.2007, 15:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 933
Регистрация: 3.2.2006
Где: Украина::Киев

Репутация: 9
Всего: 23



Я с ADO не сталкивался, но у BLOB-полей есть метод SaveToStream, а у TMemoryStream - SaveToFile;

Код

TMemoryStream *pMS = new TMemoryStream;
try
{
    DataSet1->FieldByName("Images")->SaveToStream(pMS);
    pMS->SaveToFile(Test.bmp); 
}
__finally
{
  delete pMS;
}



--------------------
 Имеющий язык - да не убоится спросить! 
user posted image
PM MAIL ICQ   Вверх
IgorDV
Дата 16.4.2007, 16:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 60
Регистрация: 14.4.2007

Репутация: нет
Всего: нет



Еще у меня запрос не может выполниться пишу

Код

ADOQuery->Close();
ADOQuery->SQL->Clear();
ADOQuery->SQL->Add("select blob_data from table");
ADOQuery->Open();


выдат ошибку не совместимые типы!(пропускаю запрос PL/SQL Developer все нормально выполняется)
как с этим бороться?

PM MAIL ICQ   Вверх
Anikmar
Дата 16.4.2007, 18:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

Репутация: 34
Всего: 59



Там случайно поля в ADOQuery не определены? Может там тип не совпадает?
PM MAIL ICQ   Вверх
IgorDV
Дата 16.4.2007, 20:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 60
Регистрация: 14.4.2007

Репутация: нет
Всего: нет



Там вообще не каких полей нет, я запрос динамически составляю.
Я вот думаю может нужно какой нить датасет использовать вместо Query?

я делаю так, бросаю на форму 2 компонета: ADOQuery, ADOConnection
при появлении формы конектюсь потом формирую запрос делаю Open у ADOQuery и он выдает "неверный тип данных". БД Оракл.
Как быть? Не заню, бьюсь уже несколько дней! Помогите справиться!
PM MAIL ICQ   Вверх
Anikmar
Дата 16.4.2007, 21:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

Репутация: 34
Всего: 59



К сожалению с Орклом не работал, но тем не менее - в команде Open происходит какой-то контроль данных только на этапе присваивания значения полям, где еще она может говорить, что данные несовместимы?
Может быть в Оракле для BLOB полей отдельные правила существуют? Что говорит документация по Ораклу?
PM MAIL ICQ   Вверх
IgorDV
Дата 17.4.2007, 10:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 60
Регистрация: 14.4.2007

Репутация: нет
Всего: нет



Вот такая ошибка:
EOleException with message 'Тип данных не поддерживаеться'
PM MAIL ICQ   Вверх
Anikmar
Дата 17.4.2007, 11:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

Репутация: 34
Всего: 59



Цитата(IgorDV @  17.4.2007,  10:06 Найти цитируемый пост)
Вот такая ошибка:
EOleException with message 'Тип данных не поддерживаеться' 


Предположения:
Старая версия драйвера ODBC

Надо посмотреть в документации по СУБД - может действительно драйвер не поддерживает BLOB поля
PM MAIL ICQ   Вверх
IgorDV
Дата 17.4.2007, 11:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 60
Регистрация: 14.4.2007

Репутация: нет
Всего: нет



СУБД поддерживает. А как драйвер обновить?
PM MAIL ICQ   Вверх
Anikmar
Дата 17.4.2007, 11:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

Репутация: 34
Всего: 59



Цитата(IgorDV @  17.4.2007,  11:26 Найти цитируемый пост)
А как драйвер обновить?

Может посмотреть на сайте производителя СУБД? Он не должен быть платным.
Или на Microsoft глянуть...

Добавлено через 3 минуты и 11 секунд
Посмотрите Тут - может полезно будет
PM MAIL ICQ   Вверх
IgorDV
Дата 17.4.2007, 20:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 60
Регистрация: 14.4.2007

Репутация: нет
Всего: нет



млин... че делать???
загрузить в базу могу файл, а вот выгрузить не как :(((((((

делаю так:
бросаю на форму 2 компонента, ADOConnection и ADOQuery, и 2 кнопки
соединяюсь с базой:
в оброботчиках на он клик пишу:
Код

void __fastcall TForm1::Button1Click(TObject *Sender)
{
  TStringList* temp = new TStringList();
  temp->LoadFromFile("C:\\1.txt");

  AnsiString sql;
  sql = "INSERT INTO LOB_T (mtd_data) ";
  sql += "VALUES (:file)";
  ADOQuery1->Close();
  ADOQuery1->SQL->Clear();
  ADOQuery1->SQL->Add(sql);

  TMemoryStream* st = new TMemoryStream;

  temp->SaveToStream(st);

  delete temp;

  ADOQuery1->Parameters->ParamByName("file")->LoadFromStream(st, ftBlob);

  delete st;

  ADOQuery1->ExecSQL();
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button2Click(TObject *Sender)
{
  AnsiString sql = "SELECT mtd_data FROM lob_t ";
  TStream* stroka;
  TMemoryStream* str2 = new TMemoryStream;
  ADOQuery1->Close();
  ADOQuery1->SQL->Clear();
  ADOQuery1->SQL->Add(sql);
  ADOQuery1->Open();

  stroka = ADOQuery1->CreateBlobStream(ADOQuery1->FieldByName("blob"),bmRead);

  str2->LoadFromStream(stroka);

  AnsiString path_end = "C:\\2.txt"; 
  str2->SaveToFile(path_end);

  ADOQuery1->Close(); 

}

Загружать, то загружает, а вот сохранить на диске не дает, опять та же ошибка... :( Может я че не так делаю, я уже на другом компьютере с совсем другой версией Оракл... smile  smile 
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.0607 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.