用Delphi编写小型数据库

上传人:biao****biao 文档编号:103946358 上传时间:2022-06-09 格式:DOC 页数:21 大小:104KB
收藏 版权申诉 举报 下载
用Delphi编写小型数据库_第1页
第1页 / 共21页
用Delphi编写小型数据库_第2页
第2页 / 共21页
用Delphi编写小型数据库_第3页
第3页 / 共21页
资源描述:

《用Delphi编写小型数据库》由会员分享,可在线阅读,更多相关《用Delphi编写小型数据库(21页珍藏版)》请在装配图网上搜索。

1、用Delphi编写小型数据库2011-10-20|分类:电脑资料|标签:电脑技巧|编辑:,辅编:用Delphi编写小型数据库(一)建立数据库Delphi是目前最流行的编程工具之一,它在开发数据库应用程序方面有着众多的优越性,提供了强大的开发基于客户/服务器模式数据库应用程序的能力。在数据库访问方面,配有Borland Database Engine(BDE),可通过SQL Links、ODBC等技术访问多种数据库,也可以利用ADO来访问各种数据库。在应用程序客户端开发方面,Delphi提供了大量的用于数据库应用开发的各种组件,可以极大地提高开发效率。在学习Delphi数据库编程之前,我们应该对

2、数据库有一定的认识。一、认识数据库1.数据(Data)数据库是存放数据的仓库,数据的种类很多,如数字、文字(商家的订单信息、供应商信息等)、图形、图像。2.数据库(Database)数据库是长期存放在计算机上的,能够识别的,有组织、可共享、具有一定安全性的数据集合。在数据库中,一般都采用关系模型,通过表格来实现。3.数据库管理系统(DataBase Management System)数据库管理系统是位于用户软件和操作系统之间的数据库管理软件,常见的数据库管理系统有Oracle、Microsoft SQL Server、Sybase、Informix等。4.数据库系统(DataBase Sys

3、tem)数据库系统的构成见图1:图1 数据库系统构成图实际开发中,数据库系统常分为两类:桌面型数据库系统和网络型数据库系统。桌面型数据库系统指只在本机运行、不与其他计算机交换数据的数据库系统,用于小型的信息管理;网络型数据库系统指能够通过网络进行数据共享的数据库系统,多人可以通过多台计算机对数据库进行操作,可以通过数据库对用户的权限进行管理。目前,网络型数据库系统的应用前景越来越广泛。有关数据库的术语由于篇幅关系没做深入讲解,有兴趣的读者可以参考相关书籍。下面我们以Microsoft SQL Server2000为例,讲解建立一个数据库的详细过程。Microsoft SQL Server200

4、0安装完成后,依次点击“开始程序Microsoft SQL Server企业管理器”,启动企业管理器程序,SQL Server企业管理器(Enterprise Manager)是SQL Server软件的一个组成部分,它给用户提供了一个集成的管理控制台来集中管理多个服务器。在Windows进程中的名字叫mmc.exe。企业管理器的界面如图2,我们对数据库的大部分操作都在这个程序中执行。图2 SQL Server企业管理器的界面二、创建一个新的数据库1.在企业管理器中,点击菜单“操作”,选择“新建数据库”,在弹出的对话框中,需要确定新建的数据库的名称和存放的路径。新建的数据库的名称为test,存

5、放的路径为D盘。注意:修改了数据文件的路径后,最好手动把日志文件的路径也修改到相同目录下,确定后,新建的数据库就创建了。在D盘下可以找到test_Data.MDF和test_Log.LDF两个文件,在企业管理器树中也能找到test数据库了。2.数据库创建后,我们就根据实际需要创建表了。右键点击企业管理器树中的“表”后,在弹出的菜单中选择“新建表”,在弹出的对话框中对表的结构进行详细设计。定义四个字段,分别表示姓名、年龄、性别、住址。注意定义字段时要考虑数据类型、长度是否合法,如果把姓名定义为数字型或者把年龄的长度设置为1,将来数据就会出现意想不到的情况。当表设计完成后点击“保存”按钮,输入表名

6、PersonInfo,对表的设计就初步完成了。重复上述操作可以建立多个表。建立数据库以及建立表相对来说比较简单,按部就班就能完成。不过在实际做项目过程中,在建立表之前最好根据需求考虑完善后再进行。如果到项目编码中期再更改表结构,会让人心烦意乱的。三、值得注意的概念1.存储过程存储过程是 SQL 语句和可选控制流语句的预编译集合,以一个名称存储并作为一个单元处理。存储过程存储在数据库内,可由应用程序通过一个调用执行,而且允许用户声明变量、有条件执行,它还拥有强大的编程功能。存储过程相当于存放在数据库中的函数,当应用程序调用存储过程时,将被数据库管理系统调用并执行,然后将执行结果返回给应用程序。存

