3. 第二模块(Master-Detail关系)
(1) 功能简介
本模块显示零件的加工工艺路线,其特点是提供一个组合框,允许用户从中选择零件(其实是零件编号),而一旦选择确定,程序将自动显示所选择零件的加工工艺路线。 (2) VCL组件对象及布局
在窗体上放置一个组框GroupBox、两个标签Label、两个表数据集ADOTable、两个数据源DataSource、一个数据查表组合框DBLookupComboBox和一个数据网格DBGrid组件,此时设计界面如图 9所示(本实验的全部七个模块共用一个数据库连接组件,以后不再说明。):
图 9 第二模块初始设计界面
(3) 组件对象的属性设置
按表 6~表 11顺序设置以上各VCL组件对象的属性。
表 6 组框与标签对象的属性设置
组件所属的选项卡 默认组件名 GroupBox2 Standard Label5 Label6 组件所属的选项卡 默认组件名 ADO ADOTable1 ADOTable2 组件 表数据集 组件 AutoSize属性 Caption属性 组框 标签 false false Master-Detail关系 零件工艺路线 零件编号 表 7 表数据集对象的属性设置
Name属性 Connection属性 Part Paths 组件 数据源 Engineering TableName属性 零件信息表 工艺路线表 Active属性 true 表 8 数据源对象的属性设置
组件所属的选项卡 默认组件名 DataAccess DataSource1 DataSource2 Name属性 DataSet属性 DSPart DSPaths Part Paths 为了能够实现自动显示用户所选择零件的加工工艺路线,还必须按表 9设置Name属性为“Paths”的表数据集的两个属性。
表 9 Paths表数据集对象的Master-Detail关系属性设置
Name属性 MasterSource属性 MasterFields属性 Paths 组件所属的选项卡 默认组件名 ADO DBLookupComboBox1 DSPart 组件 数据查表组合框 零件编号 表 10 数据查表组合框对象的属性设置
ListSource属性 ListField属性 DSPart 零件编号 KeyField属性 零件编号
表 11 数据网格对象的属性设置
组件所属的选项卡 默认组件名 DataControls DBGrid1 组件 数据网格 DataSource属性 DSPaths 保存并运行程序,发现数据网格可以正常显示用户所选择零件的工艺路线,但其第一列的宽度值过大,另外,显示的列也太多。下面做一些调整。
选中该数据网格对象,然后在属性面板中点击“Columns…”属性名后的
按钮,出现“Editing
按钮后,
DBGrid1->Columns”对话框(注意观察属性面板所发生的变化)。连续点击四次对话框中的对话框的内容如图 10所示。
图 10 “Editing DBGrid1->Columns”对话框
选中其中第一行(0-TColumn),在属性面板中将其“FieldName”属性设置为“零件编号”,“Width” 属性设置为“60”。同理可设置其余三行的“FieldName”属性分别为“工序号”、“工步号”和“工步代码”。“Width”属性值酌情确定。 (4) 保存并运行程序
点击C++Builder主工具栏上的“Save All”按钮,保存所有程序文件。 点击C++Builder主工具栏上的Run按钮
,运行程序。
4. 第三模块(数据查询-V带断面尺寸)
(1) 功能简介
本模块主要功能是根据用户所输入的V带型号,从数据库的“V带断面”数据表中查询出对应该型号的V带的顶宽(a)、断面高(h)、节宽(a0)、节高(y0)等断面尺寸值。 (2) VCL组件对象及布局
在窗体上放置一个组框GroupBox、一个图像Image、两个标签Label、一个编辑框Edit、一个查询数据集ADOQuery、一个数据源DataSource和一个数据网格DBGrid组件,设计界面如图 11所示:
图 11 第三模块初始设计界面
(3) 组件对象的属性设置
按表 12~表 17顺序设置以上各VCL组件对象的属性。
表 12 组框与标签对象的属性设置
组件所属的选项卡 默认组件名 组件 GroupBox3 Standard Label7 Label8 组件所属的选项卡 Standard 组件所属的选项卡 默认组件名 Additional Image1 组框 标签 AutoSize属性 false false 默认组件名 组件 Edit1 编辑框 Caption属性 数据查询-V带断面尺寸 V带型号 (A,B,C,D,E,F,O) 表 13 编辑框对象的属性设置
Text属性 (空值) 表 14 图像对象的属性设置
组件 AutoSize属性 Stretch属性 图像 false true Picture属性 (设置为图片文件“V带断面.JPG”) (图片文件“V带断面.JPG”应事先复制到程序所在的文件夹内。)
表 15 查询数据集对象的属性设置
组件所属的选项卡 默认组件名 ADO ADOQuery1 组件 Name属性 Connection属性 Engineering 查询数据集 VBelt 组件 表 16 数据源对象的属性设置
组件所属的选项卡 默认组件名 DataAccess DataSource1 Name属性 DataSet属性 VBelt 数据源 DSVBelt 组件 数据网格 表 17 数据网格对象的属性设置
组件所属的选项卡 默认组件名 DataControls DBGrid2 DataSource属性 DSVBelt (4) 编写编辑框(Edit1)对象的按键(KeyPress)事件过程
void __fastcall TForm1::Edit1KeyPress(TObject *Sender, char &Key) {
if(Key==13) { //如果按了回车键
VBelt->Close(); //关闭查询数据集
VBelt->SQL->Clear(); // 清除原有的SQL属性 VBelt->SQL->Add(\带断面 where 型号=:xh\ //设置SQL属性(带参数) VBelt->Parameters->ParamByName(\alue = Edit1->Text ; //设置参数值 VBelt->Open(); //打开查询数据集
for(int i=0;i<5;i++) { //设置数据网格控件各列宽度 DBGrid2->Columns->Items[i]->Width=45;
DBGrid2->Columns->Items[i]->Alignment = taLeftJustify; //设置左对齐方式或taCenter; }
Edit1->Clear(); //清除编辑框内的文本 } }
(5) 保存程序文件并做程序测试
点击C++Builder主工具栏上的“Save All”按钮,保存所有程序文件。 点击C++Builder主工具栏上的Run按钮
,运行程序。
在编辑框内输入要查询的V带型号(型号字母不区分大小写)后打回车键,下面的数据网格组件中会显示相应型号V带的顶宽、断面高、节宽、节高等断面尺寸值。
5. 第四模块(逐行处理数据集)
(1) 功能简介
本模块的功能是逐行处理一个表数据集中的记录,并把其中满足条件的记录显示在一个字符串网格控件中。本例同时演示了如何用非数据组件(前面第一至第三模块所用到的数据编辑框DBEdit、数据图像DBImage、数据网格DBGrid等都是数据组件)显示数据库中的数据。 (2) VCL组件对象及布局
在窗体上放置一个组框GroupBox、一个标签Label、一个字符串网格StringGrid、一个按钮Button和一个表数据集ADOTable组件,此时设计界面如图 12所示:
图 12 第四模块初始设计界面
(3) 组件对象的属性设置
按表 18~表 20顺序设置以上各VCL组件对象的属性。
表 18 组框、标签与命令按钮对象的属性设置 组件所属的选项卡 默认组件名 GroupBox4 Standard Label9 Button1 组件所属的选项卡 Additional 默认组件名 StringGrid1 组件 字符串网格 组件 组框 标签 命令按钮 AutoSize属性 false Caption属性 逐行处理数据集 顶宽在30~40之间的V带 执行动作 表 19 字符串网格对象的属性设置
DefaultRowHeight 16 DefaultColWidth RowCount 60 1 ColCount 2
表 20 表数据集对象的属性设置
组件所属的选项卡 默认组件名 ADO ADOTable1 组件 表数据集 Name属性 Connection属性 Belts Engineering TableName属性 V带断面 Active属性 true (4) 编写按钮(Button1)对象的单击(Click)事件过程
void __fastcall TForm1::Button1Click(TObject *Sender) {
int i=0; //计数器变量
Belts->First(); //将表数据集记录指针移到第一条记录
while (!Belts->Eof) { //如果记录指针尚未到达文件末尾(即指向某条记录) float w = Belts->FieldByName(\顶宽\ //取当前记录的“顶宽”字段值 if(w>=30 && w<=40) { //如果该值在30~40之间 i++; //计数器加1
StringGrid1->RowCount ++; //字符串网格组件的行数加1
StringGrid1->Cells[0][i] = Belts->FieldByName(\型号\ //网格的第i行第0列
//显示“型号”字段的值
StringGrid1->Cells[1][i]= FloatToStr(w); //网格的第i行第1列显示“顶宽”字段的值 }
Belts->Next(); //将表数据集记录指针移到下一条记录
}
if (i>0) { //如果有顶宽在30~40之间的V带
StringGrid1->FixedRows=1; //设置网格组件的FixedRows(固定行)属性值为1 StringGrid1->Cells[0][0]=\型号\ //网格的第0行第0列显示“型号” StringGrid1->Cells[1][0]=\顶宽\ //网格的第0行第1列显示“顶宽” } }
(5) 保存程序文件并做程序测试
点击C++Builder主工具栏上的“Save All”按钮,保存所有程序文件。 点击C++Builder主工具栏上的Run按钮
,运行程序。
在程序界面上点击“执行动作”按钮,则字符串网格组件中应显示满足条件的两种型号的V带及顶宽值。
6. 第五模块(用命令组件向“V带断面”表中添加数据行)
(1) 功能简介
命令组件允许通过SQL语句直接操纵数据库,即对数据表进行插入、删除和修改等操作。本模块仅演示向表中添加数据行的操作,而数据的来源则由字符串网格组件提供(需要用户输入数据)。 (2) VCL组件对象及布局
在窗体上放置一个组框GroupBox、一个标签Label、一个编辑框Edit、一个字符串网格StringGrid、两个按钮Button和一个命令ADOCommand组件,此时设计界面如图 13所示: