Автор работы: Пользователь скрыл имя, 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. Листинг соединения с БД
void __fastcall
TForm_DB_Props::
{
OpenDlg->Title=" Выбор исходной БД"; /*при клике на соединение с бд открываем папку с нужным именем*/
if(!OpenDlg->Execute()) return; /*если папка не нажата
,то выйти*/
if(IBDB1->Connected) /*при открытой 1-ой базе */
IBDB1->Close();
/*закрыть 1-ю базу*/
EditDBName->Clear(); /*почистить окно редактирования со списком таблиц*/
TVSource->Items->Clear();
AS asDB=OpenDlg->FileName;
IBDB1->DatabaseName=
IBDB1->Open();
EditDBName->Text=asDB; /* в поле с именами баз данных записать текст как в базе данных*/
GetTableList();
mmQuery->Enabled=true;
}
А2. Листинг работы кнопок выбора типа просматриваемых таблиц
void __fastcall
TForm_DB_Props::GetTableList(
{
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->
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(
{
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$
for(int rec=0; rec<nRecs; rec++)
{
if(rec) Q->Next();
pS->Add("");
pS->Add(Trim(AS(Q->FLD["RDB$
IntToStr((short)(Q->FLD["RDB$
for(int l=0; l<DBM->Lines->Count; l++)
pS->Add(DBM->
}
}
Show();
}
А5. Рисование иерархической структуры типа дерева
void __fastcall
TNoteBook::CreateTTreeView(
{
{
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 level=0;
int count=pNN->Count;
for (;;)
{
for(int n=0; n<pNN->Count; n++)
{
TTreeNode* pN=pNN->Item[n];
if(pN->Level!=
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->
pNew->Data=(
}
}
if(count==pNN->Count)
else (count=pNN->Count);
level++;
}
}
}
Информация о работе Организация интерфейса для работы с базами данных