7、储过程可包含程序流、逻辑以及对数据库的查询。它可以接收参数、输出参数、返回单个或多个结果集以及返回值。2.触发器触发器是一种特殊类型的存储过程,当使用一种或多种数据修改操作在指定表中对数据进行修改时,触发器会生效,触发器可以查询其它表,而且可以包含复杂的 SQL 语句。它们主要用于强制复杂的业务规则或要求。3.事务性(Transaction)事务是指不可分割的一组操作集合,集合的操作要么全部完成,要么全部取消,是一个不可分割的工作单位。4.在设计表时需要注意以下几点1)主关键字(Primary Key)主关键字又叫主键,是唯一能确定表的一行(一条记录)的一个或多个字段,比如上面我们定义的Per

8、sonInfo表中,name字段就可以设定为主关键字,在设计表的窗体中,选中name这一行,点击“钥匙”按钮后就把name设置为主关键字了,这样每一条记录的name的信息就不能相同了。主关键字的功能有:建立索引,利于快速查找和排序;分辨记录;保证引用的完整性。2)索引(Index)建立索引是为了提高数据库的查找和排序速度。关键字是一个特殊的索引。索引使数据库程序无须对整个表进行扫描就可以在其中找到所需要的数据。用于索引的字段不需要唯一,但唯一的字段的索引能获得更高的效率。3)外部关键字(Froeign Key)外部关键字又称外键,用于建立和加强两个表数据之间链接的一个或多个字段。将保存表中主键

9、值的一列或多列添加到另一个表中,可创建两个表之间的连接。这一列或多列就成为第二个表的外键。外键也是一种约束条件,约束的主要目的是控制存储在外键表中的数据,还可以控制对主键表中数据的修改。下面举例说明,比如我们定义了两张表,表PersonInfo的name字段定义为主关键字,其中name列的数据是唯一的,也就是名字不可重复,数据见图3:图3 PersonInfo表表wage存放员工每个月的工资,所以名字可以重复,数据见图4:图4 wage表如果把表PersonInfo中的第四条记录“曾虹云”删除,那么表wage中的前三条记录就显得孤立了,既然员工“曾虹云”的基本信息都没有了,怎么会保留每个月的薪

10、水呢?外部关键字防止了这种情况的出现,我们对表wage进行如下设计:在表wage的设计窗口中点击按钮“管理索引/键”,在弹出的对话框中点击“关系”标签页,点击“新建”按钮,分别在主键表中选择name和在外键表中选择name,这样我们就设置了一个外键,把PersonInfo和Wage两张表做了关联,当Wage表中有“曾虹云”的记录时,表PersonInfo是不允许删除“曾虹云”这条记录的,这样就保证了数据引用的完整性。用Delphi编写小型数据库(二)数据库编程的基本操作2007-05-17 10:49:01|分类:电脑资料|标签:delphi编程|字号订阅上一期我们讲解了数据库的基础知识,本期

11、我们主要讲解Delphi数据库编程的基本操作,这一般遵循图1的模式:图1 数据库应用程序的构成启动Delphi,选择主菜单的“FlieNewData Module”,就能创建一个数据模块,数据模块相当于一个容器,用于放置数据库的组件,这些数据库相关组件均为不可见组件,如ADODataSet、ADOConnection、DataSource等。用数据模块的好处是:1.从直观来讲,这些不可见组件不用放在窗体上,简化了窗体的设计。2.可以对数据库不可视组件进行统一管理,共享其中相同的内容。我们这里举例很简单,直接把不可视控件放在主窗体上,就不再讲数据模块了。下面我们通过一个实例学习使用ADO组件来访

12、问数据库。一、新建项目启动Delphi,新建一个项目,选择ADO组件面板,在窗体上添加ADOConnection1和ADODataSet1;选择Data Access组件面板,在窗体上添加DataSource1;选择Data Controls组件面板,添加DBGrid1。二、设置ADOConnectionADO组件一般都包含一个被用于连接的属性,即ConnectionString属性,利用此属性可以指定一个到ADO数据存储及其属性的连接。在窗体上选中ADOConnection1,在Object Inpector上双击这个组件的ConnectionString属性,弹出窗体的ADO连接对话框。选

13、择Build按钮,在弹出的对话框中选择“Microsoft OLE DB Provider for SQL Server”选项,单击“下一步”按钮,出现数据链接属性对话框。1.选择或输入服务器名称:可以在此输入IP地址,也可以点击下拉列表,以显示当前系统可以访问的SQL Server数据库的列表,选择其中的一个,单击“刷新”按钮,可获得最新的SQL Server数据服务器列表。此例中点击下拉列表,选择上期我们建立的test数据库的列表。2.输入登录服务器的信息:选择“使用指定的用户名称和密码”,然后输入用户名称和密码。并选中“允许保存密码”复选框。3.在服务器上选择数据库:如果登录用户名和密码

