Chinaunix首页 | 论坛 | 博客
  • 博客访问: 14481210
  • 博文数量: 5645
  • 博客积分: 9880
  • 博客等级: 中将
  • 技术积分: 68081
  • 用 户 组: 普通用户
  • 注册时间: 2008-04-28 13:35
文章分类

全部博文(5645)

文章存档

2008年(5645)

我的朋友

分类:

2008-04-28 20:46:41

下载本文示例代码
p>  Delphi3内建的Borland数据库 引擎(BDE),使Delphi3程序能通过数据库别名(DatabaseAlias)十分方便地访问各种类型的数据库。然而,数据库别名的建立、修改、删除等维护工作,需要在BDEAdministrator 中进行,数据库中实际表格结构的建立和维护,有时也要在DataBaseDesktop中完成,这给用户增加了不少困难。有没有办法让用户不去执行BDEAdministrator 和DataBaseDesktop这两个应用程序,就可直接检测、建立数据库别名和库中的表格呢?笔者通过探索,得到了一种可行的方案,现以笔者所开发 的一个单机版的图书资料管理系统为例,简要加以说明。 一、数据库别名(Alias)的定义和检测方法   当Type为STANDARD时,别名定义最 为简单,这时仅能采用PARADOX,DBASE,ASCIIDRV三种数据库作为缺省的驱动程序(DEFAULTDRIVER)。   另外,还要定义数据库存放路径(PATH) 和ENABLEBCD,才能建立一个完整的数据库别名。   Delphi的数据库应用程序能自 动提供一个Session组件,这个Session组件即为应用程序与BDE的接口。 1.检测别名   通过调用Session.GetAliasNames(list:Tstrings) 方法,可将当前BDE配置中的所有数据库别名的名称存放到List字符串列表中。list.IndexOf(需要检测的别名)的值会告诉我们这个别名是否 存在(其值为1时不存在)。 2.增加一个新的别名   Session组件的过程AddStandardAlias(constName,Path,DefaultDriver:string),可以增加一个标准类型的数据库别名。例如增加一个名为Cntssamp,缺省数据库驱动程序为PARADOX、存 放路径为c:\delphp11的别名: Session.AddStandardAlias(Cntssamp,c:\delphp11,Paradox); 3.BDE配置文件存盘 Session.SaveConfigFile; 二、数据库中表格的定义和检测方法   数据库中表格的定义、 维护和使用,只有在数据库别名正确设置的情况下才有意义。以TTable组 件为例,必须设置其DatabaseName为一个实际存在的别名。 1.检测表格是否存在   通过调用Session.GetTableNames(constDatabaseName,Pattern:string; Extensions,SystemTables:Boolean; List:TStrings)方法,可将当前指定数据库? 中所有表格的名称存放 到List字符串列表中。list.IndexOf(需要检测的表格名)的值会告诉 我们这个表格是否存在(其值为1时不存在)。 2.建立一个表格   第一步,设置TTable组件的DataBase Name(别名)、TableName(表格名)、TableType(数据库类型);   第二步,调用Table.FieldDefs.Add(constName:string;DataType:FieldType;Size:Word;Required:Boolean)增加表格的各个字段,其中Name为字段名,DataType为字段类型(常用的有ftInteger,ftString,ftDate,ftBoolean等),Size为字段长度,Required为该字段是否允许有空值。   第三步,调用Table.IndexDefs.Add(const Name,Fields:string;Options:TIndexOptions)方法增加表格的索引文件,其中Name为索引文件名,Fields为索引字段,options为索引参数 的集合,常用的索引参数有ixPrimary(主键)、ixDescending(降序)、ixUnique( 具有唯一值)等。 第四步,调用Table.CreateTable 建立表格。 三、一个实例   在Form1.Formcreate事 件中写入如下代码,程序启动时,将自动检测是否存在数据库别名Cntssamp,如果没有则建立之;自动检测别名Cntssamp中是否存在表格TSK(图书库), 如果没有则自动建立表格TSK。 procedureTForm1.FormCreate(Sender: TObject); var ap:TStringList;{字符串列表变量} answer:Integer; begin ap:=TStringlist.Create; Session.GetAliasNames(ap);{取得别名列表} if(ap.IndexOf(Cntssamp)=1)then{判断别名是否存在} begin answer:=Application.MessageBox(别名Cntssamp不存在,现在创建吗?,BDE信息窗口,mb_OKCancel); {增加一个名为Cngzsamp的数据库别名} ifanswer=IDCANCELthen begin ap.Free; Exit; end; Session.AddStandardAlias(Cntssamp,c:\delphp11,Paradox); Session.SaveConfigFile; {BDE配置文件存盘} end; ap.Clear;{取得别名Cngzsamp中的所有表格名称列表} Session.GetTableNames(Cntssamp,,False,False,ap); if(ap.IndexOf(TSK)=1)then {判断表格是否存在} begin answer:=Application.MessageBox( 别名Cntssamp中不存在表格TSK,现在创建吗?,表格信息窗口,mb_OKCancel); ifanswer=IDCANCELthen begin ap.Free; Exit; end; withtable1do begin Active:=false; DatabaseName:=Cntssamp; {数据库别名} TableName:=TSK; {表格名} TableType:=ttParadox; {数据库类型} withFieldDefs do begin {增加字段} Clear; Add(SH,ftString,30,False);{书号String(30)} Add(SM,ftString,30,False);{书名String(30)} Add(CBS,ftString,20,False);{出版社String(20)} Add(CBRQ,ftDate,0,False);{出版日期Date} Add(YS,ftInteger,0,False);{页数Integer} end; withIndexDefs do begin {增加索引} Clear; {按书号字段建立主索引} Add(SHSY,SH,[ixPrimary,ixUnique]); end; CreateTable; {创建表格} end; end; ap.free; {释放变量ap} end; p>  Delphi3内建的Borland数据库 引擎(BDE),使Delphi3程序能通过数据库别名(DatabaseAlias)十分方便地访问各种类型的数据库。然而,数据库别名的建立、修改、删除等维护工作,需要在BDEAdministrator 中进行,数据库中实际表格结构的建立和维护,有时也要在DataBaseDesktop中完成,这给用户增加了不少困难。有没有办法让用户不去执行BDEAdministrator 和DataBaseDesktop这两个应用程序,就可直接检测、建立数据库别名和库中的表格呢?笔者通过探索,得到了一种可行的方案,现以笔者所开发 的一个单机版的图书资料管理系统为例,简要加以说明。 一、数据库别名(Alias)的定义和检测方法   当Type为STANDARD时,别名定义最 为简单,这时仅能采用PARADOX,DBASE,ASCIIDRV三种数据库作为缺省的驱动程序(DEFAULTDRIVER)。   另外,还要定义数据库存放路径(PATH) 和ENABLEBCD,才能建立一个完整的数据库别名。   Delphi的数据库应用程序能自 动提供一个Session组件,这个Session组件即为应用程序与BDE的接口。 1.检测别名   通过调用Session.GetAliasNames(list:Tstrings) 方法,可将当前BDE配置中的所有数据库别名的名称存放到List字符串列表中。list.IndexOf(需要检测的别名)的值会告诉我们这个别名是否 存在(其值为1时不存在)。 2.增加一个新的别名   Session组件的过程AddStandardAlias(constName,Path,DefaultDriver:string),可以增加一个标准类型的数据库别名。例如增加一个名为Cntssamp,缺省数据库驱动程序为PARADOX、存 放路径为c:\delphp11的别名: Session.AddStandardAlias(Cntssamp,c:\delphp11,Paradox); 3.BDE配置文件存盘 Session.SaveConfigFile; 二、数据库中表格的定义和检测方法   数据库中表格的定义、 维护和使用,只有在数据库别名正确设置的情况下才有意义。以TTable组 件为例,必须设置其DatabaseName为一个实际存在的别名。 1.检测表格是否存在   通过调用Session.GetTableNames(constDatabaseName,Pattern:string; Extensions,SystemTables:Boolean; List:TStrings)方法,可将当前指定数据库? 中所有表格的名称存放 到List字符串列表中。list.IndexOf(需要检测的表格名)的值会告诉 我们这个表格是否存在(其值为1时不存在)。 2.建立一个表格   第一步,设置TTable组件的DataBase Name(别名)、TableName(表格名)、TableType(数据库类型);   第二步,调用Table.FieldDefs.Add(constName:string;DataType:FieldType;Size:Word;Required:Boolean)增加表格的各个字段,其中Name为字段名,DataType为字段类型(常用的有ftInteger,ftString,ftDate,ftBoolean等),Size为字段长度,Required为该字段是否允许有空值。   第三步,调用Table.IndexDefs.Add(const Name,Fields:string;Options:TIndexOptions)方法增加表格的索引文件,其中Name为索引文件名,Fields为索引字段,options为索引参数 的集合,常用的索引参数有ixPrimary(主键)、ixDescending(降序)、ixUnique( 具有唯一值)等。 第四步,调用Table.CreateTable 建立表格。 三、一个实例   在Form1.Formcreate事 件中写入如下代码,程序启动时,将自动检测是否存在数据库别名Cntssamp,如果没有则建立之;自动检测别名Cntssamp中是否存在表格TSK(图书库), 如果没有则自动建立表格TSK。 procedureTForm1.FormCreate(Sender: TObject); var ap:TStringList;{字符串列表变量} answer:Integer; begin ap:=TStringlist.Create; Session.GetAliasNames(ap);{取得别名列表} if(ap.IndexOf(Cntssamp)=1)then{判断别名是否存在} begin answer:=Application.MessageBox(别名Cntssamp不存在,现在创建吗?,BDE信息窗口,mb_OKCancel); {增加一个名为Cngzsamp的数据库别名} ifanswer=IDCANCELthen begin ap.Free; Exit; end; Session.AddStandardAlias(Cntssamp,c:\delphp11,Paradox); Session.SaveConfigFile; {BDE配置文件存盘} end; ap.Clear;{取得别名Cngzsamp中的所有表格名称列表} Session.GetTableNames(Cntssamp,,False,False,ap); if(ap.IndexOf(TSK)=1)then {判断表格是否存在} begin answer:=Application.MessageBox( 别名Cntssamp中不存在表格TSK,现在创建吗?,表格信息窗口,mb_OKCancel); ifanswer=IDCANCELthen begin ap.Free; Exit; end; withtable1do begin Active:=false; DatabaseName:=Cntssamp; {数据库别名} TableName:=TSK; {表格名} TableType:=ttParadox; {数据库类型} withFieldDefs do begin {增加字段} Clear; Add(SH,ftString,30,False);{书号String(30)} Add(SM,ftString,30,False);{书名String(30)} Add(CBS,ftString,20,False);{出版社String(20)} Add(CBRQ,ftDate,0,False);{出版日期Date} Add(YS,ftInteger,0,False);{页数Integer} end; withIndexDefs do begin {增加索引} Clear; {按书号字段建立主索引} Add(SHSY,SH,[ixPrimary,ixUnique]); end; CreateTable; {创建表格} end; end; ap.free; {释放变量ap} end; 下载本文示例代码


在Delphi中自动检测、建立数据库别名和表格在Delphi中自动检测、建立数据库别名和表格在Delphi中自动检测、建立数据库别名和表格在Delphi中自动检测、建立数据库别名和表格在Delphi中自动检测、建立数据库别名和表格在Delphi中自动检测、建立数据库别名和表格在Delphi中自动检测、建立数据库别名和表格在Delphi中自动检测、建立数据库别名和表格在Delphi中自动检测、建立数据库别名和表格在Delphi中自动检测、建立数据库别名和表格在Delphi中自动检测、建立数据库别名和表格在Delphi中自动检测、建立数据库别名和表格在Delphi中自动检测、建立数据库别名和表格在Delphi中自动检测、建立数据库别名和表格在Delphi中自动检测、建立数据库别名和表格
阅读(199) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~