如何用Delphi实现数据库应用程序别名的自动建立?(200分)

  • 主题发起人 主题发起人 gete
  • 开始时间 开始时间
[转贴]
在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 table1do
begin
Active:=false;
DatabaseName:='Cntssamp';
{数据库别名}
TableName:='TSK';
{表格名}
TableType:=ttParadox;
{数据库类型}
with FieldDefsdo
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 IndexDefsdo
begin
{增加索引}
Clear;
{按书号字段建立主索引}
Add('SHSY','SH',[ixPrimary,ixUnique]);
end;
CreateTable;
{创建表格}
end;
end ;
ap.free;
{释放变量ap}
end;

 
http://cheka.163.net/mywebstuff/articles/database/在Delphi%20代%20码%20中%20建%20立%20和%20使%20用%20别%20名%20.htm
 
把这一段放在项目文件的Application.Run前面,别忘了Use DBTables
begin
//创建数据库别名
with Sessiondo
begin
ConfigMode := cmSession;
try
AddStandardAlias('TM_Data', ExtractFilePath(ParamStr(0))+'Data', 'PARADOX');
finally
ConfigMode := cmAll;
end;
end;
end;

另外,对于SQL服务器要用AddAlias来代替AddStandardAlias
 
利用Delphi开发数据库应用程序时,通常的作法是先利用开发系统
自带的Desktop程序建立数据库别名(alias),设置好数据库所在路径,利用这种方法虽然在
开发程序时可以一次性设置,但分发程序时我们不得不手工建立或在安装程序中建立alias,
那么能不能让开发的程序自动完成这项工作,以增加程序的自适应性呢?答案是肯定的,用下
面的方法,可以使开发的应用程序自动建立别名myalias,对应的数据库路径为程序运行的目
录,下面是具体的实现方法:
将一Tdatabase组件置于主窗体;
设置其属性:
Connected False
DataBaseName Myalias
DriverName STANDARD
HandleShared False
KeepConection False
LoginPrompt False
Name DataBase1
Params Path=
Default Drive=Paradox
Enable BCD=False
SessionName Default

放置Ttable,属性设为如下值:
Active False
DataBaseName Myalias
Name Table
TableName MyTable

用一TdataSource及TDBGrid联接Table1,在窗体的OnCreate事件中作如下语句
Database1.Params.Values['path']:=ExtractFilePath(Application.ExeName);
Table1.Active:=true;
运行程序,我们会在DBGrid中看到具体数据。
以上方法在Windows 95,Delphi3环境调试通过。
 
接受答案了.
 
后退
顶部