Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Курсовые / 1 / STASKURS / Курсовая работа.doc
Скачиваний:
19
Добавлен:
17.04.2013
Размер:
1.63 Mб
Скачать

Московский Государственный Институт Электронной техники

(Технический Университет)

Кафедра Вычислительная Техника”.

Курсовой проект по дисциплине

Организация вычислительных процессов”:

“Система управления базой данных по файлам”.

Разработал студент группы МП-22

Крылов С.Л.

Москва

2001 год.

Техническое задание.

Разработать систему управления базой данных по дискетам(допускается по любым носителям информации: CDROM,кассетам с магнитной лентой для стриммеров и т.д.). Предусмотреть поля идентификации дискеты(тип , размер , фирма-изготовитель) и поля содржимого файлов на дискете(имя файла, дата создания, время создания, размер файла, комментарий специалиста, ведущего архив).Предусмотреть средства автоматического занесения имён файлов с дискеты в базу данных. Разработать механизм запросов к базе данных по поиску файлов, интересующих пользователя.

Введение.

Если посмотреть на современные потребности в программном обеспечении, то можно выделить несколько основных, в число которых органично входят и системы управления базами данных. Действительно, объём информации в любой организации настолько велик, что его обработка без использования специальных систем хотя и возможна, но добавляет огромное количество никому не нужных проблем. Именно по этому разработкой систем управления базами данных занимаются практически все ведущие производители программного обеспечения.

База данных - это прежде всего набор таблиц, хотя в базу данных могут входить также процедуры и ряд других объектов. Таблицу можно представлять себе как обычную двумерную таблицу с характеристиками (атрибутами) какого-то множества объектов. Таблица имеет имя – идентификатор, по которому на неё можно сослаться. Столбцы таблицы соответствуют тем или иным характеристикам объектов – полям. Каждое поле характеризуется именем и типом хранящихся данных. Имя поля – это идентификатор, который используется в различных программах для манипуляции данными. Он строится по тем же правилам, как любой идентификатор, т.е. пишется латинскими буквами, состоит из одного слова и т.д. Таким образом, имя – это не то, что отображается на экране или в отчёте в заголовке столбца (это отображение естественно писать по-русски), а идентификатор, соответствующий этому заголовку.

Тип поля характеризует тип хранящихся в поле данных.Это могут быть строки, числа, булевы значения,большие тексты(например, комментарии специалиста к файлу),изображения и т.п.

Каждая строка таблицы соответствует одному из объектов. Она называется записью и содержит значения всех полей, характеризующие данный объект.

При построении таблиц баз данных важно обеспечивать непротиворечивость информации. Обычно это делается введением ключевых полей – обеспечивающих уникальность каждой записи. Ключевым может быть одно или несколько полей.

При работе с таблицей пользователь или программа как бы скользит курсором по записям. В каждый момент времени есть некоторая текущая запись, с которой и ведётся работа. Записи в таблице базы данных физически могут располагаться без какого-либо порядка, просто в последовательности их ввода. Но когда данные таблицы предъявляются пользователю, они должны быть упорядочены. Пользователь может хотеть просматривать их в алфавитном порядке или отсортированными по какому-либо другому признаку. Для упорядочивания данных используется понятие индекса. Индекс показывает, в какой последовательности желательно просматривать таблицу. Он является как бы посредником между пользователем и таблицей.

Курсор скользит по индексу, а индекс указывает на ту или иную запись таблицы. Для пользователя таблица выглядит упорядоченной, причём он может сменить индекс и последовательность просматриваемых записей изменится. Но в действительности это не связано с какой-то перестройкой самой таблицы и с физическим перемещением в ней записей. Меняется только индекс, т.е. последовательность ссылок на записи.

Индексы могут быть первичными и вторичными. Например, первичным индексом могут служить поля, отмеченные при создании базы данных как ключевые. А вторичные индексы могут создаваться из других полей как в процессе создания самой базы данных, так и позднее в процессе работы с ней. Вторичным индексам можно присваивать имена – идентификаторы, по которым их можно использовать. Если индекс включает в себя несколько полей, то упорядочивание базы данных сначала осуществляется по первому полю, а для записей, имеющих одинаковые значения первого поля – по второму и т.д.

