Базы данных Microsoft Access в C++ Builder 6 с использованием ado. Часть 1



Дата07.01.2022
өлшемі0,5 Mb.
#17027

Базы данных Microsoft Access в C++ Builder 6 с использованием ADO. Часть 1

Данная статься применима и к более старшим версиям 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


Достарыңызбен бөлісу:




©emirsaba.org 2024
әкімшілігінің қараңыз

    Басты бет