Здравствуйте. Хочу сделать загрузку jpg изображений в таблицу, в поле имеющее тип image. Использую SQL Server 2000. Взял за основу эту статью http://bcbsql.narod.ru/pub/risinbd.htm| Цитата | О хранении рисунков в базе данных Бывают случаи, когда возникает необходимость в хранении в базе данных различного рода рисунков. Например, фотографий сотрудников для программы отдела кадров. Не вдаваясь в полемику - стоит ли хранить рисунки в базе данных, давайте рассмотрим простой пример работы с рисунками в формате *.jpg. Наше приложение позволит найти на диске рисунок в этом формате и сохранить его в таблице, а также прочесть из таблицы записанный рисунок и воспроизвести его. Для простоты изложения, определим ограничение тестовой таблицы, что наша таблица будет иметь только одно поле "picture" типа image и выводиться на просмотр будет последний вставленный в таблицу рисунок (в реальном рабочем приложении этого ограничения конечно же не будет). Создадим новое приложение. На форму положим 2 кнопки и определим их свойства:
Button1->Caption="Save"; Button2->Caption="Load";
Добавим компонент Image и также определим его свойство:
Image1->AutoSize=true;
Теперь добавим на форму OpenDialog со свойствами:
OpenDialog1->DefaultExt="*.jpg"; OpenDialog1->Filter="JPG, JPEG|*.jpg|All|*.*";
Для подключения к тестовой базе данных положим на форму компонент ADOConnection и укажем в свойстве ConnectionString необходимые параметры для подключения к базе данных. Добавим компонент ADOTable и в свойстве Connection сошлемся на ADOConnection1. В свойстве TableName выберем нашу таблицу. На этом подготовительные действия закончены. Теперь для начала необходимо зарегистрировать формат *.jpg, чтобы можно было с ним работать. Для этого в конструкторе формы пропишем:
__fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { TPicture *Picture = new TPicture(); Picture->RegisterFileFormat(__classid(TJPEGImage), "jpg", "jpg", __classid(TJPEGImage)); delete Picture; }
Создадим функцию записи рисунка в базу данных SavePict:
void __fastcall TForm1::SavePict(void) { ADOTable1->Active=true; ADOTable1->Insert(); TMemoryStream *M = new TMemoryStream(); OpenDialog1->Execute(); M->LoadFromFile(OpenDialog1->FileName); TStream *B = ADOTable1->CreateBlobStream(ADOTable1->FieldByName("picture"),bmWrite); B->CopyFrom(M,M->Size); delete B; ADOTable1->Post(); delete M; ADOTable1->Active=false; DeleteFile(OpenDialog1->FileName); }
Создадим функцию чтения рисунка из базы данных LoadPict:
void __fastcall TForm1::LoadPict(void) { ADOTable1->Active=true; ADOTable1->Last(); TMemoryStream *M1 = new TMemoryStream(); TStream *B1 = ADOTable1->CreateBlobStream(ADOTable1->FieldByName("picture"),bmRead); M1->CopyFrom(B1,B1->Size); M1->SaveToFile("pic1.jpg"); delete B1; delete M1; ADOTable1->Active=false; }
Осталось задействовать наши кнопки:
void __fastcall TForm1::Button1Click(TObject *Sender) { SavePict(); }
void __fastcall TForm1::Button2Click(TObject *Sender) { LoadPict(); Image1->Picture->LoadFromFile("pic1.jpg"); }
|
Пишу как в статье: | Код | __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { TPicture *Picture = new TPicture(); Picture->RegisterFileFormat(__classid(TJPEGImage), "jpg", "jpg", __classid(TJPEGImage)); // ошибка delete Picture; }
|
Но уже при регистрации формата jpg в конструкторе формы появляются ошибка. Подскажите пожалуйста, почему она возникаети как это можно исправить ?
|