资源描述
单击此处编辑母版标题样式,*,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,单击此处编辑母版标题样式,单击此处编辑母版文本样式,二级,三级,四级,五级,*,第八章 开发BDE数据库应用程序,本章内容:,学会使用,BDE,连接数据库,Table,和,Query,组件的使用方法,学会开发简单的数据库应用程序,8.1 使用BDE连接数据库,数据库引擎BDE是Delphi访问数据库的驱动程序之一,它提供访问数据库的API函数库,通过BDE不仅可以访问本地数据库,如Paradox、dBASE、FoxPro和Access等,而且还可以访问InterBase、Oracle、Sybase、Informix、Microsoft SQL server 和DB2等远程大型数据库。,8.1.1 BDE的体系结构,使用BDE开发数据库应用程序要遵循通常的数据库体系结构,BDE应用程序除需要数据源和数据集以外,还应包括以下两个方面:,一个或多个用于控制事务及管理的数据库组件,一个或多个会话组件,用于隔离数据访问操作,并且可以管理成组的数据库,用户1,用户n,数据源,数据源,数据集,数据集,BDE,驱动程序,数据库,会话,通过BDE访问数据库的体系结构,8.1.2 使用BDE管理器,应用程序对数据库的访问是通过数据库别名实现的,数据库别名则需要在,BDE,管理器中建立并配置。,打开,BDE,管理器的方法为:,开始程序,Borland Delphi7BDE administrator,BDE管理器显示窗口,BDE管理器介绍,BDE管理器窗口中,configuration 标签页用于配置与数据库连接时使用的参数;databases 标签页用于建立并管理数据库别名。只有配置好数据库后才能建立该数据库的别名。definition子窗口是其左边子窗口选项配置窗口,此窗口的所有配置参数将保存在Idapi32.cfg文件中,BDE数据库驱动的主要类型,本地数据库驱动程序,用于访问,Paradox,等本地数据库。,SQL,数据库驱动程序,用于访问,C/S,结构的,SQL,数据库,如,DB2,、,InterBase,、,Oracle,等,为保证数据库的正确连接,这些数据库在客户端计算机上都有相应,BDE,驱动程序。,ODBC,驱动程序,任何,ODBC,驱动都可用于,BDE,。,ODBC,几乎支持目前所有的数据库,因此,,Delphi,也可以访问几乎所有的数据库。,配置数据库别名,应用程序只有通过数据库别名才能访问数据库中的数据,因此,正确建立数据库别名是开发数据库应用程序相当重要的一环.下面用几个典型实例分别说明通过BDE管理器设置数据库和建立数据库别名的方法.,例1:,配置InterBase 数据库并建立一个Interbase 数据库别名。已知该数据库的库文件为:d:Inter baseexamplesdatabase,employee.gdb,(1)配置InterBase 数据库,打开BDE 管理器,单击Configuration 标签页并展开Drivers Native下的所有数据库名称,选择IntrBase,则BDE管理器右边的Definition窗口就会显示出配置InterBase数据库使用的所有参数,请将SERVER NAME和USER NAME两个参数设置如下:,ServerName:d:InterBaseexamplesdatabase employee.gdb,UserName:sysdba,其他参数可使用其默认值,此时BDE管理窗口显示内容如下图所示,若在InterBase 的左边出现一个绿色的三角图标,则表示已修改了该数据库的配置参数,单击工具条上的Apply 按钮保存修改后的数据库配置.,(2)建立interbase数据库别名,数据库别名实质上是连接到数据库的一个接口,同一个数据库可以建多个别名。,方法:BDE管理器-databases-右击-new,则弹出一个“新建数据库别名”对话框,从中选择“interbase”后,即可建立一个新数据库别名。,若想对数据库别名进行修改,则在选中该别名并修改后,单击apply按钮即可。,例2:,以访问Access数据库为例,具体说明ODBC的使用方法.,(1)打开ODBC管理器,打开方法:Delphi,Database Explore,则打开一个SQL Explore窗口,选择“Databases”子窗口中的根目录,然后选择此窗口的Object OBDC Administrator 菜单,此时打开一个名为“ODBC数据源管理器”的对话框窗口,ODBC数据源管理器对话框,创建新数据源对话框,(2)创建新数据源,方法:ODBC数据源管理器,添加,创建新数据源对话框中中选Microsoft Access Driver(*.mdb)驱动程序,完成,在显示的对话框中输入数据源名和相应的文字描述。若此时按确认按钮,数据源就建成了。数据源建成后,还需要继续设置数据源对应的数据库。,设置数据源对应的数据库的方法:,(1)单击“创建”按钮,为新建数据源创建数据库,(2)单击“修复”按钮修改已有数据库连接,此方法适用于对已有数据源的修改。,ODBC Microsoft Access安装对话框,创建数据库话框,(3)创建ODBC数据源对应的数据库,在对话框窗口单击“创建”按钮,则显示“新建数据库”对话框窗口,在这个窗口中,你可选择数据库文件所在文件夹,并输入要建立的新数据库名,然后单击“确定”按钮,若创建成功,系统将显示“数据库*创建成功”的提示。当操作再次返回时,单击此对话框中的“确定”按钮即完成数据库的创建及数据源的配置工作。,(4)建立BDE与ODBC的数据源连接,BDE管理窗口,右击“Databases”子窗口,在弹出菜单中选择“Refresh”,单击“Databases”根目录,选择Object BDE Administrator菜单,选择“Configuration”页,展开“Drivers”节点,鼠标右键单击ODBC节点,在弹出菜单中选择New,在“Drive Name”输入框输入用户自己使用的驱动程序名,例如AccessDB,在“ODBC Driver Name”输入框中选择建立ODBC数据源时使用的驱动程序Microsoft Access Driver(*.mdb),在“Select Data Sources to Create Aliases”选择已建立的数据源名“MyAccessDatabase”,单击“OK”按钮完成设置,此时在Databases子窗口中又显示一个名为MyAccessDatabase1数据源名,即为BDE与ODBC建立连接的数据源,修改完成后确认。,例3:,使用已创建的ODBC数据源及Delphi的软件工具Database Desktop创建Access数据库表,.,(1)创建表,Delphi,Tools Database Desktop,然后,在显示的窗口上选择菜单File NewTable,将打开一个Create Table(创建表)对话框,在此对话框上,选择AccessDB作为表的类型,然后单击“OK”按钮,则显示一个名为Create AccessDB Table对话框窗口。,(2)在Database Desktop中创建数据表,建立有5个字段的表,字段名分别表示“年级”、“专业”、“学号”、“姓名”和“年龄”,字段设置完成后,单击“Save As”按钮,将出现Save Table As对话框,在这个对话框中,首先要把别名设为MyAccessDatabase1,这时,将出现一个数据库登录对话框,单击“OK”按钮使它消失,因为还没有设置用户名和密码。在“文件名”编辑框中输入表名(不需要扩展名),本例为StudentItem,最后单击“保存”按钮,则新建的表就被保存在指定的数据库中。,8.2 BDE组件简介,BDE组件是一组用于开发数据库应用程序的专用组件。它包含Table,Query,StoredProc,DatabaseSession,BatchMove,UpdateSQL,NestedTable八个组件,对数据库应用程序的创建起到了关键的作用.,组件名,功能,Table,数据表组件。其作用是使用BDE驱动程序从指定的数据表中读取数据,或将修改数据保存到数据表。,Query,查询表组件。其作用是使用BDE驱动程序和SQL语句从指定数据表中读取数据,或将修改后的数据保存到数据表。,StoredProc,存储过程组件。其作用是使应用程序接受服务器的存储程序,并将从组件中接受的数据保存到数据库服务器中。,Database,数据库组件。其作用是建立一个到数据库的持续连接,特别适用于设计通过用户名和口令才能登录的远程数据库应用程序。,Session,会话组件。其作用是提供对一组数据库组件的全局控制,默认情况下,每个数据库应用程序会自动创建会话组件,只有在创建多线程数据应用程序时才必须使用它。,BatchMove,数据批量移动组件。其作用是用于复制数据表的结构或数据,它还能将一种格式的数据库表转化成另一种格式的数据库。,UpdateSQL,修改SQL语句组件。其作用是提供SQL语句,用于更新由Query 或StoredProc 组件表示的只读数据集,但是要求这些组件的CachedUpdate 属性必须设置为True。,NestedTable,嵌套表组件。其作用是从嵌套表中读取数据。,BDE组件可访问目前几乎所有的数据库,这些组件中最常用的是Table和Query组件,下面通过一个例子来介绍操作步骤。,例1:利用Table组件显示并操作数据表,新建一个项目,在主窗体上放入,Table,、,DataSource,、,DBNavigator,和,DBGrid,四个组件,它们的组件名分别为,Table1,、,DataSource1,、,DBNavigator1,和,DBGrid1,。,例1:利用Table组件显示并操作数据表,设置,Table1,的,DatabaseName,、,TableName,和,Active,属性值分别为,DBDEMOS,、,Customer.db,和,True,。,设置,DataSource1,组件的,DataSet,属性值为,Table1,。,设置,DBGrid1,和,DBNavigator1,组件的,DataSource,属性值为,DataSource1,DataSource1,DBGrid1,DBNavigator1,Table1,8.3 Table组件,Table组件用于访问指定数据表中的数据,它既可以代表数据表中的所有行和列,也可以代表它的部分行和列,使用Table 组件可完成打开、浏览、修改和建立数据表等操作。,8.3.1 打开/关闭数据表,1.打开表需要的前提条件,使用Table 组件打开数据表前必须设置其三个属性:DatabaseName、TableName和TableType。,DatabaseName 属性,功能:,用于指定数据表所在的数据库别名,(1)设计期:若已通过BDE已设置了数据库别名,就可在此属性显示的下拉列表中选择表所在的数据库别名。,(2)运行期:可使用Table1.DatabaseName:=数据库别名语句。若对本地数据库,可直接使用数据表文件所在的路径.,TableName 属性,功能:用于,指定要打开的数据表名,方法:,(1)设计期:设置好DatabaseName 属性后,在数据表组件的对象观察器中,使用 TableName属性可选择要打开的数据表。,(2)运行期:在运行期设置要打开的数据表,可使用如下语句:Table1.TableName:=数据表文件名,注意:使用此方法设置数据表名前,请确保Table1是关闭的,否则,关闭后再使用上述命令。,TableType 属性,功能:,用于设置要打开数据表的类型,TableType属性值及其对应的表类型,属性值,数据表类型,ttDefault,BDE根据文件扩展名决定数据表的类型,ttParadox,Paradox数据表,ttDBase,dBASE数据表,ttFoxPro,FoxPro数据表,ttASCII,ASCII文本表,一般情况下,tableType属性常使用默认值ttDefault,此时,BDE会根据数据表文件的扩展名来确定数据表的类型,文件扩展名与表类型的对应关系,文件扩展名,数据表的类型,没有文件扩展名,Paradox,.DB,Paradox,.DBF,dBASE,.TXT,ASCII Text,2.打开数据表,在应用程序中,对表进行操作前都必须首先打开表。,打开表的方法:,(1)使用数据表组件的Open方法,(2)使用数据表组件的Active属性,比较:上述两种方法都能打开数据表。但第2种方法效率较高,因为第1种方法最终要将数据表的Active属性值设为True。,3.,关闭数据表,数据表使用完成后要及时关闭。,关闭数据表的方法:,(1)调用数据表组件的Close方法,(2)将数据表组件的Active属性设为false,8.3.2 浏览数据表,建立数据表的目的是查询表中有用的数据,浏览数据表是查询数据表中数据的重要手段之一。在Delphi中,浏览数据表是通过移动记录指针来实现的,这里的指针可以理解为记录指示器,它用于表示数据表中可操作记录的位置,通常把指针指向的记录称为当前记录。,由于只能操作指针指向的记录,因此要修改数据表中的记录,就必须先移动记录的指针,为方便对数据表的操作,数据表(Table和Query)组件提供了一系列移动记录指针的命令,常用的命令有:,数据集组件(Table和Query)移动记录指针命令,First:将记录指针移动到第一条记录上;,Last:把记录指针移动到最后一条记录上;,Next:使记录指针向后移动一条记录;,Prior:使记录指针向前移动一条记录;,MoveBy(Num):用于从当前记录开始向前或向后移动Num个记录,当Num0时,向后移动,当Num 1400)AND(Custno 1500);,Table1.Filtered:=True;,通过属性设置的过滤有较高的效率,能用属性设置完成的过滤,最好不用其它方法。,2)事件设置法,通过数据表的Filter属性设置过滤虽然简单高效,但不能使用较复杂的过滤条件,当使用较复杂的过滤条件时,就必须使用“事件设置法”。,使用事件过滤记录的步骤如下:,A)将数据表的Filtered属性设为True。B)编写数据表的OnFilterRecord事件。,过滤事件中有两个参数,其中Dataset表示当前的数据表名,参数Accept则用于设置过滤。,如使用“事件设置法”将Company字段中不以S开头的记录过滤出去,则代码如下:,procedure TForm1.Table1FilterRecord(Dataset:TDataSet;var Accept:Boolean);,var,FieldValue:String;,Begin,FieldValue:=DataSetCompany;/获得Company 字段的值,Accept:=FieldValue1=S;/过滤掉字段值的第一个字符不为“S”的记录,End;,4.设置主细表,设置主细表的目的是当用户在主表中任意选择一条记录时,程序会在细表中自动查询与该记录相关的记录。主表和细表一般是按所起作用来划分的,起决定作用的是主表。,设置主细表的基本步骤:,1)确定要建立主细表关系的主表和细表,要求细表按关键字段建立并打开索引。这里的关键字段是在主细表之间建立关联的字段,如客户表与订单表主细表关系中,客户号(CustNo)即是关键字段。,2)设置细表的MasterSource和MasterFields属性,建立与主表的关系。,设置主细表实例,1)建立一个新项目,在此项目的主窗体上分别放入2个Table、2个数据源、2个表格和1个数据表导航组件,其组件名分别为Table1、Table2、DataSource1、DataSource2、DBGrig1、DBGrid2和DBNavigator1组件,设置它们的相关属性见下表:,4.设置主细表,Table2的MasterFields的值是通过对话框设置的。,设置方法:选中Table2,到对象观察器中找到MasterFields属性,单击此属性设置框右侧的对话框按钮,显示字段连接设计器对话框,在对话框的可用索引选择框中,选择包含关键字段CustNo的索引名,并在细表字段(Detail Fields)和主表字段(Master Fields)选择框内选择关键字段名CustNo,然后单击“Add”按钮以创建主细表之间的链接,最后,单击“OK”按钮完成主细表设置。,注意:设置MasterFields属性之前必须先设置MasterSource属性。,设置细表的Master Fields属性,。,5.使用数据表事件,数据表的事件与数据表的方法的区别:,数据表的方法是Delphi为开发者准备的用于完成某些特殊功能的程序代码,它包括数据表的过程和函数,开发人员可直接调用。,数据表的事件要求程序员自己编写程序模块。在执行方式上,数据表的事件一般不需显式调用,它通过用户发送的消息来激发执行。,事件的特征可将事件划分为三类,即以After、Before和On 开头的事件。,After*,事件表示当*操作发生后执行的事件。,Before*,事件表示当*操作发生前执行的事件,,On*,事件表示当*操作发生时执行的事件。,8.3.4建立数据表,数据表的CreateTable方法可完成动态创建数据表的功能。其步骤如下:,1)创建表对象 即定义TTable类型的变量并对其实例化。如定义一个名为NewTable对象可使用如下代码:,Var NewTable:TTable;,NewTable:=TTable.Create(Self);,2)设置表对象的属性,要设置的属性为DatabaseName、TableName和TableType:,NewTable.DatabaseName:=创建表的数据库别名,NewTable.TableName:=表文件名,NewTable.TableType:=表类型名;,3)定义要创建数据表的结构,定义数据表结构是通过数据表对象的,FieldDefs,属性的,Add,方法来实现,定义格式如下:,Procedure,Add(const,Name:String;,DataType,:,TFieldType,;Size:Integer=0;Required:Boolean=False);,其中:,Name,用于指定字段名称。,DataType,用于指定字段类型。,Size,用于指定字段的宽度。要注意,此参数只适用于字符和备注两种类型的字段,而整型、日期型等类型字段的大小固定为,0,。,Required,用于设置字段值是否必须非空,为,True,时表示非空。对强制非空的字段来说,当保存记录时,要求字段必须有确定的值。,3),建立索引,创建数据表时建立索引,则要使用数据表对象的,IndexDefs,属性的,Add,方法,。,Add,方法定义格式如下:,procedure,Add(const,Name,Fields:String;Options:,TIndexOptions,);,其中:,Name,用于指定要建立的索引名,注意,,Paradox,表的主索引名为空。,Fields,用于指定被索引字段名。如果是复合索引,字段名之间用分号隔开。,Options,用于指定创建表的索引类型,此参数是集合类型,其可能取值和含义见下表,:Boolean=False);,5)使用CreateTable创建表,功能是按表对象的设置创建数据表,;,格式为:表对象名,.,CreateTable,;,例,1,:用程序代码在,C,盘根目录下创建一个名为“成绩,1.db”,的成绩表,它包含学号(,C,,,15,)、,C,语言(,N,)、,Pascal,程序设计,(N),和名次(,I,)字段,并要求按学号建立主索引,按名次建立降序次索引。,建立一个新项目,在主窗体上放一个按钮(,Button,)、表,(Table),、表格,(,DBGrid,),和数据源,(,DataSource,),等组件,并编写按钮的,OnClick,事件,代码如下:,procedure TForm1.BitBtn1Click(Sender:,TObject,);,Var,NewTable:TTable,;/,定义表对象,begin,try,newtable,:=,Ttable.Create(self,);/,新建立一个表对象,with,newtable,do,begin,DatabaseName,:=c:;/,设置新表所在文件夹或数据库别名,TableName,:=,成绩,1.db;/,确定表名,TableType,:=,ttParadox,;/,建立一个,Paradox,表,end;,with,FieldDefs,do begin,Add(,学号,ftString,15,True);/,添加字段,Add(C,语言,ftFloat,0,False);,Add(Pascal,ftFloat,0,False);,add(,名次,ftword,0,false);,end;,IndexDefs.Add,(,学号,ixPrimary,);/,添加主索引,IndexDefs.Add(MC,名次,ixdescending,);/,添加名为,MC,的子降序次索引,CreateTable,;/,建表,end;,finally,newtable.free,;,end;,/,打开新建的成绩表,Datasource1.DataSet:=Table1;,DBgrid1.DataSource:=Datasource1;,with Table1 do,begin,DatabaseName,:=c:;,TableName,:=,成绩表,.db;,Active:=true;,end,end;,8.3.5通过代码修改表结构,用,Table,组件动态修改表结构的方法:,先创建一个新表,然后将旧表中需要保留的数据导入新表中,删除旧表,最后将新表名改成旧表名。,例如,将新创建的“成绩,1.db”,数据表新增加一个“数字电路”成绩字段。步骤如下:,1,)建立一个包含原成绩表所有字段及“数字电路”字段的新表,命名为“成绩表,1.db”,,建立方法可参照,8.3.4,节。,2,)将旧表“成绩,1.db”,中的数据导入到新表“成绩表,1.db”,中。,BatchMove,组件用于将源数据表中的多条记录复制到目的表中。,8.3.5通过代码修改表结构,此组件需要设置它的下列属性:,Destination,:用于设置要导入数据的表,可用,Table1,表示。,Source,:指向数据来源表,即本节上面所提到的旧表,用,Table2,表示。,Mode,:用于设置成批处理数据的模式,本例设置为,batAppend,,当然你还可以根据自己的需要设置其它模式。可选择的模式及其含义如下表:,Mappings,用于设置源数据表向目的数据表追加记录时新旧表字段之间的对应关系。,格式:目的表字段名,=,源表字段名。,Mappings,是一个多行文本属性,每一行对应一个关系。,学号,=,学号,C,语言,=C,语言,Pascal=,Pascal,名次,=,名次,属性设置完成后使用,BatchMove,组件的,Execute,方法就能将旧表中的数据导入到新表,.,方法,:,设计期时,可通过右击,BatchMove,组件,在显示的下拉菜单中选择,Execute,运行期,通过程序代码调用,BatchMove,组件的,Execute,方法,3),删除旧表,并将新表名改成旧表名,删除文件,使用,DeleteFile,函数可完成删除文件的操作,定义格式:,function,Delete,:string):Boolean;,功能,:,删除指定的文件,当删除成功时,函数的返回值为,True,,否则返回,False,If,(C,:,成绩,1.db)then,Begin,If,Deletefile(C,:,成绩,1.db)then,ShowMessage,(,删除,C:,成绩,1.db,文件成功,),Else,ShowMessage,(,删除,C:,成绩,1.db,文件失败,);,End,Else,Showmessage,(,没有找到要删除的文件,);,8.4Query 组件,Query,组件是另一种表组件,,Table,表组件主要用于直接访问一个物理表,而,Query,表则使用,SQL,语句来访问数据库中一个或多个数据表中的数据,且默认情况下通过,Query,组件查询的数据是只读的,而默认情况下使用,Table,组件显示的数据表都是可读写的。,Query,组件的特点:,1),通过,SQL,语句可以同时访问多个表;,2),可以选择表中的某些行或列;,3),比,Table,表有更高的执行效率,适合开发远程数据库应用程序。,8.4.1使用Query 组件打开数据表,打开方法:,1,)设置,Query,组件使用的数据库别名,即设置该组件的,DatabaseName,属性,;,2),设置,SQL,属性,用于保存,Query,使用的,SQL,语句,;,3),通过其,Open,方法或,Active,属性打开查询表。,例:通过,query,组件查询,Dbdemos,数据库中,customers,表的数据,Query1,Datasource1,DBGrid1,使用TQuery组件打开数据表,8.4.1修改查询表,默认情况下,,Query,表组件只读,若想修改则应使其处于可修改状态。一般情况下,当该组件的,RequestLive,属性值为,True,时,查询表是可修改的,但这种设置方式并不总是有效,它还与访问的数据库有关,若,query,组件的,SQL,属性中出现下列情况,即使,RequestLive,属性为,True,,也不能使其处于可修改状态:,含有,JOIN,、,UNION,、,INTERSECT,或,MINUS,操作;,在,Select,语句中出现,DISTINCT,关键字;,在列引用或计算字段中出现聚集函数;,使用,GROUP BY,或,HAVING,子句;,在,FROM,子句中有子查询;,ORDER BY,子句中有非索引字段。,因此,在修改数据表之前,最好通过,CanModify,函数判断查询表是否可修改,如:,If Query1.CanModify Then,Begin,修改查询表中数据的语句序列,End,;,8.4.3,动态查询,实现方法,:,1),通过修改,SQL,语句,;,2),通过修改动态参数,1.,修改,SQL,语句,实现步骤:,1),关闭查询表使用,Close,方法或使其,Active,属性值,;,2),使用,SQL,的,Clear,方法清除查询表的,SQL,属性值;,3),使用,SQL,的,Add,方法增加新,SQL,语句,;,4),使用查询表的,Open,方法打开查询表。,例,1,,将,Query1,的,SQL,语句修改为“,Select*from customer where,custno,=1235”,。,Query1.Close;,Query1.Sql.Clear;,Query1.Sql.Add(Select*from customer where,custno,=1235);,Query1.Open;,程序运行期间,使用,SQL,的,StringsIndex,子属性也能对,SQL,属性进行局部修改(其中,Index,值从,0,开始,,Index,表示,SQL,语句的第,Index+1,行),,例如:,Query1.Sql.Strings0:=select*from customer;/,仅修改,SQL,属性值中的第一行内容。,2.,使用动态参数,一般来说,在,SQL,语句中若出现“:参数名”格式的子句,则认为这个“参数名”是一个动态参数,.,动态参数的赋值方法,:,1),在设计期设置初值,当写好含有动态参数的,SQL,命令后,到查询表组件的对象观察器上找到它的,Params,属性,单击其编辑框中的对话框按钮,则显示如图,8-4-3,所示的动态参数列表窗口,在此窗口中选择要设置的动态参数,在动态参数的对象观察器上设置,DataType,和,Value,属性,Query1对象观察器,参数Cno的,对象观察器,应用程序,窗体,图8-4-3 设置动态参数初始值图示,动态参数,列表窗口,Cno的初值,设置处,2),在运行期赋值,运行期对查询表的动态参数赋值,可使数据查询更加灵活,以满足用户的不同查询需求。设置动态参数的步骤如下:,关闭查询表。调用,Tquery,的,Close,方法;,释放以前查询时分配的资源。调用,Tquery,的,Unprepare,方法;,为动态参数赋值。调用,Tquery,的,ParamByName,函数;,为当前查询分配资源。调用,Tquery,的,Prepare,方法;,打开查询表,实现查询。调用,Tquery,的,Open,方法。,例,2,,用代码方式为,Query1,查询表的动态参数,Cno,赋值,要赋的值为,1231,,其中:,Query1,的,SQL,属性值为:,Select*From,Customer.db,where,Custno,=,:,Cno,。则程序代码如下:,Query1.Close;,Query1.UnPrepare;,Query1.ParamByName(Cno).AsInteger:=1231;,Query1.Prepare;,Query1.Open;,为动态参数赋值的语句个数由,SQL,属性中设置的动态参数的个数决定,另外,通过代码还能设置动态参数的数据类型(,DataType,),如设置,Cno,参数的数据类型为整数型,代码如下:,Query1.ParamByName(CNo).DataType:=,ftInteger,;,3),通过数据源自动赋值,利用,Table,表组件可以建立主细表查询,虽然建立方法不太复杂,但有一个前提条件是细表必须按关键字段建立索引并打开,而使用查询表动态参数的自动赋值功能可很容易建立主细表,并且没有索引限制。,查询表有一个名为“,DataSource,”,的属性,这个属性设置的数据源就是动态参数使用的数据源,此数据源指向的表称为“主表”,含有动态参数的查询表则为“细表”。当主表记录指针发生变化时,细表将从主表自动获取动态参数值,并执行查询。但是动态参数从指定的数据源中自动取值有一个特别要求,即动态参数只能在指定数据源的同名字段中获取数据。,例:利用动态参数的自动赋值功能建立主细表。步骤如下:,新建一个项目,在主窗体上放入两个查询组件,ZB,(主表),XB,(细表)、两个数据源组件,ZBDataSource,和,XBDataSource,,两个表格组件,ZBGgrid,和,XBGrid,设置两个查询表的,DatabaseName,属性值为,DBDEMOS,;设置,ZBDataSource,和,XBDataSource,的,Dataset,属性值分别为,ZB,和,XB,;设置,ZBGgrid,和,XBGrid,的,DataSource,属性值分别为,ZBDataSource,和,XBDataSource,;,设置主表,ZB,的,SQL,属性值为:,Select*from,Customer.db,,设置细表,XB,的,SQL,属性值为:,Select*from order where,custno,=:,custno,;,设置细表的,DataSource,属性值为,ZBDataSource,;,使用,Active,属性值打开主表,然后再打开细表。,使用查询表建立主细表,主表,细表,8.5使用查询表组件动态创建数据表,在查询表中执行,Create Table,和,Alter Table SQL,命令可以非常方便地动态创建数据表。,Query,组件的,SQL,属性中使用的字段类型:,1,.动态创建表,通过查询表组件执行SQL的数据定义语句Create Table可完成动态表的创建工作,Create Table语句的使用格式如下:,Create Table 表名(字段定义,字段定义,.,关键字约束),功能:按指定字段和关键字约束创建dBASE或Paradox表。,说明:,1)格式中的“表名”用于定义要建立的数据表名,若表名中有空格,则在“表名”的两边要加双引号。,2)“字段定义”由字段名、类型和长度构成,若有多个字段定义,它们之间用逗号分隔并写在圆括号中。,3)“关键字约束”主要用于创建主索引。使用PRIMARY KEY(或CONSTRAINT)可建立主索引.,2.建立次索引,当数据表中建立了主索引,我们还可使用Index语句建立次索引。,格式:,CREATE UNIQUE ASC|DESC INDEX 索引名ON 表名(参照字段名,参照字段名,参照字段名,.),功能:为数据表建立次索引。,说明:,对Paradox 表可建立基于多个字段的次索引,而对dbf表只能建立有一个字段的索引。,使用UNIQUE可建立惟一性索引,默认情况下索引值不惟一。,使用ASC(或ASCENDING)选择项可建立按递增顺序排列的索引;使用DESC(或DESCENDING)则建立按降序排列的索引;当不指定排列顺序时,默认为ASC。,3.删除索引,格式:DROP INDEX 表名.索引名|PRIMARY,说明:,删除dBASE及Paradox表的主索引或次索引时,索引名前要加表名,且它们之间用“.”分隔。,使用PRIMARY关键字可删除Paradox的主索引,4.删除表,删除一个已存在的数据表。,格式:DROP TABLE 表名,例3:删除Employee.db数据表。,DROP TABLE Employee.db“,5.修改数据表的结构,格式:,ALTER TABLE 表名DROP COLUMN 字段名|ADD COLUMN 字段定义,reference DROP COLUMN 字段名|ADD COLUMN 字段定义.DROP INDEX 表名.索引名|PRIMARY,功能:增加或删除数据表的字段。,说明:DROP 关键字只用于删除字段,ADD关键字则用于增加字段。,例4:删除Names.db表的FULLNAME列,并为其增加LASTNAME列:,ALTER TABLE Names.db DROP FullName,ADD LastName CHAR(25),如果删除的列是主关键字的一部分,则主索引将被删除。但ALTER TABLE不能删除外码约束对应的目标字段(参照完整性)。,若字段名中含有特殊字符时,则必须用双引号括起来,且前面要加上表名前缀。,此课件下载可自行编辑修改,供参考!,感谢您的支持,我们努力做得更好!,
展开阅读全文