14、正确,点击下拉列表就会出现数据库的列表,否则显示报错信息。4.点击“测试连接”按钮测试输入的登录信息是否正确。设置完毕后点击“确定”按钮返回到主窗体。小技巧:ADOConnection1的LoginPrompt属性用于控制如何处理SQL数据库的安全性问题。如设置为True,当应用程序试图建立数据库连接时屏幕上将出现标准Delphi注册对话框,用户必须输入正确的用户名和口令。为了设计方便需要把ADOConnection1的LoginPrompt的属性设置为False,这样在配置其他的ADODataSet组件时不必每次都输入用户名和密码了。三、配置数据集ADODataSetDelphi数据库开发的

15、很重要的特征之一是,Delphi可以在程序设计时让我们对数据进行处理,在开始处理表的数据之前,程序必须首先打开数据集,每个ADO数据集都可通过它自己的ConnectionString属性或一个ADOConnection组件(和它的ConnectionString)访问数据库的数据。在主窗体上选择ADODataSet1,设置其Connection属性:点击其下拉按钮,选择ADOConnection1,然后双击“CommandText”,在弹出的对话框中选择PersonInfo表,并点击*号,也可以直接在SQL中输入“select * from PersonInfo”,这样我们就配置了一个数据集。

16、四、配置数据源配置数据源只需要设置DataSet属性,点击下拉按钮,选择ADODataSet1。五、配置表格配置表格需要设置DataSource属性,点击下拉按钮,选择DataSource1。这时,再选中ADODataSet1,并把其Active属性设置为True,如果配置正常,将会在表格中显示数据库的PersonInfo表的数据,如图2。图2 程序主窗体六、操作数据1.增加记录使用Insert方法可以插入一条记录,使用Append方法在数据集的最后添加一条记录。双击“增加一条记录”按钮,进入代码编辑器,输入代码:procedure TForm1.Button1Click(Sender: TO

17、bject);beginADODataSet1.Active:=true;/打开数据集ADODataSet1.Insert; /调用Insert方法ADODataSet1.FieldByName(name).AsString:=Edit1.Text; /把Edit1的值赋给插入的记录的name字段ADODataSet1.FieldByName(age).AsString:=Edit2.Text;ADODataSet1.FieldByName(sex).AsString:=Edit3.Text;ADODataSet1.FieldByName(address).AsString:=Edit4.Te

18、xt;ADODataSet1.Post;/将数据集中修改的内容写回到数据库中ADODataSet1.Active:=false;/关闭数据集ADODataSet1.Active:=true;/打开数据集,观看效果end;2.编辑记录鼠标选择表格里的一条记录,Edit输入框显示所选的记录,然后进行修改后,点击“编辑一条记录”按钮,把修改后的记录写到数据库中。首先设置DBGrid,用鼠标点击表格的记录时,自动选中所点击的一行,方法是设置DBGrid的Option属性的dgRowSelect为True。然后在DBGrid的OnCellClick事件中写如下代码:procedure TForm1.DB

19、Grid1CellClick(Column: TColumn);beginEdit1.Text:=ADODataSet1.FieldByName(name).AsString;/把选择的记录中的姓名显示在Edit1中Edit2.Text:=ADODataSet1.FieldByName(age).AsString;Edit3.Text:=ADODataSet1.FieldByName(sex).AsString;Edit4.Text:=ADODataSet1.FieldByName(address).AsString;end;然后根据需要对字段进行修改,最后在“编辑一条记录”按钮中写如下代码:

20、procedure TForm1.Button2Click(Sender: TObject);beginADODataSet1.Active:=true;ADODataSet1.Edit;/进入编辑模式ADODataSet1.FieldByName(name).AsString:=Edit1.Text;ADODataSet1.FieldByName(age).AsString:=Edit2.Text;ADODataSet1.FieldByName(sex).AsString:=Edit3.Text;ADODataSet1.FieldByName(address).AsString:=Edit4

21、.Text;ADODataSet1.Post;ADODataSet1.Active:=false;ADODataSet1.Active:=true;end;注意:这里修改的是当前指针所指向的记录,如果修改后再点击一次“编辑一条记录”按钮,程序就会报错,原因是没有定位到某一条记录。如果要指定修改某条记录,可以使用下面提供的方法:First:定位到第一条记录Last:定位到最后一条记录Next:定位到下一条记录Prior:定位到上一条记录MoveBy(n):如果n为正数,下移n条记录;如果n为负数,则上移n条记录3.删除记录和编辑记录一样,需要先定位,找到需要删除的记录后,才能对所选中的记录进行删

22、除操作。在删除记录中写如下代码:procedure TForm1.Button3Click(Sender: TObject);beginADODataSet1.Active:=true;ADODataSet1.Delete;end;4.查询记录在实际的项目中,一般都需要给用户提供一个查询,比如用户在Edit5中输入姓名后,点击“查询姓名”按钮,系统在数据库中进行查找。如果找到,表格就自动定位到这条记录,否则给出提示信息:双击“查询姓名”按钮,进入代码编辑器:vari:integer;/定义一个整型变量用于循环Tmpname:string; /定义一个内部变量,用于赋值beginADODataS

