Данная статься применима и к более старшим версиям C++ Builder.
Своё первое знакомство с БД я начал с использования из комплекта поставки билдера баз данных Paradox. Как оказалось, они не зря носят такое название. Случалось очень много зависаний, некорректная работа и появление непонятных ошибок. После того, как я стал использовать MS Access, создалось ощущение, что я пересел с запорожца на мерседес.
Перейдем непосредственно к процессу разработки. Мы будем использовать MS Access 2003 и ниже. Я использую 2007, но сохраняю в формате 2002-2003. Запускаем его, сочетанием Ctrl+N создаем новую базу данных, сохраняем и открываем её. Заполняем нужные поля и выбираем их тип данных. (более подробно о создании БД в Acces рекомендую прочитать в интернете). Для примера я создам БД со списком учащихся.
Все поля имеют тип данных "Текстовый",поле "Фотография" имеет тип данных "Поле объекта OLE". Нажимаем Ctrl+S и вводим название нашей таблицы(их можно создавать несколько). Теперь можно все закрыть.
Запускаем билдер, сохраняем весть проект(Save Project As...). Путь не должен содержать русских имен. Размещаем на форме компоненты. С вкладки ADO(а в более старших версиях с dbGo) ADOTable и ADOConnection.
С вкладки Data Access компонент DataSource. С вкладки Data Controls компоненты DBGrid и DBNavigator. Щелкаем по DataSource1 и в DataSet выбираем ADOTable1. Щелкаем по ADOTable1 и в свойстве Connection выбираем ADOConnection1. Дважды щелкаем по ADOConnection1 и нажимаем кнопку Build... .Выбираем как на картинке и нажимаем "Далее". И нажимаем два раза "Ок".
Теперь, в Object Inspector ставим Connected в true, в User Name напишем "Admin", поле пароля оставим пустым. Чтобы больше не повторять эту процедуру, установите LoginPrompt в false. Щелкаем по DBGrid и в DataSource выбираем DataSource1. Тоже самое повторяем и для DBNavigator. Щелкаем по ADOTable1 в TableName выбираем нашу таблицу. Устанавливаем Active в true. Если все сделано правильно, то у вас должно получиться вот так:
Щелкаем дважды по DBGrid, в появившемся окошечке нажимаем на кнопку "Add All Fields".
Щелкая по полям,можно задать им другие имена для отображения, свойство FieldName и изменить ширину - Width. Свойство Visible поля "Фотография" можно установить в false,т.к. это Blob-поле и отображать его придется через другие компоненты.
Добавим на форму две кнопки Button, компонент Image и диалог OpenPictureDialog.
Рекомендую установить свойство Center Image1 и свойство Proportional в true. Код кнопки "Загрузить фото":
void __fastcall TForm1::Button1Click(TObject *Sender)
{
if (OpenPictureDialog1->Execute())
{
AnsiString CurrentFile = OpenPictureDialog1->FileName;
Image1->Picture->LoadFromFile(CurrentFile);
}
} Код кнопки "Сохранить фото":
void __fastcall TForm1::Button2Click(TObject *Sender)
{
ADOTable1->Edit();
TMemoryStream* strm = new TMemoryStream();
Image1->Picture->Graphic->SaveToStream(strm);
((TGraphicField*)Form1->ADOTable1->FieldByName("Фотография"))->LoadFromStream(strm);
delete strm;
Form1->ADOTable1->Post();
} В обрабочик события OnCellClick (щелчок по ячейке) DBGrid пишем следующий код:
void __fastcall TForm1::DBGrid1CellClick(TColumn *Column)
{
if(!(TBlobField*)ADOTable1->FieldByName("Фотография")->IsNull){
if(!Image1->Visible)Image1->Visible=true;
TMemoryStream* strm = new TMemoryStream;
TJPEGImage *ptJpg=new TJPEGImage;
((TGraphicField*)ADOTable1->FieldByName("Фотография"))->SaveToStream(strm);
strm->Seek(0,0);
if (*(Word*)strm->Memory == 0xD8FF)Image1->Picture->Graphic=ptJpg;
Image1->Picture->Graphic->LoadFromStream(strm);
delete strm;
delete ptJpg;
}else
Image1->Visible=false;
} Для загрузки jpeg изображений добавим в начало
#include "jpeg.hpp"
Попробуем сделать несколько записей. Скомпилируем и запустим программу.
В этой статье я осмотрел самые основные аспекты создания БД в MS Access. В следующей статье я расскажу о упорядочивание записей,фильтрации и поиску по БД,а так же ряду других мелочей.
Базы данных Microsoft Access в C++ Builder 6 с использованием ADO. Часть 2
|