Создают базы данных и обрабатывают запросы к ним системы управления базами данных –СУБД. Известно множество СУБД, различающихся своими возможностями или обладающих примерно равными возможностями и конкурирующих друг и другом:Paradox, Microsoft Access, FoxPro, Oracle, InterBase, Sybase и много других.

Разные СУБД по-разному организуют и хранят базы данных. Например, Paradox и dBase используют для каждой таблицы отдельный файл. В этом случае база данных – это каталог, в котором хранятся файлы таблицы.

Поскольку конкретные свойства баз данных очень разнообразны, пользователю было бы весьма затруднительно работать, если бы он должен был указывать в своём приложении все эти каталоги, файлы, серверы и т.п. Да и приложение часто пришлось бы переделывать при смене, например, структуры каталогов и при переходе с одного компьютера на другой. Чтобы решить эту проблему, используют псевдонимы баз данных. Псевдоним (alias) содержит всю информацию, необходимую для обеспечения доступа к базе данных. Эта информация сообщается только один раз при создании псевдонима. А приложение для связи с базой данных использует псевдоним. В этом случае приложению безразлично, где физически расположена та или иная база данных, а часто безразлична и СУБД, создавшая и обслуживающая эту базу данных. При смене системы каталогов, сервера, и т.п. ничего в приложении переделывать не надо. Достаточно, чтобы администратор базы данных ввёл соответствующую информацию в псевдоним.

При работе с базами данных часто используется кэширование всех изменений. Это означает, что все изменения данных, вставка новых записей, удаление существующих записей, т.е. все манипуляции с данными, проводимые пользователем, сначала делаются не в самой базе данных, а запоминаются в памяти во временной, виртуальной таблице. И только по особой команде после всех проверок правильности вносимых в таблицу данных пользователю предоставляется возможность или зафиксировать все эти изменения в базе данных, или отказаться от этого и вернутся к тому состоянию, которое было до начала редактирования.

Для разных задач целесообразно использовать различные модели баз данных. Процесс определения того, какая база данных более подходит для конкретного приложения, называется масштабированием. Существуют следующие модели баз данных:

  • Автономные базы данных. Они являются наиболее простыми. Автономные локальные базы данных хранят свои данные в локальной файловой системе на том компьютере, на котором установлены; система управления и машина базы данных, осуществляющая к ним доступ, находится на том же самом компьютере. Сеть не используется. Автономные базы данных не используются для приложений, требующих значительной вычислительной мощности, потому что процессорное время будет потрачено на выполнение манипуляций с данными и в целом будет потеряно для приложения. Они полезны для развития тех приложений, которые распространены среди многих пользователей, каждый из которых поддерживает отдельную базу данных.

  • Файл-серверные базы данных. Эти базы данных могут быть доступны многим клиентам через сеть. Сама база данных хранится на сетевом файл-сервере в единственном экземпляре. Для каждого клиента во время работы создаётся локальная копия данных, с которой он манипулирует. Одним из недостатков баз данных файл-сервер является непроизводительная загрузка сети. При каждом запросе клиента данные в его локальной копии полностью обновляются из базы данных на сервере. Если записей в базе данных много, то даже при небольшом количестве клиентов сеть будет загружена основательно, что серьёзно скажется на скорости выполнения запросов. Другой недостаток связан с тем, что забота о целостности данных при такой организации работы возлагается на программы клиентов.

  • Базы данных клиент/сервер. В этом случае доступ к базе данных для группы клиентов выполняется специальным компьютером – сервером. Подобная организация работы повышает эффективность выполнения приложений за счёт использования мощности сервера, разгружает сеть, обеспечивает хороший контроль целостности данных.

  • Многоярусные базы данных. Это новый и многообещающий путь обработки данных в сети. Наиболее распространён трехярусный вариант:

  • На нижнем уровне на комьютерах пользователя расположены приложения клиентов, обеспечивающие пользовательский интерфейс.

  • На втором уровне расположен сервер приложений, обеспечивающий обмен данными между пользователями и распределёнными базами данных. Сервер приложений размещается в узле сети, доступном всем клиентам.

  • На третьем уровне расположен удалённый сервер баз данных, принимающий информацию от серверов приложений и управляющий ими.

При проектировании структуры новой БД определяют сущности (объекты, явления) предметной области, которые должны найти своё отражение в базе данных. Анализ предметной области обычно осуществляется на основании известных сведений о ней с учётом целеё проектирования программной среды. В результате анализа создаётся проект БД.

