1.如何动态设置BDE别名
这个问题其实是考察程序员对BDE的TSession组件的熟悉程度,一个数据库程序的建立,即使你没有显式的添加TSession组件,系统中依然存在一个名字为Session的TSession对象,你可以在任何位置调用该对象的方法和属性。TSession类的很多方法可以帮助我们的应用程序获取系统BDE环境,下面介绍一个代码片断用以添加一个BDE别名:
示例:新建应用程序,添加bde/Tsession组件和按钮button1
procedure TForm1.Button1Click(Sender: TObject);
var
BDEList:TStringList ;
begin
BDEList := TStringList.Create () ;
try
Session.GetAliasNames(BDElist) ; // 获取系统所有BDE别名列表
if BDEList.IndexOf('DragonPC')= -1 then
begin // 如果没有我们的BDE别名"DragonPC"
BDEList.Clear ;
BDEList.Add('SERVER NAME=' + 'SQLServerName'); // 数据库服务器名称
BDEList.Add('DATABASE NAME=master') ; // 默认数据库
BDEList.Add('USER NAME=sa'); // 用户名
Session.AddAlias('DragonPC', 'MSSQL', BDEList) ; // 添加一个MSSQL类型的BDE别名
ShowMessage('系统即将建立BDE别名!') ;
Session.SaveConfigFile() ; // 存储BDE配置
end;
finally
BDEList.Free ;
end;
end;
2.如何动态设置ODBC源
很多时候程序员需要自动生成ODBC数据源,而不是指导客户"打开控制面板… … ",到底如何去做呢?
SQLConfigDataSource这个函数MSDN有详细的说明,我不想整段翻译下来让你扁我,我只是结合流行的SQL Server谈谈如何有技巧的调用该函数。其它的数据库大同小异。
SQLConfigDataSource(0, ODBC_ADD_SYS_DSN,''SQL Server'',
''DSN=Record_ODBC''+ chr(0) +
''Server=(local)''+ chr(0) +
''Database=master''+ chr(0) +
''Description=DragonPC SQLServer ODBC Source''+ chr(0));
这是我的Delphi程序中调用该函数的一个实例,第一个参数是父窗口句柄,设置为0则该函数不显示任何对话框。第二个参数是操作类型,你需要定义如下的操作类型常量:
Const
ODBC_ADD_DSN = 1; // Add a new user data source.
ODBC_CONFIG_DSN = 2; // Configure (modify) an existing user data source.
ODBC_REMOVE_DSN = 3; // Remove an existing user data source.
ODBC_ADD_SYS_DSN = 4; // Add a new system data source.
ODBC_CONFIG_SYS_DSN = 5; // Modify an existing system data source.
ODBC_REMOVE_SYS_DSN = 6; // Remove an existing system data source.
程序示例:新建一个delphi 应用程序,添加一个按钮button2,代码如下:
//定义常量
Const
ODBC_ADD_DSN = 1; // Add a new user data source.
ODBC_CONFIG_DSN = 2; // Configure (modify) an existing user data source.
ODBC_REMOVE_DSN = 3; // Remove an existing user data source.
ODBC_ADD_SYS_DSN = 4; // Add a new system data source.
ODBC_CONFIG_SYS_DSN = 5; // Modify an existing system data source.
ODBC_REMOVE_SYS_DSN = 6; // Remove an existing system data source.
//自定义函数
function SQLConfigDataSource(hwndParent: Integer; fRequest: Integer;lpszDriverString: String; lpszAttributes: String): Integer;stdcall;external 'ODBCCP32.DLL';
//调用函数
procedure TForm1.Button2Click(Sender: TObject);
begin
SQLConfigDataSource(0, ODBC_ADD_SYS_DSN,'SQL Server','DSN=Record_ODBC'+ chr(0) +'Server=(local)'+ chr(0) +'Database=pubs'+ chr(0) +'Description=DragonPC SQLServer ODBC Source'+ chr(0));
end;