23、et1.Active:=false;/关闭数据集ADODataSet1.Active:=true;/打开数据集,目的是更新数据集,使显示的数据是最新的ADODataSet1.First; /定位到第一条记录for i:=0 to ADODataSet1.RecordCount-1 do /从第一条记录开始到最后一条记录做循环begin/把当前记录的name的值赋给内部变量TmpnameTmpname:=ADODataSet1.FieldByName(name).AsString;/去掉字符串中的空Tmpname:=Trim(Tmpname);/如果数据库中记录的name值与查询的值一致则在Ed

24、it中显示相关字段的值,并退出这段代码块if trim(Edit5.Text)=Tmpname thenbeginEdit1.Text:=ADODataSet1.FieldByName(name).AsString;Edit2.Text:=ADODataSet1.FieldByName(age).AsString;Edit3.Text:=ADODataSet1.FieldByName(sex).AsString;Edit4.Text:=ADODataSet1.FieldByName(address).AsString;exit;end;ADODataSet1.Next;end;/如果没有查询到

25、,给出提示信息MessageDlg(数据库中没有这个姓名!, mtError,mbOk, 0);end;本章讲解了如何使用ADO对数据库进行简单的操作。在本章学习结束后,读者应该对操作数据库有一定的认识,并能通过ADO创建连接,能编写增加记录、删除记录、查询记录、修改记录的代码。用Delphi编写小型数据库(三)项目的制作流程2007-05-17 10:46:53|分类:电脑资料|标签:delphi编程|字号订阅本章将通过一个项目制作过程的讲解来加深读者对数据库编程的认识。我们以攀钢热轧板厂纵切机组二级系统的上料程序为例,讲解如何进行项目的制作。攀钢热轧板厂纵切机组是一条生产钢卷的生产线,整个

26、生产流程见图1:图1吊车把钢卷吊到入口步进梁上(总共有6个卷位,每个卷位可以放置一个钢卷),然后由现场操作人员开动步进梁设备,通过上料小车把钢卷送到开卷机上进行生产。生产完成后由卷取机把钢卷卷好,通过卸料小车把钢卷送到出口步进梁,现场操作人员开动步进梁到称重位置的电子秤称重后,把钢卷送到库房。整个生产由一级系统(PLC)控制,二级系统不参与控制,但需要对整个生产流程的数据做记录并统计分析和备份,二级系统主要实现的功能有:1.接收计划,生产计划由三级系统下发,二级系统只要把生产计划接收下来;2.吊销计划;3.产品跟踪,现场生产的钢卷信息要实时反映到二级系统,指导现场操作人员生产;4.生成并上传给

27、三级系统实绩,也就是把生产完成的卷的相应信息保存下来并做标签打印;5.计划和实绩的查询功能。根据实际需要,二级系统由两个独立的应用程序构成:上料程序和主程序。由于篇幅的关系,这里只讲解上料程序的制作流程和逻辑思路。上料程序的界面如图2:图2上料程序的功能:1.上料操作提供给操作人员一个界面,操作人员在接到生产计划后,把待生产的钢卷用吊车吊放到入口步进梁的卷位上,然后在画面中把实物所对应的信息从数据库的计划表中写到跟踪表中。比如把一个钢卷号为“41236704400”吊到入口步进梁的1号卷位后,在程序中做如下操作:根据轧制明细表,选择计划号“212067”后显示此计划下所有的合同号,点击合同号“

28、J000000022”,显示此计划、此合同下的钢卷号,点击这个钢卷号,点击“上料”按钮,再点击“1号卷位”,系统就把此钢卷的信息(计划号、钢卷号)写到跟踪表中了。2.卸料操作由于操作失误或者某种原因,把刚才入口步进梁1号卷位的钢卷“41236704400”上到2号卷位,提供给操作人员一个“卸卷”按钮,当点击它后,就把跟踪表中的相关信息清除了,就可以重新执行上料操作了。3.钢卷前进当开动步进梁前进,由于步进梁是整体前进的,需要把跟踪表中的信息做相应修改,点击 “钢卷前进”按钮,就把5号卷位的信息写到6号卷位,4号卷位的信息写到5号卷位1号卷位的信息写到2号卷位,同时1号卷位的信息清空。实际上,钢

29、卷前进后,由工业HMI系统把数据库的信号表的某个字段值改变,通过扫描这个值的变化,修改跟踪表实现钢卷自动前进功能。如果实际设备动作后由于某种原因导致信号表相应字段的值没有发生变化,就需要手动点击“钢卷前进”按钮了。一、设计数据库使用Microsoft SQL Server2000,建立一个数据库,这里需要使用4张表:1.接口表TB_ SplitCutPlan,三级系统下发计划的方式是直接写数据到此表中,当数据库检测到此表有数据后把所有数据插入到计划表中,并删除此表中的全部数据;方法是使用触发器,只有两句SQL语句:insert into l2_splitcutplan select * fro