Процесс проектирования БД в немалой степени зависит от опыта и интуиции разработчика, т.е. является творческим, однако некоторые его моменты можно формализовать. Одной из таких формализаций является требование, согласно которому реляционная база, т.е. база данных, между отдельными таблицами которой существуют связи, должна быть нормализована. Процесс нормализации имеет своей целью устранение избыточности данных и заключается в приведении к третьей нормальной форме (3НФ).

  • Первая нормальная форма (1НФ) требует, чтобы каждое поле таблицы БД было неделимым и не содержало повторяющихся групп. Неделимость поля означает, что содержащиеся в нём значения не должны делится на более мелкие. Повторяющимися являются поля, содержащие одинаковые по смыслу значения.

  • Вторая нормальная форма (2НФ) требует, чтобы все поля таблицы зависели от первичного ключа, т.е. чтобы первичный ключ однозначно определял запись и не был избыточен. Те поля, которые зависят только от части первичного ключа должны быть выделены в составе отдельных таблиц.

  • Третья нормальная форма (3НФ) требует, чтобы в таблице не имелось транзитивных зависимостей между неключевыми полями, т.е. чтобы значение любого поля, не входящего в первичный ключ, не зависело от значения другого поля, также не входящего в первичный ключ.

Листинг программы.

Unit1.cpp

//---------------------------------------------------------------------------

#include <string.h>

#include <SysUtils.hpp>

#include <time.h>

#include <stdio.h>

#include <stdlib.h>

#include <dir.h>

#include <string.h>

#include <math.h>

#include <conio.h>

#include <dos.h>

#include <vcl.h>

#pragma hdrstop

#include "Stas.h"

#include "Unit2.h"

//---------------------------------------------------------------------------

#pragma package(smart_init)

#pragma resource "*.dfm"

TForm1 *Form1;

bool n,p;

//---------------------------------------------------------------------------

__fastcall TForm1::TForm1(TComponent* Owner)

: TForm(Owner)

{

}

//---------------------------------------------------------------------------

void __fastcall TForm1::RadioGroup1Click(TObject *Sender)

{

if(RadioGroup1->ItemIndex==0)

{PAvtomatVod->Visible=true;

PRuchVod->Visible=false;

PVspomVod->Visible=false;

DriveComboBox1->Color=clWhite;

DirectoryListBox1->Color=clWhite;

DriveComboBox1->Enabled=true;

DirectoryListBox1->Enabled=true;

}

if(RadioGroup1->ItemIndex==1)

{PAvtomatVod->Visible=true;

PRuchVod->Visible=true;

PVspomVod->Visible=true;

DriveComboBox1->Color=clMenu;

DirectoryListBox1->Color=clMenu;

DriveComboBox1->Enabled=false;

DirectoryListBox1->Enabled=false;

}

}

//---------------------------------------------------------------------------

void __fastcall TForm1::DriveComboBox1Change(TObject *Sender)

{

DirectoryListBox1->Drive=DriveComboBox1->Drive;

}

//---------------------------------------------------------------------------

void __fastcall TForm1::BVodAvtClick(TObject *Sender)

{

struct ffblk X; // Ввод данных автоматически

int done;

int drive;

AnsiString d,m,a,dat;

Query1->Active=false;

DataSource1->DataSet=Table1;

Table1->Active=false;

Table1->Active=true;

if(CBObemRazmAvt->Text==""||MEObemAvt->Text=="")

{

ShowMessage("Введите объем носителя");

return;

}

Table1->Insert();

drive=DriveComboBox1->Drive;

setdisk(drive);

done = findfirst("*.*",&X,FA_SYSTEM|FA_DIREC | FA_HIDDEN| FA_ARCH | FA_RDONLY);

while (!done)

{

if ((X.ff_attrib==FA_DIREC) || (AnsiStrScan(X.ff_name,'.')==NULL))

{

done = findnext(&X);

continue;

}

if (((AnsiString)X.ff_name==".")||((AnsiString)X.ff_name==".."))

{

done = findnext(&X);

continue;

}

else{

Table1->Insert();

try{

Table1->FieldByName("Type_volume")->AsFloat=StrToFloat(MEObemAvt->Text);

}

catch(...){

ShowMessage("Введено неверное значение");

return;

}

Table1->FieldByName("File_name")->AsString=((AnsiString)X.ff_name);

Table1->FieldByName("File_size")->AsFloat=(X.ff_fsize);

Table1->FieldByName("File_size_razm")->AsString=razmer(X.ff_fsize);

d=day(X.ff_fdate);

m=month(X.ff_fdate);

a=age(X.ff_fdate);

dat=(d+"."+m+"."+a);

Table1->FieldByName("File_data")->Value=StrToDate(dat);

Table1->FieldByName("Type")->AsString=CBTypeAvt->Text;

Table1->FieldByName("Firma")->AsString=CBFirmaAvt->Text;

Table1->FieldByName("Description")->AsString=MVodKomentarAvt->Text;

Table1->FieldByName("Type_volume_razm")->AsString=CBObemRazmAvt->Text;

Table1->Post();

done = findnext(&X);

}

}

Table1->Active=true;

}

