熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Delphi編程 >> 正文

檢測、建立數據庫別名和表格

2013-11-23 17:45:40  來源: Delphi編程 

  對於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;


From:http://tw.wingwit.com/Article/program/Delphi/201311/25034.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.