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

  对于BDE会话期对象来说BDE别名特别重要许多思路方法都需要传递个数据库别名作为参数Tsession提供了管理BDE别名功能  
  但是作者往往等到要发布时才发现由于找不到别名而无法运行必须在台已经装了BDE管理机上才能用定非常失望不要紧只要在中加入以下语句就又可以执行  
  AddAlias用于为Paradox、dBase或文本创建别名不需要连接参数只需指定个路径和默认驱动  
  AddStandardAlias则需要传递 3个参数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 3 种 数 据 库 作 为 缺 省 驱 动 程 序(DEFAULT DRIVER)  

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

---- Delphi 数 据 库 应 用 程 序 能 自 动 提 供 个Session 组 件 这 个 Session 组 件 即 为 应 用 程 序 和BDE 接 口  

---- 1. 检 测 别 名  

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

---- 2. 增 加 个 新 别 名  

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

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

---- 3.BDE 配 置 文 件 存 盘  

---- Session.SaveConfigFile;  

---- 2、 数 据 库 中 表 格 定 义 和 检 测 方 法  

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

---- 1. 检 测 表 格 是 否 存 在  

---- 通 过 调 用Session.GetTableNames(const DatabaseName,  

---- Pattern: ; Extensions,Tables: Boolean; List:  

---- TStrings) 方 法 可 将 当 前 指 定 数 据 库 别 名 中 所 有 表 格 名 称 存 放 到 List 字 符 串 列 表 中list.IndexOf(' 需 要 检 测 表 格 名') 值 会 告 诉 我 们 这 个 表 格 是 否 存 在( 其 值 为-1 时 不 存 在)  

---- 2. 建 立 个 表 格  

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

---- 第 2 步 调 用Table.FieldDefs.Add(const Name: ;  

---- DataType: TFieldType; Size: Word; Required: Boolean) 增 加 表 格 各 个 字 段 其 中Name 为 字 段 名DataType 为 字 段 类 型( 常 用 有 ftInteger,ftString,ftDate,ftBoolean 等),Size 为 字 段 长 度 Required 为 该 字 段 是 否 允 许 有 空 值  

---- 第 3 步 调 用Table.IndexDefs.Add(const Name, Fields: ; Options: TIndexOptions) 方 法 增 加 表 格 索 引 文 件 其 中 Name 为 索 引 文 件 名Fields 为 索 引 字 段options 为 索 引 参 数 集 合 常 用 索 引 参 数 有ixPrimary( 主 键)、 ixDescending( 降 序)、 ixUnique( 具 有 唯 值) 等  

---- 第 4 步 调 用Table.CreateTable 建 立 表 格  

---- 3、 个 实 例  

---- 在Form1.Formcreate 事 件 中 写 入 如 下 代 码 程 序 启 动 时 将 自 动 检 测 是 否 存 在 数 据 库 别 名Cntssamp 如 果 没 有 则 建 立 的; 自 动 检 测 别 名Cntssamp 中 是 否 存 在 表 格TSK( 图 书 库) 如 果 没 有 则 自 动 建 立 表 格TSK  

procedure TForm1.FormCreate(Sender: TObject);  
var  
ap:TStringList; {串列表变量}  
answer:Integer;  
begin  
ap:=TStringlist.Create;  
Session.GetAliasNames(ap); {取得别名列表}  
(ap.IndexOf('Cntssamp')=-1) then {判断别名是否存在}  
begin  
answer:=Application.MessageBox(  
'别名Cntssamp不存在  
现在创建吗?','BDE信息窗口',mb_OKCancel);  
{增加个名为Cngzsamp数据库别名}  
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);  
(ap.IndexOf('TSK')=  
-1) then {判断表格是否存在}  
begin  
answer:=Application.MessageBox(  
'别名Cntssamp中不存在  
表格TSK,现在创建吗?','表格信息窗口  
',mb_OKCancel);  
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;
Tags:  数据库如何导入表格 表格数据库

延伸阅读

最新评论

发表评论