//---------------------------------------------------------------------------

Void __fastcall tForm1::cbFirmaAvtEnter(tObject *Sender)

{ //Сортировка по имени фирм и

Table1->Active=false; // исключение совпадений одинаковых

Query1->Close(); // имен фирм с заносам их названий в копонент

Query1->SQL->Clear(); // "Фирма-изготовитель"

Query1->SQL->Add("Select distinct Firma from bd4 order by firma ");

Query1->Active=true;

CBFirmaAvt->Items->Clear();

Query1->First();

while( !Query1->Eof)

{

CBFirmaAvt->Items->Add(Query1->FieldByName("Firma")->AsString);

Query1->Next();

}

Query1->Close();

Query1->Active=false;

DataSource1->DataSet=Table1;

Table1->Active=true;

}

//---------------------------------------------------------------------------

void __fastcall TForm1::CBFirmaREnter(TObject *Sender)

{

Table1->Active=false;

Query1->Close();

Query1->Active = false;

Query1->SQL->Clear();

Query1->SQL->Add("Select distinct Firma from bd4 order by firma ");

Query1->Active = true;

CBFirmaR->Items->Clear();

Query1->First();

while( !Query1->Eof)

{

CBFirmaR->Items->Add(Query1->FieldByName("Firma")->AsString);

Query1->Next();

}

Query1->Open();;

Query1->Close();

Query1->Active=false;

Query1->Open();

}

//---------------------------------------------------------------------------

void __fastcall TForm1::BVodRClick(TObject *Sender)

{DataSource1->DataSet=Table1;

Table1->Active=true;

Nam(ENameR->Text); //ВВод данных в базу вручную

Data(MEDataR->Text);

if(MESizeR->Text=="")

return;

if(CBSizeRazmR->Text=="")

return;

if(CBFirmaR->Text=="")

return;

if(MEObemR->Text=="")

return;

if(CBRazmR->Text=="")

return;

if (n==true||p==true)

{ n=false;

p=false;

return;

}

else if(n==false&&p==false)

{ Table1->Insert();

try{

Table1->FieldByName("Type_Volume")->AsFloat=StrToFloat(MEObemR->Text);

}

catch(...)

{

ShowMessage("Введено неверное значение");

return;

}

Table1->FieldByName("File_size")->AsString=MESizeR->Text;

Table1->FieldByName("Type_Volume")->AsString=MEObemR->Text;

Table1->FieldByName("File_size_razm")->AsString=CBSizeRazmR->Text;

Table1->FieldByName("Type")->AsString=CBTypeR->Text;

Table1->FieldByName("Type_volume_razm")->AsString=CBRazmR->Text;

Table1->FieldByName("Firma")->AsString=CBFirmaR->Text;

Table1->FieldByName("Description")->AsString=MKomentrR->Text;

Table1->FieldByName("File_name")->AsString=ENameR->Text;

Table1->FieldByName("File_data")->AsString=MEDataR->EditText;

Table1->Post();

}

}

//---------------------------------------------------------------------------

void __fastcall TForm1::Table1CalcFields(TDataSet *DataSet) //Создание вычисляемого поля

{ // с вычисление для него данных

if(Table1->FieldValues["File_size"]<1024.0)

Table1->FieldValues["File_size_new"]=(Table1->FieldValues["File_size"]);

if (Table1->FieldValues["File_size"]>=(1024.0*1024.0))

Table1->FieldValues["File_size_new"]=(Table1->FieldValues["File_size"]/(1024.0*1024.0));

if((Table1->FieldValues["File_size"]<(1024.0*1024.0))&&(Table1->FieldValues["File_size"]>=1024.0))

Table1->FieldValues["File_size_new"]=((float)Table1->FieldValues["File_size"]/1024.0);

}