30、m tb_splitcutplandelete from tb_splitcutplan2.计划表L2_SplitCutPlan,存放待生产钢卷的详细信息,由于钢卷号是唯一的,因此把钢卷号字段HOT_COIL_NO设置为主键。计划表和接口表的设计一模一样,把接口表复制后改名为计划表就可以了。3.信号表Signal,当钢卷信息到了跟踪表的开卷机时,需要通知三级系统此卷上了生产线,也就是说需要把信号表中某个字段的值置1,由主程序去扫描这个值是否为1,当为1时把跟踪表的开卷机的钢卷信息写到三级系统的相关表中。4.跟踪表L2_SplitCutMatTrack,存储钢卷信息,保持物流和信息流一致性。二、

31、程序编码难点1.程序界面中,计划号、合同号、钢卷号等三个供操作人员进行选择的列表框为ListBox控件,随着数据量的增大,计划号在ListBox中必须按时间倒序排列,也就是三级系统最后下发的计划,其计划号是排列在ListBox的最顶部的,这样操作人员一眼就能找到最近需要生产的计划号。当然,为了让程序更加健壮,需要做一个计划号的查询,在界面的右下角输入计划号,点击“查询计划号”按钮,在ListBox中就自动把此计划号反选,并查询出此计划号所对应的合同号并显示在合同号列表框中。在窗体的FormShow事件中加入下面代码:procedure TMaterial.FormShow(Sender: TO

32、bject);vari:integer;strPlanNo:string;begin/*计划刷新*/Plan_No_ListBox.Items.Clear;/启动画面时清空计划号列表框Plan_ADODataSet.Close;/关闭计划表数据集,这个数据集对应的是计划表L2_SplitCutPlan的数据Plan_ADODataSet.CommandText := SELECT PlanNo from L2_SplitCutPlan group by planno,prg_start_time order by prg_start_time desc;/关键就是这个SQL语句,它从计划表中选

33、择计划号和时间字段,并按时间字段倒序排列,同时相同的计划号只显示一次。Plan_ADODataSet.Open;/打开数据集for i := 0 To (Plan_ADODataSet.RecordCount-1) do/把计划表的记录从头到尾扫描一遍,把每条记录的计划号字段读出来,赋给内部变量strPlanNo,然后把strPlanNo的值添加到ListBox中。beginstrPlanNo := Plan_ADODataSet.FieldByName(PlanNo).AsString;Plan_ADODataSet.Next;Plan_No_ListBox.Items.Add(StrPla

34、nNo);end;L2_TrackADODataSet.Active:=false;/当启动画面时刷新画面右侧的跟踪表格的数据,这个表格是DBGrid控件。L2_TrackADODataSet.Active:=true;end;2.当点击合同号后,在钢卷号列表框中就显示了钢卷号,这里显示的钢卷号必须具备下面两点:1.显示的钢卷号所对应的计划号必须是前面选择的计划号;2.显示的钢卷号所对应的合同号必须是前面选择的合同号。如果要满足这两个要求,必须要使用到SQL语句。3.如何把选择的钢卷号上料到步进梁上面?也就是说如何把计划表的计划号、钢卷号字段写到跟踪表中?根据工艺流程,设计的跟踪表如图3:图3

35、Coil_Number和Coil_Name字段的值是固定的,在程序中是静止的,只须把选择的计划号和钢卷号写给Coil_No和PlanNo即可。下面给出“1号卷位”按钮的代码,操作人员在选择一个钢卷号后,点击“上料”按钮,再点击“1号卷位”按钮就把从计划表中选择的钢卷号的信息写到跟踪表中了。procedure TMaterial.Button5Click(Sender: TObject);vari:integer;tmpCoil:string;beginif UpOrDown=1 then /上料,UpOrDown是全局变量,当点击“上料”按钮后,把这个值置为1,表示进行上料操作beginfor

36、 i := 0 to (Coil_No_ListBox.Items.Count - 1) do/把选择的钢卷号的值赋给内部变量tmpCoilbeginif Coil_No_ListBox.Selectedi thenbegintmpCoil:=Coil_No_ListBox.Items.Stringsi;/*修改L2跟踪表*/L2_TrackADODataSet.Active:=false;L2_TrackADODataSet.Active:=true;L2_TrackADODataSet.First;/由于是上料到1号卷位,就指向跟踪表的第一条记录if L2_TrackADODataSet.

