Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебное пособие 3000392.doc
Скачиваний:
18
Добавлен:
30.04.2022
Размер:
2.94 Mб
Скачать

4. Работа с базами данных

Базы данных достаточно часто используются для хранения и размещения электронной информации, поиск которой осуществляется посредством запросов со стороны пользователя. Для организации данных в системе Компас 3D определен набор команд, позволяющий реализовать вышеперечисленные задачи. Под базой данных понимается текстовый документ, имеющий расширение .loa. Текстовый документ, содержащий необходимые параметры, можно создать и отредактировать любой программой, входящей в комплект ОС Windows. Файл с простейшей базой данных для Компас 3D имеет следующий вид:

/*Пример базы данных.

x - координата х объекта

y - координата y объекта

r - радиус окружности

x y r */

80, 100, 5,

100, 135, 30,

70, 60, 15,

140, 45, 20,

192, 120, 50,

Из примера видно, что файл включает в себя группу цифр, размещенных построчно в несколько рядов. Отдельно взятая строка является взаимосвязанной структурой данных. Так в файле группа из 3 трех цифр позволяет нести информацию о координатах центра окружности с указанием ее радиуса. Базы данных в системе Компас 3D могут иметь более сложную структуру, а одни параметры строки, представленные цифрами, могут находиться в прямой или косвенной зависимости от других. Типичным примером для создания базы данных является номенклатура некоторых крепежных элементов, например винтов, определенных по ГОСТ 1491-80,11738-84.

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

TCHAR fileName[]=_T( "./Load/1154 .loa ");

Однако проще организовать для пользователя диалог по загрузке базы данных с произвольного каталога жесткого диска или сменного носителя. Для создания блока заголовка базы данных используется команда CreateDB. Функция позволяет открыть БД. Одновременно может быть открыто несколько БД. Формат команды следующий:

reference CreateDB( char *s ) где,

s-тип базы данных: TXT_DB - база данных текстового формата.

Команда ConnectDB позволяет связать заголовок и базу данных. Формат команды следующий:

int ConnectDB (reference bd, char * dataBaseName) где,

bd- указатель на блок заголовка, созданный при помощи функции CreateDB,

dataBaseName- имя БД (для базы данных, доступной через интерфейс ODBC - имя БД в администраторе ODBC, для базы данных текстового формата - имя файла).

Далее необходимо соотнести поля чтения по колонкам с некоторым указателем путем команды Relation- создать новое отношение. Отношение характеризует один запрос и представляет собой описание памяти, необходимой для размещения очередной записи выборки, выполняемого функцией ReadRecord. Является составным объектом, каждое поле которого описывает тип и имя поля (колонки) в таблице базы данных. Имя действительно только в случае работы с текстовым файлом, так как при обмене через ODBC-интерфейс имена уже описаны в блоке заголовка. Количество отношений, определенных для базы данных, не ограничивается. Формат команды следующий:

reference Relation (reference bd) где,

db- указатель на объект БД.

Для обращения к базе данных применяется команда DoStatement. Синтаксис команды следующий:

int DoStatement (reference bd, reference rel, char * str) где,

bd- указатель на объект БД,

rel- действительный указатель на отношение,

str- запрос к БД.

После обращения к базе данных происходит построчное связывание потока с элементами структуры (struct {}), созданной стандартными средствами языка C. Для нескольких параметров базы данных структура может иметь следующий вид:

struct {int par1,par2,par3,…, parn ;}datas;

В следующем примере реализована работа по обращению к базе данных.

void DrawTxtDB()

{

TCHAR fileName[255];

// Диалоговое окно при выборе базы данных

if ( ksChoiceFileT( _T("*.loa"),

_T("Базы данных( *.loa )|*.loa|Все файлы ( *.* )|*.*|"),fileName, 255,1))

{

reference rDataBase = CreateDBT( _T("TXT_DB") );

if ( ConnectDBT( rDataBase, fileName ) )

{

reference rRelation = Relation( rDataBase );

RDoubleT( _T("x") );

RDoubleT( _T("y") );

RDoubleT( _T("") );

EndRelation();

//Колонка x - 1, y - 2, оставшаяся колонка - 3

DoStatementT( rDataBase, rRelation, _T("1 2 3") );

TCHAR buf[255];

//Структура для считывания информации из базы

struct {

//Координаты объекта

double x, y ;

//Радиус окружности

double r;

}record;

// Считывание данных из базы

int pointer=1;

int counter =0;

while (pointer )

{

//Считать очередную строку и загрузить в структуру record

pointer=ReadRecord( rDataBase, rRelation, &record );

if ( pointer )

{

_stprintf( buf, _T("x=%4.1f,y=%4.1f,r=%4.1f"), record.x, record.y, record.r );

MessageT( buf );

Circle( record.x, record.y, record.r, 1);

counter++;

}

}

_stprintf( buf, _T("База данных прочитана, всего записей %d"), counter );

MessageT( buf );

}

DeleteDB( rDataBase );

}

}

Результат выполнения представлен на рис. ----.

Результат работы с базой данных элементов представлен на рис. 22.

Рис. 22. Последовательное чтение значений с базы данных и отображение окружностей на плоскости