//---------------------------------------------------------------------------

void __fastcall TForm1::TSPoiskEnter(TObject *Sender)

{

Table1->Active=false;

DataSource1->DataSet=Query2;

Query2->Close();

DBMemo1->DataSource=DataSource1;;

Query2->Active=false;

}

//---------------------------------------------------------------------------

void __fastcall TForm1::Query2CalcFields(TDataSet *DataSet)

{

if(Query2->FieldValues["File_size"]<1024.0)

Query2->FieldValues["File_size_new"]=(Query2->FieldValues["File_size"]);

if (Query2->FieldValues["File_size"]>=(1024.0*1024.0))

Query2->FieldValues["File_size_new"]=(Query2->FieldValues["File_size"]/(1024.0*1024.0));

if((Query2->FieldValues["File_size"]<(1024.0*1024.0))&&(Query2->FieldValues["File_size"]>=1024.0))

Query2->FieldValues["File_size_new"]=((float)Query2->FieldValues["File_size"]/1024.0);

}

//---------------------------------------------------------------------------

void __fastcall TForm1::BitBtn4Click(TObject *Sender)

{

Close();

}

//---------------------------------------------------------------------------

void __fastcall TForm1::EFileNamePChange(TObject *Sender)

{

char bufer[256]; //Поиск по имени файла и по звездочке

AnsiString dat ,nam_new,text;

DataSource1->DataSet=Query2;

Query2->Close();

if(EFileNameP->Modified==true)

{ if(EFileNameP->Text=="*.*")

{

Query2->SQL->Clear();

Query2->SQL->Add("SELECT * FROM bd4 ");

Query2->Open();

}

else { if (AnsiStrScan(EFileNameP->Text.c_str(),'*')!=NULL)

{ sprintf(bufer,"%s",EFileNameP->Text.c_str());

char *ptr = strchr(bufer,'*');

bufer[ptr-bufer]='%';

text=((AnsiString)bufer);

Query2->SQL->Clear();

TParam *newParam5=Query2->Params->CreateParam(ftString, "File_name",ptInput);

newParam5->AsString=text;

Query2->SQL->Add("SELECT * FROM bd4 WHERE File_name LIKE :dat");

Query2->Params->ParamByName("dat")->AsString=text;

Query2->Open();

}

else {

Query2->SQL->Clear();

TParam *newParam5=Query1->Params->CreateParam(ftString, "File_name",ptInput);

newParam5->AsString=EFileNameP->Text;

Query2->SQL->Add("SELECT * FROM bd4 WHERE File_name LIKE :dat");

Query2->Params->ParamByName("dat")->AsString=EFileNameP->Text;

Query2->Open();

}

}

}

}

//---------------------------------------------------------------------------

void __fastcall TForm1::BitBtn1Click(TObject *Sender)

