对于BDE会话期对象来说BDE别名特别重要许多方法都需要传递一个数据库的别名作为参数Tsession提供了管理BDE别名的功能
但是作者往往等到要发布程序时才发现你的程序由于找不到别名而无法运行必须在一台已经装了BDE管理程序的机上才能用你一定非常失望不要紧只要在程序中加入以下语句你的程序就又可以执行
AddAlias用于为ParadoxdBase或文本创建别名不需要连接参数只需指定一个路径和默认的驱动程序
AddStandardAlias函数则需要传递三个参数Name参数用于指定名称Driver参数用于指定SQL Links驱动程序List参数用于指定连接参数
procedure TFormFormCreate(Sender: Tobject);
begin
with Session do
begin
ConfigMode := cmSession;
try
AddStandardAlias(WorkMen ExtractFilePath(ParamStr()) PARADOX);
finally
ConfigMode := cmAll;
end;
end;
end;
上面的是单机版的创建别名方法还有创建SQL服务器别名的方法
procedure TFormFormCreate(Sender: Tobject);
var MyList: TStringList;
begin
MyList := TStringListCreate;
try
with MyList do
begin
Add(SERVER NAME=IB_SERVER:/PATH/DATABASEGDB);
Add(USER NAME=MYNAME);
end;
SessionAddAlias(WorkMen INTRBASE MyList);
finally
MyListFree;
end;
end;
要说明的是调用AddStandardAlias或AddAlias函数创建的别名只存在于内存中程序关闭后就没有了要把别名永远的保存到BDE配置文件中请调用SaveConfigFile函数来保存到设置文件中
一数据库别名(Alias) 的定义和检测方法
当Type 为STANDARD 时 别名定义最为简单这时仅能采用PARADOX DBASEASCIIDRV 三种数据库作为缺省的驱动程序(DEFAULT DRIVER)
另外还要定义数据库存放路径(PATH) 和ENABLE BCD才能建立一个完整的数据库别名
Delphi 的数据库应用程序能自动提供一个Session 组件这个Session 组件即为应用程序与BDE 的接口
检测别名
通过调用SessionGetAliasNames(list:Tstrings) 方法可将当前BDE 配置中的所有数据库别名的名称存放到List 字符 串列表中listIndexOf( 需要检测的别名) 的值会告诉我们这个别名是否存在 ( 其值为 时不存在)
增加一个新的别名
Session 组件的过程AddStandardAlias(const Name Path DefaultDriver: string) 可以增加一个标准类型的数据库别名例如增加一个名为Cntssamp缺省数据库驱动程序为PARADOX存放路径为c:\delphp 的别名
SessionAddStandardAlias(Cntssampc:\delphpParadox);
BDE 配置文件存盘
SessionSaveConfigFile;
二数据库中表格的定义和检测方法
数据库中表格的定义维护和使用只有在数据库别名正确设置的情况下才有意义以TTable 组件为例必须设置其DatabaseName 为一个实际存在的别名
检测表格是否存在
通过调用SessionGetTableNames(const DatabaseName Pattern: string; ExtensionsSystemTables: Boolean; List: TStrings) 方法可将当前指定数据库别名中所这个表格是否存在( 其值为 时不存在)
建立一个表格
第一步设置TTable 组件的DataBase Name( 别名)TableName ( 表格名)TableType( 数据库类型);
第二步调用TableFieldDefsAdd(const Name: string;
DataType: TFieldType; Size: Word; Required: Boolean) 增加表格的各个字段其中Name 为字段名DataType 为字段类型(常用的有 ftIntegerftStringftDateftBoolean 等)Size 为字段长度 Required 为该字段是否允许有空值
第三步调用TableIndexDefsAdd(const Name Fields: string; Options: TIndexOptions) 方法增加表格的索引文件其中Name为索引文件名Fields 为索引字段options 为索引参数的集合常用的索引参数有ixPrimary( 主键) ixDescending( 降序) ixUnique( 具有唯一值)等
第四步调用TableCreateTable 建立表格
三一个实例
在FormFormcreate 事件中写入如下代码程序启动时将自动检测是否存在数据库别名Cntssamp如果没有则建立之自动检测别名Cntssamp 中是否存在表格TSK( 图书库)如果没有则自动建立表格TSK
procedure TFormFormCreate(Sender: TObject);
var
ap:TStringList; {字符串列表变量}
answer:Integer;
begin
ap:=TStringlistCreate;
SessionGetAliasNames(ap); {取得别名列表}
if (apIndexOf(Cntssamp)=) then {判断别名是否存在}
begin
answer:=ApplicationMessageBox(
别名Cntssamp不存在
现在创建吗?BDE信息窗口mb_OKCancel);
{增加一个名为Cngzsamp的数据库别名}
if answer=IDCANCEL then begin
apFree;
Exit;
end;
SessionAddStandardAlias
(Cntssampc:\delphpParadox);
SessionSaveConfigFile; {BDE配置文件存盘}
end ;
apClear; {取得别名Cngzsamp中的所有表格名称列表}
SessionGetTableNames
(CntssampFalseFalseap);
if (apIndexOf(TSK)=
) then {判断表格是否存在}
begin
answer:=ApplicationMessageBox(
别名Cntssamp中不存在
表格TSK现在创建吗?表格信息窗口
mb_OKCancel);
if answer=IDCANCEL then begin
apFree;
Exit;
end;
with table do begin
Active:=false;
DatabaseName:=Cntssamp; {数据库别名}
TableName:=TSK; {表格名}
TableType:=ttParadox; {数据库类型}
with FieldDefs do begin {增加字段}
Clear;
Add(SHftStringFalse); {书号 String()}
Add(SMftStringFalse); {书名 String()}
Add(CBSftStringFalse); {出版社 String()}
Add(CBRQftDateFalse); {出版日期 Date}
Add(YSftIntegerFalse); {页数 Integer}
end;
with IndexDefs do begin {增加索引}
Clear; {按书号字段建立主索引}
Add(SHSYSH[ixPrimaryixUnique]);
end;
CreateTable; {创建表格}
end;
end ;
apfree; {释放变量ap}
end;