图 13 第五模块初始设计界面
(3) 组件对象的属性设置
按表 21~表 23顺序设置以上各VCL组件对象的属性。
表 21 组框、标签、编辑框与按钮对象的属性设置
组件所属的选项卡 默认组件名 GroupBox5 Label10 Standard Edit2 Button3 Button4 默认组件名 StringGrid2 组件 组框 标签 编辑框 按钮 按钮 Name属性 Text属性 CELL INSERT SAVE (空串) 保存 Caption属性 用命令组件向“V带断面”表中添加数据行 编辑单元格 添加行 表 22 字符串网格对象的属性设置
Name DefaultRowHeight SG 16 DefaultColWidth RowCount ColCount FixedRows 40 2 5 1 FixedCols 0 表 23 命令对象的属性设置
组件所属的选项卡 默认组件名 ADO ADOCommand1 组件 Connection属性 命令 Engineering (4) 编写各对象的事件过程
窗体(Form)对象的生成(Create)事件过程
void __fastcall TForm1::FormCreate(TObject *Sender) //自动填充字符串网格的第一行 {
SG->Cells[0][0]=\型号\ SG->Cells[1][0]=\顶宽\ SG->Cells[2][0]=\断面高\ SG->Cells[3][0]=\节宽\ SG->Cells[4][0]=\节高\}
字符串网格(SG)对象的单击(Click)事件过程
void __fastcall TForm1::SGClick(TObject *Sender) {
CELL->Text = SG->Cells[SG->Col][SG->Row]; //将所选网格单元的内容复制到编辑框 CELL->SetFocus(); //令编辑框对象获得输入焦点 }
编辑框(CELL)对象的按键(KeyPress)事件过程
void __fastcall TForm1::CELLKeyPress(TObject *Sender, char &Key) {
if(Key==13){ //如果在编辑框内打了回车键
SG->Cells[SG->Col][SG->Row] = CELL->Text; //将编辑框中的内容复制到所选网格单元 if (SG->Col<4) SG->Col ++; //自动选择下一个单元(便于用户连续输入数据)
CELL->SelectAll(); //将编辑框中的内容全部选中(目的是便于用户输入新数据) } }
“添加行”按钮(INSERT)对象的单击(Click)事件过程 void __fastcall TForm1::INSERTClick(TObject *Sender) {
SG->RowCount++; //为字符串网格对象添加一行单元格
}
“保存”按钮(SAVE)对象的单击(Click)事件过程
void __fastcall TForm1::SAVEClick(TObject *Sender) //将字符串网格中的数据全部写入数据表中 {
int r,n=0; // r是循环变量,n是计数器(用于存储用户输入的有效数据的行数) //设置命令组件的命令文本(带5个参数的SQL语句) ADOCommand1->CommandText
=
\
INTO
V
带
断
面
VALUES(:Model_Val,:Width_Val,:Height_Val,:Width2_Val,:Height2_Val)\
for(r=1;r
if(SG->Cells[0][r]!=\ //如果某行第一列不为空(则本行是有效数据) n++; //计数器加1
//下面几行指定各参数的值,参数值取自每行中的单元格内容
ADOCommand1->Parameters->ParamByName(\al\alue = SG->Cells[0][r]; ADOCommand1->Parameters->ParamByName(\al\alue = SG->Cells[1][r]; ADOCommand1->Parameters->ParamByName(\al\alue = SG->Cells[2][r]; ADOCommand1->Parameters->ParamByName(\al\alue = SG->Cells[3][r];
ADOCommand1->Parameters->ParamByName(\al\alue = SG->Cells[4][r]; ADOCommand1->Execute() ; //执行命令
}
else break; //否则结束循环
ShowMessage(IntToStr(n)+\条记录已保存到数据库!\ //显示一条消息 }
(5) 保存程序文件并做程序测试
点击C++Builder主工具栏上的“Save All”按钮,点击C++Builder主工具栏上的Run按钮
。
在字符串网格组件对象中随意输入几行数据,然后利用第三模块的查找功能检查一下是否可以查到刚输入的数据行。
7. 第六模块(分别显示不同数据表中的数据)
(1) 功能简介
提供一个组合框,允许用户从中选择想要显示数据的机床类型,用数据网格组件显示用户所选择的机床型号及相关参数。 (2) VCL组件对象及布局
在窗体上放置一个组框GroupBox、两个标签Label、一个组合框ComboBox、一个表数据集ADOTable、一个数据源DataSource和一个数据网格DBGrid组件,此时设计界面如图 14所示:
图 14 第六模块初始设计界面
(3) 组件对象的属性设置
按表 24~表 28顺序设置以上各VCL组件对象的属性。
表 24 组框与标签对象的属性设置
组件所属的选项卡 默认组件名 组件 AutoSize属性 GroupBox6 Standard Label11 Label12 组件所属的选项卡 Standard 默认组件名 组件 组框 标签 false false Caption属性 分别显示不同数据表中的数据 机床类型 机床型号与参数 表 25 组合框对象的属性设置
Items属性 (按行输入六类机床数据表的名称) ItemIndex属性 0 ComboBox1 组合框 组合框对象的Items属性决定着组合框中要显示的列表项,其设置方法如下:点击该属性值右边的
按钮,在随后出现的如图 15所示的对话框中,逐行输入六类机床数据表的名称。
图 15 String List Editor 对话框 表 26 表数据集对象的属性设置
组件所属的选项卡 ADO 默认组件名 ADOTable1 组件 Name属性 Connection属性 Engineering TableName属性 Active属性 车床数据 true 表数据集 Machine 组件 表 27 数据源对象的属性设置
组件所属的选项卡 默认组件名 DataAccess DataSource1 Name属性 DataSet属性 Machine 数据源 DSMachine 组件 数据网格 表 28 数据网格对象的属性设置
组件所属的选项卡 默认组件名 DataControls DBGrid3 DataSource属性 DSMachine (4) 编写组合框(ComboBox1)对象的单击(Click)事件过程 void __fastcall TForm1::ComboBox1Click(TObject *Sender)
{
Machine->Close(); //先关闭表数据集(否则无法更改其“表名”属性) Machine->TableName = ComboBox1->Text ; //将其“表名”属性改为组合框中选中的机床类型 Machine->Open(); //再打开表数据集 }
(5) 保存程序文件并做程序测试
点击C++Builder主工具栏上的“Save All”按钮,保存所有程序文件。 点击C++Builder主工具栏上的Run按钮
,运行程序。
从组合框中随意选择一种机床类型,则下方的数据网格对象中将显示相应机床的型号和参数。
8. 第七模块(调用带参存储过程)
(1) 功能简介
存储过程是存储在数据库(服务器)内的一段程序代码,用SQL Server内置的经过扩展了的SQL语言——Transact-SQL语言编写而成。存储过程在定义时可以带有输入参数和输出参数。本模块演示如何调用带输入参数和输出参数的存储过程。先在服务器上定义一个能根据型号(输入参数)计算其断面积(输出参数)的存储过程,然后在C++Builder中调用它。 (2) 在数据库(服务器)内定义存储过程
打开SQL Server2000的企业管理器,找到Engineering数据库的“存储过程”项,然后拉开“操作”菜单,选择“新建存储过程”菜单项,会出现如图 16所示的“新建存储过程”对话框:
图 16 “新建存储过程”对话框
在对话框的文本区域,输入以下程序代码(它是用Transact-SQL语言写成的):
CREATE PROCEDURE Area @model char(1) , @VArea float output /*输出参数后带有output关键字*/ AS /*该存储过程带两个参数,输入参数是V带型号,输出参数是V带断面积的平均值*/ BEGIN /*存储过程的开始*/
DECLARE @a int,@a0 float,@h float,@y0 float /*声明局部变量,对应V带断面的四个尺寸*/ DECLARE @s float,@sa float,@n int /*局部变量:断面积、平均断面积、计数器*/ DECLARE V_cursor CURSOR FOR SELECT 顶宽,节宽,断面高,节高 FROM V带断面 where 型号 like @model /*声明游标*/
SELECT @n=0,@sa=0 /*为局部变量赋初值*/ OPEN V_cursor /*打开游标*/