安全中国首页 > 编程中心 > Delphi编程
 
安全中国网友投稿专用上传FTP空间:
Ftp服务器:www.anqn.com
Ftp端口:21
用户名:anqn
密 码:anqn.com
 

检测、建立数据库别名和表格

更新时间:2008-8-5 2:54:12
责任编辑:ShellExp
热 点:

  对于BDE会话期对象来说,BDE别名特别重要,许多方法都需要传递一个数据库的别名作为参数。Tsession提供了管理BDE别名的功能。

  但是作者往往等到要发布程序时才发现,你的程序由于找不到别名而无法运行,必须在一台已经装了BDE管理程序的机上才能用,你一定非常失望。不要紧,只要在程序中加入以下语句,你的程序就又可以执行。 

  AddAlias用于为Paradox、dBase或文本创建别名,不需要连接参数,只需指定一个路径和默认的驱动程序。

  AddStandardAlias函数则需要传递三个参数,Name参数用于指定名称,Driver参数用于指定SQL Links驱动程序,List参数用于指定连接参数。 

procedure TForm1.FormCreate(Sender: Tobject); 
begin 
with Session do 
begin 
ConfigMode := cmSession; 
try 
AddStandardAlias('WorkMen', ExtractFilePath(ParamStr(0)), 'PARADOX'); 
finally 
ConfigMode := cmAll; 
end; 
end; 
end; 

  上面的是单机版的创建别名方法,还有创建SQL服务器别名的方法:
 
procedure TForm1.FormCreate(Sender: Tobject); 
var MyList: TStringList; 
begin 
MyList := TStringList.Create; 
try 
with MyList do 
begin 
Add('SERVER NAME=IB_SERVER:/PATH/DATABASE.GDB'); 
Add('USER NAME=MYNAME'); 
end; 
Session1.AddAlias('WorkMen', 'INTRBASE', MyList); 
finally 
MyList.Free; 
end; 
end; 

  要说明的是,调用AddStandardAlias或AddAlias函数创建的别名只存在于内存中,程序关闭后就没有了,要把别名永远的保存到BDE配置文件中,请调用SaveConfigFile函数来保存到设置文件中。 


   一、数据库别名(Alias) 的定义和检测方法 

  当Type 为STANDARD 时, 别名定义最为简单,这时仅能采用PARADOX, DBASE,ASCIIDRV 三种数据库作为缺省的驱动程序(DEFAULT DRIVER)。 

  另外,还要定义数据库存放路径(PATH) 和ENABLE BCD,才能建立一个完整的数据库别名。 

  Delphi 的数据库应用程序能自动提供一个Session 组件,这个Session 组件即为应用程序与BDE 的接口。 

  1. 检测别名 

  通过调用Session.GetAliasNames(list:Tstrings) 方法,可将当前BDE 配置中的所有数据库别名的名称存放到List 字符 串列表中。list.IndexOf(' 需要检测的别名') 的值会告诉我们这个别名是否存在 ( 其值为-1 时不存在)。 

  2. 增加一个新的别名 

  Session 组件的过程AddStandardAlias(const Name, Path, DefaultDriver: string), 可以增加一个标准类型的数据库别名。例如增加一个名为Cntssamp,缺省数据库驱动程序为PARADOX、存放路径为c:\delphp11 的别名: 

  Session.AddStandardAlias('Cntssamp','c:\delphp11','Paradox'); 

  3.BDE 配置文件存盘 

  Session.SaveConfigFile; 


  二、数据库中表格的定义和检测方法 

  数据库中表格的定义、维护和使用,只有在数据库别名正确设置的情况下才有意义。以TTable 组件为例,必须设置其DatabaseName 为一个实际存在的别名。 

  1. 检测表格是否存在 

  通过调用Session.GetTableNames(const DatabaseName,  Pattern: string; Extensions,SystemTables: Boolean; List:  TStrings) 方法,可将当前指定数据库别名中所这个表格是否存在( 其值为-1 时不存在)。 

  2. 建立一个表格 

  第一步,设置TTable 组件的DataBase Name( 别名)、TableName ( 表格名)、TableType( 数据库类型); 

  第二步,调用Table.FieldDefs.Add(const Name: string; 

  DataType: TFieldType; 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。 

procedure TForm1.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的数据库别名} 
if answer=IDCANCEL then 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); 
if answer=IDCANCEL then begin 
ap.Free; 
Exit; 
end; 
with table1 do begin 
Active:=false; 
DatabaseName:='Cntssamp'; {数据库别名} 
TableName:='TSK'; {表格名} 
TableType:=ttParadox; {数据库类型} 
with FieldDefs 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; 
with IndexDefs do begin {增加索引} 
Clear; {按书号字段建立主索引} 
Add('SHSY','SH',[ixPrimary,ixUnique]); 
end; 
CreateTable; {创建表格} 
end; 
end ; 
ap.free; {释放变量ap} 
end

 
学习软件编程开发技术,推荐加入以下软件编程培训班:
易语言软件编程培训班(简单易学)  Delphi软件编程培训班  VC++软件编程培训班
VB软件编程培训班  JAVA高端编程就业研发班

学习网站开发制作技术,推荐加入以下网站开发培训班:
ASP.net网站开发项目实战班  ASP语言网站建设培训班

学习网络安全入侵防护技术,推荐加入以下技术培训班:
大型网络安全入侵防护班  网站脚本程序全方位安全检测班

学习网络管理、网吧运营维护技术(网管),推荐加入以下培训班:
大型网吧技术管理人才特训班  Linux网络嵌入架构工程师培训班

学习专项特殊技术,推荐加入以下专项技术培训班:
软件与游戏外挂脱壳破解班(逆向工程)  赚钱王道-网赚技能培训班  Flash动画设计师就业特训班

 
相关编程
一日一文章
 
一日一软件
一日一动画