Организация интерфейса для работы с базами данных

Автор работы: Пользователь скрыл имя, 22 Ноября 2011 в 11:12, дипломная работа

Описание

Пояснительная записка на 47 страниц, 9 рисунков, 5 приложений.
БАЗА ДАННЫХ, INTERBASE, ГРАФИЧЕСКИЙ ИНТЕРФЕЙС, BORLAND C++ BUILDER.
В ходе проделанной работы были рассмотрены реляционные базы данных InterBase. Была изучена история их возникновения и кратко рассмотрены основы создания баз данных в программе IBAdmin.
Также была рассмотрена история возникновения объектно-ориентированного языка С++. На основе платформы Borland C++ Builder 6.0 был разработан графический интерфейс, который позволяет сцепляться с базами данных Inter Base, просматривать их содержимое, выполнять запросы, представлять данные в виде дерева (только для баз данных, содержащих таблицу с административным делением территориальных типов).
Данную работу можно использовать в качестве учебно-методического пособия для изучения реляционных баз данных IBAdmin и написания интерфейса для доступа к ним. Написанную программу можно использовать в качестве наглядного примера.

Содержание

ОБОЗНАЧЕНИЯ И СОКРАЩЕНИЯ 5
ВВЕДЕНИЕ 6
ТЕОРЕТИЧЕСКАЯ ЧАСТЬ 8
Историческая справка по базам данных 8
Реляционная база данных 11
Базы данных в IBAdmin 12
1.3.1. InterBase и область его применения 13
1.3.2. СУБД InterBase 14
1.3.3. Несколько слов о языке SQL 15
1.3.4. Типы данных, поддерживаемые Interbase 16
1.3.5. Домены 17
1.3.6. Генераторы, триггеры 17
1.3.7. Исключения 18
1.3.8. Управление доступом к данным в InterBase 19
Историческая справка по С++ 20
Основы визуального программирования интерфейса 22
2. ПРАКТИЧЕСКАЯ ЧАСТЬ 27
ЗАКЛЮЧЕНИЕ 39
СПИСОК ИСПОЛЬЗУЕМЫХ ИСТОЧНИКОВ 41
ПРИЛОЖЕНИЕ А 42

Работа состоит из  1 файл

ВКР.doc

— 1.26 Мб (Скачать документ)

       СПИСОК  ИСПОЛЬЗУЕМЫХ ИСТОЧНИКОВ

  1. Википедия  http://ru.wikipedia.org/wiki/C%2B%2B
  2. Городецкий А.Я. Информационные системы. Вероятностные модели и статистические решения: учебное пособие / А.Я. Городецкий. – СПб.: СПбГПУ, 2003. – 326 с. I8BN 5-7422-0381-X
  3. Радыгин В.Ю. Базы данных и СУБД: Учебно-методическое пособие / В.Ю. Радыгин. – М.: МГИУ, 2011. – 72 с. ISBN 978-5-2760-1960-4
  4. Скляр А.Я. Введение в InterBase / А.Я. Скляр. — М.: Горячая линия-Телеком, 2002. -517 с. ISBN 5-93517-062-0
  5. Архангельский А.Я. Программирование в С++ Builder 6 / А.Я. Архангельский. – М.: Бином, 2003. – 1152 с.
  6. Бобровский С. Самоучитель программирования на языке С++ в системе Borland C++ Builder 5.0 / С.Бобровский - М.: Десс Ком I-Press, 2001. - 271с.  ISBN 5-93650-013-6
  7. Пахомов Б. Самоучитель С/С++ и С++ Builder 2007 / Б. Пахомов. – СПб.: БВХ-Петербург, 2008. – 672с.
  8. Послед Б.С. Borland C++ Builder 6. Разработка приложений баз данных / Б. Послед. – СПб.:  ДиаСофтЮп, 2003. – 320с. ISBN 5-93772-094-6
  9. Вальпа О. Borland C++ Builder Экспресс-курс / О. Вальпа. – СПб.: БВХ-Петербург, 2006. – 224с. ISBN 5-94157-855-5
  10. Культин Н.Б. Самоучитель С++ Builder / Н.Б. Культин. – СПб.: БВХ-Петербург, 2004. – 320c.  ISBN 5-94157-378-2
  11. Архангельский А.Я. С++ Builder 6 Справочное пособие. Книга 2. Классы и компоненты / А.Я. Архангельский. – М.: Бином, 2002. – 528c.
  12. Теллес М. Borland C++ Builder. Библиотека программиста / М. Теллес. – СПб.: Питер, 1998. - 512c.
 
 
 
 

       ПРИЛОЖЕНИЕ А 

       А.1. Листинг соединения с БД

void __fastcall TForm_DB_Props::mmConnectClick(TObject *Sender)

{                                   /*при открытии поп меню*/

   OpenDlg->Title=" Выбор исходной БД"; /*при клике на соединение с бд открываем папку с нужным именем*/

      if(!OpenDlg->Execute()) return; /*если папка не нажата ,то выйти*/ 

      if(IBDB1->Connected)         /*при открытой 1-ой базе */

          IBDB1->Close();                /*закрыть 1-ю базу*/ 

      EditDBName->Clear();  /*почистить окно редактирования со списком таблиц*/

      TVSource->Items->Clear();         

      AS asDB=OpenDlg->FileName;         /*при выборе таблиц открываем папку выбирая по имени файла*/

      IBDB1->DatabaseName=AnsiUpperCase(asDB);  

      IBDB1->Open();                             /*открытие 1-ой базы данных*/

      EditDBName->Text=asDB;     /* в поле с именами баз данных записать текст как в базе данных*/

      GetTableList();

      mmQuery->Enabled=true;                           /*получить список таблиц*/

} 

       А2. Листинг работы кнопок выбора типа просматриваемых таблиц