{

AnsiString x; //Поиск по размеру файла

AnsiString raz;

float siz=0,siz2=0;

Table1->Close();

DataSource1->DataSet=Query2;

Query2->Close();

Query2->SQL->Clear();

if(CBUslovieSizeP->Text=="равен")

{TParam *newParam2=Query2->Params->CreateParam(ftFloat, "File_size",ptInput);

newParam2->AsFloat=siz2;

}

TParam *newParam1=Query2->Params->CreateParam(ftFloat, "File_size",ptInput);

newParam1->AsFloat=siz;

TParam *newParam=Query2->Params->CreateParam(ftString, "File_size_razm",ptInput);

newParam->AsString =raz;

if(CBUslovieSizeP->Text=="больше")

Query2->SQL->Add("SELECT * FROM bd4 WHERE (File_size>:siz) AND (File_size_razm>=:raz)");

if(CBUslovieSizeP->Text=="меньше")

Query2->SQL->Add("SELECT * FROM bd4 WHERE (File_size<:siz) AND (File_size_razm<=:raz)");

if(CBUslovieSizeP->Text=="равен")

Query2->SQL->Add("SELECT * FROM bd4 WHERE (File_size BETWEEN :siz AND :siz2) AND (File_size_razm=:raz)");

if(CBRazmP->Text=="Мбайт")

{ Query2->Params->ParamByName("raz")->AsString=CBRazmP->Text;

Query2->Params->ParamByName("siz")->AsFloat=1024*1024*(StrToFloat(ESizeP->Text));

if(CBUslovieSizeP->Text=="равен")

{

Query2->Params->ParamByName("siz2")->AsFloat=1024*1024*(StrToFloat(ESizeP->Text)*1.0001);

Query2->Params->ParamByName("siz")->AsFloat=1024*1024*(StrToFloat(ESizeP->Text)*0.997);

}

Query2->Open();

}

if(CBRazmP->Text=="Кбайт")

{

Query2->Params->ParamByName("raz")->AsString=CBRazmP->Text;

Query2->Params->ParamByName("siz")->AsFloat=1024*(StrToFloat(ESizeP->Text));

if(CBUslovieSizeP->Text=="равен")

{

Query2->Params->ParamByName("siz2")->AsFloat=1024*(StrToFloat(ESizeP->Text)*1.005);

Query2->Params->ParamByName("siz")->AsFloat=1024*(StrToFloat(ESizeP->Text)*0.995);

}

Query2->Open();

}

if(CBRazmP->Text=="Байт")

{

Query2->Params->ParamByName("raz")->AsString=CBRazmP->Text;

Query2->Params->ParamByName("siz")->AsFloat=StrToFloat(ESizeP->Text);

if(CBUslovieSizeP->Text=="равен")

{

Query2->Params->ParamByName("siz2")->AsFloat=(StrToFloat(ESizeP->Text));

Query2->Params->ParamByName("siz")->AsFloat=(StrToFloat(ESizeP->Text));

}

Query2->Open();

Query2->Active=true;

}

}

//---------------------------------------------------------------------------

void __fastcall TForm1::BitBtn2Click(TObject *Sender)

{

//Поиск по дате создания файла

AnsiString dat;

Table1->Active=false;

DataSource1->DataSet=Query2;

Query2->Close();

Query2->SQL->Clear();

if(CBUslDatP->Text=="до")

{TParam *newParam=Query2->Params->CreateParam(ftDate, "File_data",ptInput);

newParam->AsDate=Edit1->Text;

Query2->SQL->Add("SELECT * FROM bd4 WHERE File_data<=:dat");

Query2->Params->ParamByName("dat")->AsDate=Edit1->Text;

Query2->Open();

}

if(CBUslDatP->Text=="после")

{ TParam *newParam=Query2->Params->CreateParam(ftDate, "File_data",ptInput);

newParam->AsDate=Edit1->Text;

Query2->SQL->Add("SELECT * FROM bd4 WHERE File_data>=:dat");

Query2->Params->ParamByName("dat")->AsDate=Edit1->Text;

Query2->Open();

}

if(CBUslDatP->Text=="равной")

{ TParam *newParam=Query2->Params->CreateParam(ftDate, "File_data",ptInput);

newParam->AsDate=Edit1->Text;

Query2->SQL->Add("SELECT * FROM bd4 WHERE File_data=:dat");

Query2->Params->ParamByName("dat")->AsDate=Edit1->Text;

Query2->Open();

}

}

//---------------------------------------------------------------------------

void __fastcall TForm1::TSRedaktEnter(TObject *Sender)

{

Query2->Close();

Query1->Close();

DataSource1->DataSet=Table1;

Table1->Active=true;

}

//---------------------------------------------------------------------------

void __fastcall TForm1::TSRedaktShow(TObject *Sender)

{

Query2->Close();

Query1->Close();

DataSource1->DataSet=Table1;

Table1->Active=true;

DBGrid1->ReadOnly=false;

}

//---------------------------------------------------------------------------

void __fastcall TForm1::BitBtn3Click(TObject *Sender)

{

while( !Table1->Eof) //Удаления записей из базы

{

Table1->First();

Table1->Delete();

Table1->Next();

}

}

//---------------------------------------------------------------------------

void __fastcall TForm1::TSVodShow(TObject *Sender)

{

Query2->Close();

Query1->Close();

DataSource1->DataSet=Table1;

Table1->Active=true;

}

//---------------------------------------------------------------------------

void __fastcall TForm1::TSPoiskShow(TObject *Sender)

{

Table1->Active=false;

DataSource1->DataSet=Query2;

Query2->Open();

Query1->Close();

}

//---------------------------------------------------------------------------

Соседние файлы в папке STASKURS