e1337e4016
docs/Kompas3D_SDK/ становится каноническим источником справки КОМПАС SDK и включается в репозиторий (2491 файл, ~14 МБ). HTML-зеркало docs/KOMPAS_SDK_ru-RU/ (~1.4 ГБ, © АСКОН) и генератор tools/build_kompas3d_sdk.py больше не нужны — регенерация не предполагается. - .gitignore: MD-база разблокирована; зеркало остаётся проигнорированным (safety-net на случай повторной локальной выгрузки). - CLAUDE.md / SKILL.md: убраны упоминания регенерации и зеркала. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
202 lines
6.6 KiB
Markdown
202 lines
6.6 KiB
Markdown
---
|
|
title: "Пример использования функций работы с базами данных"
|
|
type: guide
|
|
api: [api7]
|
|
tags: [guide, api7, func]
|
|
sources:
|
|
- func_rab_s_bases_example.html
|
|
---
|
|
|
|
|
|
## Пример использования функций работы с базами данных
|
|
|
|
//пример текстового файла 1.loa с тремя параметрами - шириной, высотой и типом линии прямоугольника
|
|
/*
|
|
10.0 100 1
|
|
15.0 80 2
|
|
20.0 120 1
|
|
*/
|
|
#ifndef __LIBTOOL_H
|
|
#include <libtool.h>
|
|
#endif
|
|
#ifndef __LIBDB_H
|
|
#include <libdb.h>
|
|
#endif
|
|
static void ReadFirstStatement(reference bd, reference r1, void *b) {
|
|
// вспомогательная функция чтения записей
|
|
char buf[40];
|
|
int i;
|
|
do { // считываем все записи выборки
|
|
i= ReadRecord(bd, r1, b);
|
|
if (i) {
|
|
sprintf(buf, "a=%4.1f b=%4.1f t= %d", b->a, b->b, b->t);
|
|
Message(buf);
|
|
}
|
|
} while(i);
|
|
Message("конец выборки");
|
|
} /* ReadFirstStatement */
|
|
void ExampleDB (void) {
|
|
int i;
|
|
char buf[40];
|
|
struct {
|
|
double a;
|
|
double b;
|
|
int t;
|
|
} b;
|
|
// создать блок заголовка базы данных
|
|
reference bd = CreateDB ("TXT_DB");
|
|
// связать с файлом базы данных 1.loa
|
|
ConnectDB(bd, "1.loa");
|
|
// задаем отношение из двух действительных и одного целого поля
|
|
reference r1 = Relation(bd);
|
|
RDouble ("a");
|
|
RDouble ("b");
|
|
RInt ("");
|
|
EndRelation();
|
|
// определяем запрос для считывания всех полей(колонок) записи
|
|
DoStatement(bd, r1, ""); // равносильно DoStatement(bd, r1, "1 2 3");
|
|
// cчитываем все записи
|
|
ReadFirstStatement(bd, r1, &b);
|
|
// выдать вторую запись
|
|
Condition(bd, r1, "Index1000 = 2");
|
|
ReadFirstStatement(bd, r1, &b);
|
|
// по условию выдать первую и третью запись(см. файл 1.loa)
|
|
Condition(bd, r1, "a=10 || b>100");
|
|
ReadFirstStatement(bd, r1, &b);
|
|
//задаем отношение для считывания только второго поля записи
|
|
reference r2 = Relation(bd);
|
|
RChar("b", 20, 0);
|
|
EndRelation();
|
|
// Освободить запрос базы данных
|
|
FreeStatement(bd, r1, «»);
|
|
DoStatement(bd, r2, "2");
|
|
do {
|
|
i= ReadRecord(bd, r2, buf);
|
|
if (i) {
|
|
Message(buf);
|
|
}
|
|
} while(i);
|
|
Message("конец выборки");
|
|
DisconnectDB(db);
|
|
// удаляем блок заголовка базы данных
|
|
DeleteDB(bd);
|
|
}; /* ExampleDB */
|
|
|
|
|
|
## Пример использования функций работы с фрагментами
|
|
|
|
void ReadFragment_Example (void) {
|
|
PlacementParam par;
|
|
par.xBase = 30; par.yBase = 40;
|
|
par.ang = 0; par.scale = 1 ;
|
|
ReadFragment("c:\\kompas5\\1.frw", 0, &par);
|
|
//Пример вставки фрагмента внешней ссылкой
|
|
//определим фрагмент для вставки
|
|
pDefFrg = FragmentDefinition("c:\\kompas5\\1.frw", "frw1", 1);
|
|
if(pDefFrg) {
|
|
PlacementParam par;
|
|
par.xBase = 80; par.yBase = 70;
|
|
par.ang = 45; par.scale = 2 ;
|
|
reference pInsFrg = InsertFragment(pDefFrg, 0, &par);
|
|
LightObj (pInsFrg, 1);
|
|
Message("вставка фрагмента внешней ссылкой");
|
|
LightObj (pInsFrg, 0);
|
|
}
|
|
// Пример вставки локального фрагмента
|
|
// определим фрагмент для вставки
|
|
reference pDefFrg = 0;
|
|
//определим локальный фрагмент
|
|
if(LocalFragmentDefinition("local")) {
|
|
LineSeg(0, 0, 10, 0, 1);
|
|
LineSeg(0, 0, 0, 10, 1);
|
|
ArcByPoint(0, 0, 10, 10, 0, 0,10, -1, 1);
|
|
pDefFrg = CloseLocalFragmentDefinition();
|
|
}
|
|
if(pDefFrg) {
|
|
PlacementParam par;
|
|
par.xBase = 100; par.yBase = 40;
|
|
par.ang = 45; par.scale = 1 ;
|
|
reference p = InsertFragment(pDefFrg, 0, &par);
|
|
LightObj (p, 1);
|
|
Message("вставка локального фрагмента");
|
|
LightObj (p, 0);
|
|
}
|
|
}; /* ReadFragment */
|
|
|
|
|
|
## Пример использования функций для редактирования допуска формы
|
|
|
|
// редактирование допуска формы
|
|
reference pObj;
|
|
RequestInfo info;
|
|
double x, y;
|
|
memset(&info, 0, sizeof(info));
|
|
info.prompt = "Укажите допуск формы";
|
|
int j = Cursor(&info, &x, &y, 0);
|
|
if (j) {
|
|
if(ExistObj(pObj = FindObj(x, y, MAXDOUBLE))){
|
|
//узнаем тип объекта
|
|
int type =GetObjParam( pObj,0,0,0); //указатель на графический
|
|
объект
|
|
if (type == TOLERANCE_OBJ) {
|
|
unsigned int numb;
|
|
char buf[128];
|
|
//открыть допуск формы для редактирования
|
|
ksOpenTolerance(pObj);
|
|
ToleranceParam par;
|
|
//параметры допуска формы
|
|
GetObjParam( pObj, //указатель на графический объект
|
|
&par, //указатель на структуру параметров
|
|
sizeof(ToleranceParam), //размер структуры
|
|
параметров
|
|
ALLPARAM); //тип считывания параметров
|
|
sprintf(buf, "базовая точка=%d стиль=%d расположение-%s\nx=%5.1f
|
|
y=%5.1f ",
|
|
par.tBase, par.style, par.type ?
|
|
"вертикальное":"горизонтальное", par.x, par.y);
|
|
Message(buf);
|
|
TextLineParam par1;
|
|
//в цикле будем брать все существующие ячейки
|
|
while (ksGetToleranceColumnText(&numb, &par1)!=0) {
|
|
sprintf(buf, "numb =%d ", numb);
|
|
Message(buf);
|
|
sprintf(buf, "style=%d ", par1.style);
|
|
Message(buf);
|
|
TextItemParam par3;
|
|
for (int j=0; j< GetArrayCount(par1.pTextItem); j) {
|
|
GetArrayItem(par1.pTextItem, j, &par3, sizeof(TextItemParam));
|
|
if (!par3.tip)
|
|
sprintf(buf, "компонента=%d h=%5.1f\ns=%s\n
|
|
fontName=%s\nбитвектор =%d ",j,par3.font.height,par3.s,
|
|
par3.font.fontName, par3.font.bitVector);
|
|
else
|
|
sprintf(buf, "компонента=%d тип = %d номер спецзнака=%d
|
|
",j,par3.tip,par3.iSNumb);
|
|
Message(buf);
|
|
}
|
|
DeleteArray(par1.pTextItem); //очистим массив компонент
|
|
}
|
|
//заменим параметры
|
|
par.x = 10;
|
|
par.y = 10;
|
|
SetObjParam( pObj, //указатель на графический объект
|
|
&par, //указатель на структуру параметров
|
|
sizeof(ToleranceParam ), //размер структуры
|
|
параметров
|
|
ALLPARAM); //тип считывания параметров
|
|
ColumnNumber(2);
|
|
TextLine (NEW_LINE ,0,0 ,"вторая ячейка");
|
|
ksDivideTableItem(3, 1, 2);
|
|
ColumnNumber(4);
|
|
TextLine (NEW_LINE ,0,0 ,"4");
|
|
// ksSetTableBorderStyle(1,2,1);
|
|
// ksClearTableColumnText(0);
|
|
EndObj();//закрыли объект "допуск формы"
|
|
}
|
|
else
|
|
Error("это не допуск формы");
|
|
}
|
|
else
|
|
Error("нет объекта");
|
|
}
|