37、FieldByName(Coil_No).AsString then/如果字段Coil_Name的值不为空,就不应该上料到此处,给出提示信息并退出程序beginMessageDlg(此卷位有卷啦,请先卸卷, mtError,mbOk, 0);exit;end;L2_TrackADODataSet.Edit;/编辑跟踪表L2_TrackADODataSet.FieldByName(Coil_No).AsString:= tmpCoil; /把选择的钢卷号写到跟踪表的第一条记录的Coil_No字段中。L2_TrackADODataSet.FieldByName(PlanNo).AsString:=

38、strPlanNo1; /把选择的钢卷号所对应的计划号写到跟踪表的第一条记录的PlanNo字段中。L2_TrackADODataSet.Post;/ 将数据集中修改的内容写回到数据库中L2_TrackADODataSet.Active:=false;/刷新表格L2_TrackADODataSet.Active:=true;exit;/退出程序end;end;end;end;编码完成后,需要不断离线测试,修改程序中的Bug,完善程序。如果没有大问题就可以上线运行了。用Delphi编写小型数据库(四)打印标签2007-05-17 10:42:48|分类:电脑资料|标签:delphi编程|字号订阅技

39、术看点:数据库的格式化输出技巧、打印调试技巧数据库编程有一个很重要的特点,通常需要把数据输出到打印机,比如生产线的成品出厂前需要贴上标签,财务报表做的数据统计结果需要打印给上司过目,这些都需要在Delphi中根据需要设计好打印功能。一、标签打印我们先来设计标签的打印输出,这里的Delphi版本为7.0,制作打印程序需要用到Rave组件板内的组件。以攀钢热轧板厂纵切机组的程序为例,当生成一条实绩(成品信息)后,需要在钢卷出厂前给钢卷贴上包含此钢卷数据信息的标签,标签格式如图1所示,标签下面是成品表,当在成品表格中选择一条记录后,把成品表的字段的值写到标签的Edit控件中,这在第二章已经详细介绍过

40、了,方法是在DBGrid的OnClick事件中写类似下面的代码:图1procedure TForm1.DBGrid1CellClick(Column: TColumn);beginedtProductCoilNo.Text :=ADODataSet1.FieldByName(HOT_COIL_NO).AsString;edtThick1.Text:=ADODataSet1.FieldByName(COIL_THICK).AsString;edtWidth1.Text:=ADODataSet1.FieldByName(COIL_WIDTH).AsString;edtPruductWeight.T

41、ext:=ADODataSet1.FieldByName(COIL_WEIGHT).AsString;edtShift_No.Text:=ADODataSet1.FieldByName(Shift_No).AsString;edtChecker.Text:=ADODataSet1.FieldByName(DUTY_PERSON).AsString; edtProductTime.Text:=DateTimeToStr(ADODataSet1.FieldByName(PRODUCTION_TIME).AsDateTime);end;这样,当被选择的记录的信息显示在Edit中后,只需要把Edit的

42、内容按标签的实际大小输出到打印机就可以了。找到Rave组件板,把RvProject1、RvSystem1添加到窗体上。1.双击RvProject1组件,打开Rave Report 5.0,新建一个文档并保存为Project1.rav,关闭Rave Report 5.0应用程序。2.设置RvProject1的属性:RvProject1.Engine:= RvSystem1;RvProject1.ProjectFile:点击属性的浏览按钮,将弹出一个对话框,选择上一步保存的Project1.rav。3.设置RvSystem1的属性:RvSystem1.DefaultDest:= rdPreview

43、;/打印预览,如果选择rdPrinter,则直接输出到打印机。建议在调试标签上各个字符的相对位置时选择预览方式,调试完成投入使用时选择直接输出到打印机方式能节省时间。SystemSetups.ssAllowSetup:=False;/不做打印机设置,如果为 True,则每次点击Button1执行打印命令时将弹出打印机设置对话框,建议在调试期间选择True,设置完毕后改为False以减小劳动强度。在Output Options对话框的Report Destination组合框中(图2),选择Printer,将输出到打印机;选择Preview,将显示打印预览;选择File,将以NDR或PRN方式保

44、存文件。图2点击Setup按钮后将弹出标准打印机设置对话框,这里不作阐述。4.双击RvProject1组件,打开Rave Report 5.0。(1)找到RaveProjectReportLibraryReport1,并选择它(图3)。然后在左边的属性栏中找到Parameters,并点击浏览按钮。图3(2)在弹出的对话框中,设置8个参数,输入A1A8。(3)在Rave Report 5.0软件开发环境上方的组件页中选择Report组件页,在画布上放置多个此组件页的DataTest组件,并利用Alignment组件页的组件把各个DataTest排版,对齐。(4)选中第一个DataTest组件,找

