急!!怎样为一个数据库动态创建别名?(100分)

  • 主题发起人 主题发起人 liuqin2000
  • 开始时间 开始时间
L

liuqin2000

Unregistered / Unconfirmed
GUEST, unregistred user!
已存在一个数据库,希望通过Delphi来创建一个与这个数据库对应的数据库别名,
以便能操作该数据库。
 
呵呵,又有人送分来了。
procedure tform1.create_tbl;
var tbl:ttable;
begin
tbl:=ttable.create(self); // 如没有声明中的"tform1.",Delphi不认这个self
with tbl do
begin
datebasename:=;dbdemos';
tablename:='my_tbl';
with fielddefs do
begin
clear;
add('No',ftInteger,0,false);
add('Name',ftString,0,false);
...
end;
with indexdefs do
begin
clear;
add('primary','no',[ixPrimary,ixUnique]);
...
end;
CreateTable;
end;
end;

 
如此这般:
var
MyList: TStringList;

with Session do
begin
MyList := TStringList.Create;
try
with MyList do
begin
//这里主要和你需要创建的数据库类型有关,在此以MSSQL为例
Add('Database Name=数据库名');
Add('Server Name=数据库所在服务器名');
end;
AddAlias('NewAlias', 'MSSQL', MyList);
finally
MyList.Free;
end;
end;
 
请注意,原先这个数据库虽然存在,但在ODBC中没有注册,即没有为此数据库建数据源,
不能被Delphi直接访问,也就是说控件中的DataSource不能找到该数据库。
请问这位大虾,对此有何高见?
 
tm:
请问如果是本地数据库,数据库的路径在什么参数中加,以及是否要设定数据库的类型?
 
理论上bde是直接建立连接的,不用通过odbc,所以如果在bde里建了相应别名,就可以
连接服务器了。(实际上我试过用bde连不上某些服务器,用odbc却可以)

如果是本地paradox表,可以在Table1.Databasename里直接填路径的。如果一定要建别名
可以用tm的方法。往MyList 里加的东西可以参考在BDE Administrator编辑别名属性时的
属性设置
 
在BDE Administrator中设置别名、路径、和数据库参数。也可以现在database desktop新建
table时,设置别名。在程序中,通过Tdatabase或Ttable应用。
或用tm在程序直接设置引用。
 
我看直接用session 就可以解决所有的问题。实在不行,直接调用 bed单元内的函数也是可以的。
 
用ADO直接连接数据库。
 
DAO也可以啊。
 
如何在程序中建立别名/注册数据库?
procedure TForm1.FormCreate(Sender: TObject);
var
ph : TStringList;
begin
ph := TStringList.Create;
Session.GetAliasNames(ph);
if (ph.IndexOf('nldbf') = -1) then //判断别名nldbf是否存在
begin
Session.AddStandardAlias('nldbf', ExtractFilePath(Application.ExeName), 'Paradox'); //Paradox-->数据库类型
Session.SaveConfigFile;
end;
ph.Free;
......
end;
欢迎光临<a href="http://ph11.126.com">我的家</a>

 
odbc的别名实际上是写在注册表中的。
自己写注册表就可以了。
 
如果是本地,用 TSession 对象就可以了, ODBC DSN 可以像这样添加。
http://www.delphibbs.com/delphibbs/DispQ.asp?LID=259651
 
同意www
写注册表要用到delphi封装的一个注册表类Tregret(我可能拼错了,不过我也从来没拼对过)
怎么用自己查一下帮助.
odbc的注册表项在 HKEY_LOCAL_MACHINE/Software/ODBC/odbc.ini
你先自己在odbc里面自己建一个dsn,然后看看注册表就知道怎么设置了
 
以下是我经常用到的和数据库建立连接时用的动态别名的方法,是完全可行的!
这是一个完整的示例,可以从中节选你所需部分

//注:Data_Win是一个数据窗口,放了一个database和Session
procedure TData_Win.Data_WinCreate(Sender: TObject);
var
NewAlias:TStringList;
InitFile:TIniFile;
ls_InitStr:String;
begin
//构建一个全局会话,建立数据库参数
try {except} {截获数据库错误:不能连接和打开数据库}

NewAlias:=TStringList.Create;

//引入ODBC数据源,这一部分是放在配置文件里的
InitFile:=TIniFile.Create(ExtractFilePath(Application.ExeName)+'test.ini');
gs_dbname:=InitFile.ReadString('ODBCDSN','DB_Name','test');
ls_InitStr:=InitFile.ReadString('ODBCDSN','DSN','testalias');
gs_LoginId:=InitFile.ReadString('ODBCDSN','LoginId','123');

InitFile.Free;

try {finally}
if not Session.IsAlias('test') then
begin
NewAlias.Add('USER NAME='+gs_LoginId);
NewAlias.Add('DATABASE NAME='+gs_dbname);
NewAlias.Add('ODBC DSN='+ls_InitStr);
Session1.AddAlias('test','SQL Server',NewAlias);
end;
Finally
NewAlias.Free;
end;

with Session1 do
begin
Open;
end;
with Database do
begin
//确定数据库,输入别名
AliasName:='test';
SessionName:='Session_1';
DatabaseName:= gs_dbname;
LoginPrompt:=False;
Params.Values['USERID']:=gs_LoginId; //读配置文件所得用户名
Params.Values['PASSWORD']:=gs_Pwd; //读配置文件所得密码
//连接并打开数据库
Database.Open;
end;
except
application.MessageBox('不能连接和打开数据库,请检查网络连接和配置文件是否正确!','数据库错误提示!',mb_ok);
application.Terminate;
end;
end;

procedure TData_Win.Data_WinDestroy(Sender: TObject);
begin
Database.Close;
Session1.DeleteAlias('test');
end;

procedure TData_Win.DatabaseLogin(Database: TDatabase;
LoginParams: TStrings);
begin
LoginParams.Add('USER NAME='+gs_LoginId);
LoginParams.Add('Password='+gs_Pwd);
end;
 
另外一个方法:
BDE.HLP的dbi...函数可以增加别名
 
多人接受答案了。
 
后退
顶部