void __fastcall TForm_DB_Props::GetTableList(void)

{

   int mode=RGFilter->ItemIndex;            /*фильтр по типам таблиц*/

   AS asQ="select rdb$relation_name from rdb$relations";   /*выбор таблиц из списка отношений*/

   if(mode<2) asQ+=" where rdb$system_flag=" + IntToStr(mode); /*если  коэф<2 присвоим значение сист.флага*/ 

   asQ+=" order by rdb$relation_name"; /*присвоение  старого коэф из списка*/

   IBQueryEx(IBQ2, asQ, blSELECT, blFIRSTREC);  

   AS asT[3]={"клиентских", "системных", "всех"}; /*список таблиц по  группам*/ 

   LTableList->Caption="Список " + asT[mode] + " таблиц БД"; /*присвоение  названия поля списка таблиц*/

} 

       А3.  Листинг выполнения запроса

int __fastcall IBQueryEx(TIBQuery* Q, AS asSQL, bool blSelect, bool blLast)

{                                          /*запрос*/

   int nRecs=0;

   TIBTransaction* TA=Q->Transaction; /*Q присвоить значение транзакций и выполнить*/ 

   try

   {                                      /*выбор, деление*/

       if(blSelect)

       {

          if(TA->Active) TA->Commit(); /*при активной та зафиксировать*/

          if(Q->Active) Q->Close(); /*при  активном запросе Q закрыть*/

          Q->SQL->Clear();              /*почистить запрос*/

          Q->SQL->Add(asSQL);    /*перейти к новому*/

          Q->Open();                      /*открыть запрос*/

          Q->Last();                         /*выполнить следующий*/

          nRecs=Q->RecordCount;  /*запись запроса*/

          if(!blLast) Q->First(); /*если  запрос не следующий,то перейти  к первому*/

       }

       else

       {

          if(Q->Active) Q->Close(); /*при  активном запросе закрыть его*/

          if(!TA->Active) TA->StartTransaction(); /*при закрытой та запустить её*/

          Q->SQL->Clear();           /*чистка запроса*/

          Q->SQL->Add(asSQL);  /*переход  к новому*/

          Q->ExecSQL();

          if(blLast) TA->Commit(); /*при наличие след. та выполнение*/

       }

   }

   catch(...)

   {;} 

   return nRecs;

} 

    А4. Вывод свойств таблицы

void __fastcall TFormDetail::SetData(AnsiString asTbl)

{

   Caption=" Свойства таблицы - " + asTbl;

   asT=asTbl; 

   TStrings* pS=MemoTrig->Lines;

   pS->Clear();

   DBM->DataField=""; 

    int nRecs=IBQueryEx(Q, "select * from RDB$TRIGGERS where         RDB$RELATION_NAME='" +

    asT + "' and RDB$SYSTEM_FLAG=0 order by RDB$TRIGGER_TYPE, RDB$TRIGGER_SEQUENCE", blSELECT, blFIRSTREC); 

   if(nRecs)

   {

       DBM->DataField="RDB$TRIGGER_SOURCE"; 

       for(int rec=0; rec<nRecs; rec++)

        {

          if(rec) Q->Next();

          pS->Add("");

        pS->Add(Trim(AS(Q->FLD["RDB$TRIGGER_NAME"])) + " -   ACTIVE " +                                                             pasTriggers[(short)(Q->FLD["RDB$TRIGGER_TYPE"])] + " - Position: " +

        IntToStr((short)(Q->FLD["RDB$TRIGGER_SEQUENCE"]))); 

          for(int l=0; l<DBM->Lines->Count; l++)

              pS->Add(DBM->Lines->Strings[l]);

       }

   }

   Show();

} 

       А5. Рисование иерархической структуры типа дерева

void __fastcall TNoteBook::CreateTTreeView(TObject *Sender)

{

   {

       TTreeNodes* pNN=TreeView1->Items;

       pNN->Clear(); 

       int nRecs=IBQueryEx(IBQNb, "select * from ADDR_OBJECTS where parent_id = -1", blSELECT, blFIRSTREC);

       if (!nRecs)

       {

          MessageBox(Handle, "Записи  отсутствуют", "Отмена операции", MB_OK);

          return;

       } 

       for(int rec=0; rec<nRecs; rec++)

       {

          if(rec) IBQNb->Next();

          TTreeNode* pN=pNN->Add(NULL, AS (IBQNb->FieldValues ["NAME"]));

          pN->Data=(void*)(int)(IBQNb->FieldValues ["ID"]);

       } 

       int level=0;

       int count=pNN->Count;

       for (;;)

       {

          for(int n=0; n<pNN->Count; n++)

          {

              TTreeNode* pN=pNN->Item[n];

              if(pN->Level!=level) continue;

              int id=(int)(pN->Data);

      int nRecs=IBQueryEx(IBQNb, "select * from ADDR_OBJECTS     where parent_id ="+ IntToStr(id), blSELECT, blFIRSTREC);

              for(int rec=0; rec<nRecs; rec++)

              {

                 if(rec) IBQNb->Next();

                 TTreeNode* pNew=pNN->AddChild(pN,AS

                 (IBQNb->FieldValues["Name"]));

                 pNew->Data=(void*)(int)(IBQNb->FieldValues ["ID"]);

              }

          }

       if(count==pNN->Count)break;

       else (count=pNN->Count);

       level++;

       }

   }   

}

Информация о работе Организация интерфейса для работы с базами данных