45、到属性DataField,并点击浏览按钮,将弹出一个对话框,点击Project Parameters下拉列表框,选择A1,然后点击“Insert Parameter”按钮,点击“OK”按钮退出。依次选择其余的DataTest组件,做相同的操作。(5)经过设置后,画布如图4所示。图4保存并退出Rave Report 5.0。5.设计完标签后,回到Delphi7.0开发环境,在主窗体的Button1中写打印代码:procedure TForm1.Button1Click(Sender: TObject);beginRvProject1.Open;RvProject1.SelectReport(Re

46、port,true);RvProject1.SetParam(A1,edtProductCoilNo.Text);RvProject1.SetParam(A2,edtThick1.Text);RvProject1.SetParam(A3,*);RvProject1.SetParam(A4,edtWidth1.Text);RvProject1.SetParam(A5,edtPruductWeight.Text);RvProject1.SetParam(A6,edtShift_No.Text);RvProject1.SetParam(A7,edtChecker.Text);RvProject1.S

47、etParam(A8,edtProductTime.Text);RvProject1.Execute;RvProject1.Close;end;上述代码的功能就是把Edit的值输出到打印机。有一点要说明:如果要打印一个常量(不从数据库读出数据),如参数A3传递的“*”,直接写为:RvProject1.SetParam(A3,*);当然,也可以在属性设置中把Edit1的text设置为“*”,然后代码写为:RvProject1.SetParam(A3, Edit1.Text );注意二者之间的差别。6最后一步是水磨功夫,由于不可能一次就使字符打印在非常合适的位置,所以就要细心地根据打印的标签微调各

48、个字符在标签中的位置,直到满意为止。然后设置打印机,设置完毕后做下面的设置:RvSystem1.DefaultDest:= rdPrinter;SystemSetups.ssAllowSetup:=False;在打印过程中会出现这种情况:在打印预览中显示的字符没有都打印出来。这是由于标签设计时,DataTest的长度不够,打开Rave Report 5.0,调出保存的Project1.rav,把相应的DataTest的Wdith值改大就可以了。另外,在预览方式下点击打印按钮也可以进行标签打印。二、报表输出下面讲解如何把报表输出到打印机,这里所说的报表也就是一个数据集内的数据,制作复杂的报表有专

49、门的工具,比如著名的水晶报表软件,我们这里不讨论复杂的报表,只说明Delphi如何把我们需要的数据以表格形式打印出来。假如我们需要把图5这张表格打印出来,可以首先在Rave组件板中把RvProject图51、RvDataSetConnection1添加到窗体上,在窗体上双击RvProject1,启动报表设计器。1.选择“File”菜单下的“New”命令建立新报表工程。2.选择“File”菜单下的“New Data Object”命令后,出现“Data Connections”窗口。选择“Direct Data View”后,按“Next”按钮,选择“TRvDataConnection1”后,按

50、“Finish”键后退出到主设计界面。3.选择“Tools”“ Report Wizards”“ Simple Table”后,出现“Simple Table”窗口。选择“DataView1”后,按“Next”按钮,选择需要的字段后,一路按“Next”按钮,最后按“Generate”按钮,出现如图6所示的界面。图64.设置报表头、报表栏目和各种元件的布局后,存盘退出报表设计器。5.在Delphi开发环境中,在“Print”按钮中录入下面代码:procedure TForm1.Button1Click(Sender: TObject);beginRvProject1.Open;RvProject

51、1.SelectReport(Report,true);RvProject1.Execute;RvProject1.Close;end;6.运行程序,点击“Print”按钮,在弹出的对话框中选择预览,我们就能看见报表打印预览效果。点击“打印”按钮即可把报表打印出来了。用Delphi编写小型数据库(五)数据库的备份和恢复2007-05-17 10:41:25|分类:电脑资料|标签:delphi编程|字号订阅技术看点:保障数据库安全的操作技巧,快速复制表,高效录入编程技巧学会前四章的内容,我们已经可以独立开发一个小型数据库项目了。最后一章我们介绍数据库的备份和恢复以及部分编程小技巧。一、数据库的备

52、份数据库在运行一定的时间后数据量会增大,随着数据量越来越庞大,系统执行查询的效率就会越来越低,我们就需要清理数据。清理数据前一定要对数据库进行备份,便于以后需要时恢复数据库来查询前期的数据,备份数据库的步骤如下:1.分离数据库只有先把数据库分离出来才能备份。启动Microsoft SQL Server 2000的企业管理器,选择一个数据库,在右键菜单中选择“所有任务”“分离数据库”(图1),在弹出的对话框中点击“确定”按钮,这样数据库test就脱离开了。图12.复制数据库文件还记得我们创建test数据库的目录吗?在第一章里,我们创建的test数据库存放在D盘根目录下面,现在我们启动Window

53、s资源管理器,找到test_Data、test_Log两个文件,并把这两个文件复制后保存到你的闪盘或者其他地方,这样我们就对test做好备份了。二、数据库的恢复选择“数据库”后,在右键菜单中选择“所有任务”“附加数据库”(图2),弹出对话框,点击“.”按钮,指定要附加的数据库文件(*.MDF),然后点击“确定”按钮,这样我们就恢复了test数据库,在企业管理器的数据库目录下就能找到test了。图2三、复制表在第三章中,我们创建了两张表TB_ SplitCutPlan和L2_SplitCutPlan,这两张表一模一样,我们定义表TB_ SplitCutPlan是一个字段一个字段进行定义的,实际上

54、这张表包含了多达70多个字段。如果我们再来一个字段一个字段定义L2_SplitCutPlan,工作量大不说,极容易出错,采用复制表的方法势必简单易行。下面详细介绍如何复制表:1.在MS SQL Server的企业管理器中,右击一张表,选择复制到剪贴板。2.选择“工具”的“SQL查询分析器”, 在查询分析器的查询窗口右击,在弹出菜单中选择“粘贴”,就把表SplitCutMatTrack的创建代码复制到查询窗口了(图3)。图33.在查询窗口中,把表的名字改为你希望的新表的名字,比如test1,第一行就变成了:“CREATE TABLE test1 (”(没有引号),如果不希望把所有的字段都复制,仅

55、仅希望复制部分字段,在代码中可以根据自己的需要删减字段。4.选择一个数据库,如图1中的右上角,新表将建立在这个数据库中。5.确定了数据库后,在图中点击三角形的执行查询按钮,如果成功将显示“命令已成功完成。”这时新表就建立起来了,并且和表SplitCutMatTrack的结构一样。6.要复制记录先清空查询窗口,按“CTRL+A”后再按Delete键,然后在查询窗口中输入“insert into test1 select * from SplitCutMatTrack”,如果成功将显示“(所影响的行数为XX行)”。小技巧:如果被复制的表的字段设置有标志,按上述步骤建立了表后不能复制记录,系统会提示

56、:“服务器: 消息 8101,级别 16,状态 1,行 1,仅当使用了列的列表,并且 IDENTITY_INSERT 为 ON 时,才能在表 test1 中为标志列指定显式值。”处理方法为:把flag bigint IDENTITY(1, 1) NOT NULL改为flag bigint NOT NULL。即把IDENTITY (1, 1)删除,这样就可以复制记录了,最后在新表中手动设置标志。四、数据库编程小技巧1.自动选中编辑框中的部分字符在做账时,需要在多个Edit中录入很多信息,然后提交到数据库,一般Edit中有默认的字符,在Edit编辑框中只须改写最后一个或两个字符再按TAB键切换到下

57、一个Edit,在此Edit中也只须修改一个或两个字符后又要按TAB键进行切换。麻烦的是每次按TAB键后,系统默认会自动选中所有的字符,需要用鼠标键盘删除最后两个数字然后再录入,既耗时又耗力。其实可以像图4那样按下TAB键后Edit直接选中最后两个数字,这样就节省了人力,直接录入就行了。图4实现原理:当Edit成为焦点后,要确定两件事:1.从哪一个字符开始被选中;2.选中多少个字符,使用TEdit类的属性SelStart可以定位从哪一个字符开始被选中,SelLength可以指定选中字符的个数。实现方法:在Delphi开发环境中,选中一个Edit组件,在事件OnEnter中写下面代码:proced

58、ure TForm1.Edit6Enter(Sender: TObject);beginEdit6.SelStart:=9;Edit6.SelLength:=2;end;2.隔行改变DBGrid网格颜色Delphi的DBGrid控件有一个Color属性可以改变网格颜色,但只能对网格设置单一的颜色,如果有多条记录,从美观出发,网格的单一颜色很不友好;从使用者角度出发,记录过多,密密麻麻的数据很容易使眼睛疲劳,特别是财务人员整天看一屏一屏的数据特别容易出错,如果把DBGrid的网格颜色设置为两种,交叉显示将大大提高工作效率,下面详细介绍隔行改变DBGrid网格颜色的方法。(1)启动Delphi,在

59、 Form1 上放置ADOConnection1、DBGrid1、ADODataSet1、DataSource1 三个数据库组件。(2)设置相关的属性,ADOConnection1连接一个数据库,ADODataSet1连接这个数据库的一张表,并使 DBGrid1 能显示表中的数据。(3)然后,在DBGrid1的 OnDrawColumnCell 事件中键入以下代码:procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;DataCol: Integer; Column: TColumn; State:

60、TGridDrawState);var i:integer;beginif gdSelected in State then Exit; /隔行改变网格背景色:if adodataset1.RecNo mod 2 = 0 then(Sender as TDBGrid).Canvas.Brush.Color := clinfobk /定义背景颜色else(Sender as TDBGrid).Canvas.Brush.Color := RGB(191, 255, 223); /定义背景颜色/定义网格线的颜色:DBGrid1.DefaultDrawColumnCell(Rect,DataCol,Column,State);with (Sender as TDBGrid).Canvas do /画 cell 的边框beginPen.Color := $00f

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!