如何用DELPHI程序对BDE进行配置(250分)

  • 主题发起人 主题发起人 fartrip
  • 开始时间 开始时间
F

fartrip

Unregistered / Unconfirmed
GUEST, unregistred user!
如何用DELPHI程序对BDE进行操作。
具体的来说包括以下内容
1、如何在BDE 中加入任意一个BDE 承认的数据库,
2、如何配置其属性,以达到我们的要求。
注意:不是在BDE中直接增加数据库,而是在DELPHI程序运行过程中用DELPHI程序
完成这种操作。

请各位大虾帮小弟一下小弟送上本人所有积分,共有250分
 
一个完整的设置别名函数使用于dbf,db
procedure set_Alias(db_Alias,db_path:string);
var
AParams: TStringList;
Dir: string;
begin
if not Session.IsAlias(db_Alias) then//不存在建立
begin
Session.AddStandardAlias
(db_Alias,db_path,'Paradox');
Session.SaveConfigFile; {BDE配置文件存盘}
//
end

else
begin
try
AParams := TStringList.Create;
Session.GetAliasParams(db_Alias,AParams);
Dir := Copy(AParams.Strings[0],6,255);//获得路径
if uppercase(dir)<>uppercase(db_path) then//判断是否同
begin
AParams.Clear;
AParams.Add('PATH=' +db_path );
Session.ModifyAlias(db_Alias,AParams);
Session.SaveConfigFile;
end;

finally
AParams.Free;
end;

end;

end;
procedure addAcessAlias(newalias,data,user,password:string);export//增加一个ACcess别名(其中用到odbc5.06控件)
begin
odbcform:=Todbcform.Create(application);
newalias:='dsn='+newalias;
data:='dbq='+data;
user:='uid='+user;
password:='pwd='+password;
odbcform.OEAdministrator1.Driver:='Microsoft Access Driver (*.mdb)';
odbcform.OEAdministrator1.Attributes.Clear;
odbcform.OEAdministrator1.Attributes.Add(newalias);
odbcform.OEAdministrator1.Attributes.Add(data);
odbcform.OEAdministrator1.Attributes.Add(user);
odbcform.OEAdministrator1.Attributes.Add(password);
odbcform.OEAdministrator1.Add;
odbcform.Release;
end;
 
我想知道针对于MS SQL7。0数据库的配置方法。
 
uses Registry;
function get_driver_pathname(driver_mainkey:string):string;//获得一个驱动器的路径
var
reg:TRegistry;
begin
reg:= TRegistry.Create; //建立一个Registry实例
with reg do
begin
RootKey:=HKEY_LOCAL_MACHINE;//设置根键值为HKEY_LOCAL_MACHINE
if OpenKey('SOFTWARE/ODBC/ODBCINST.INI/'+driver_mainkey,True) then
begin
result:=readstring('Driver')
end;

free;
end;

end;

function create_syodbc(allias:string;Description:string;server_name:string;database_name:string;pwd:string;dbf_type:string):boolean;//sybase
var
registerTemp : TRegistry;
bData : array[ 0..0 ] of byte;
begin
registerTemp := TRegistry.Create; //建立一个Registry实例
with registerTemp do
begin
RootKey:=HKEY_LOCAL_MACHINE;//设置根键值为HKEY_CURRENT_USER在用户区
//找到Software/ODBC/ODBC.INI/ODBC Data Sources
if OpenKey('Software/ODBC/ODBC.INI/ODBC Data Sources',True) then
begin //注册一个DSN名称
WriteString( allias, dbf_type);
end

else
begin
//创建键值失败
result:=false;
exit;
end;

CloseKey;
//找到或创建Software/ODBC/ODBC.INI/MyAccess,写入DSN配置信息
if OpenKey('Software/ODBC/ODBC.INI/'+allias,True) then
begin
WriteString( 'Description', Description );//数据源描述
WriteString( 'Driver', get_driver_pathname(dbf_type));//驱动程序DLL文件
// WriteInteger( 'DriverId', 25 );//驱动程序标识
// WriteString( 'FIL', 'Ms Access;' );//Filter依据
//WriteInteger( 'SafeTransaction', 0 );//支持的事务操作数目
//WriteString( 'UID', uid );//用户名称
WriteString( 'LogonID', pwd);//用户密码
bData[0] := 0;
WriteString('ServerName',server_name);
WriteString('Servers',server_name);
WriteString('Databases',database_name);
WriteString('Database',database_name);
end

else
//创建键值失败
begin
result:=false;
exit;
end;

CloseKey;
//找到或创建Software/ODBC/ODBC.INI/MyAccess/Engines/Jet
//写入DSN数据库引擎配置信息
result:=true;
Free;
end;

end;

function create_dbfodbc(allias:string;dbf_type:string;data_path:string):boolean;//dbf
var
registerTemp : TRegistry;
begin
registerTemp := TRegistry.Create; //建立一个Registry实例
with registerTemp do
begin
RootKey:=HKEY_CURRENT_USER;//设置根键值为HKEY_LOCAL_MACHINE
//找到Software/ODBC/ODBC.INI/ODBC Data Sources
if OpenKey('Software/ODBC/ODBC.INI/ODBC Data Sources',True) then
begin //注册一个DSN名称
WriteString( allias, dbf_type);
end

else
begin
//创建键值失败
result:=false;
exit;
end;

CloseKey;
//找到或创建Software/ODBC/ODBC.INI/MyAccess,写入DSN配置信息
if OpenKey('Software/ODBC/ODBC.INI/'+allias,True) then
begin
WriteString('DefaultDir',data_path);
WriteString('Driver', get_driver_pathname(dbf_type));//驱动程序DLL文件
writeinteger('DriverId',533);
WriteString('FIL', 'dBase 5.0');//驱动程序DLL文件
writeinteger('SafeTransactions',0);

WriteString('UID', '');//驱动程序DLL文件
end

else
//创建键值失败
begin
result:=false;
exit;
end;

CloseKey;
if OpenKey('Software/ODBC/ODBC.INI/'+allias+'/Engines/xbase',True) then
begin
WriteString( 'CollatingSequence', 'ASCII' );
WriteInteger( 'Deleted', 01 );//缓冲区大小
Writestring( 'ImplicitCommitSync', ' ');//页超时
WriteInteger( 'PageTimeout', 600 );//支持的线程数目
Writeinteger('Statistics', 0 );
Writeinteger('Threads',3);
WriteString('UserCommitSync','YES');
end

else//创建键值失败
begin
result:=false;
exit;
end;

CloseKey;
result:=true;
Free;
end;

end;
作者:阎磊 摘自《程序人生》
 
明月剑,多谢你但是这无法达到最终目的。
我希望不用BDE程序进行配置

直接通过写程序就可以配置然后给以后的程序运用。
 
你可以在DataModule中加一个TDataBase控件在你的应用和序中加入BDE.Ini
procedure Init
begin
Database.Close;
Database.Params.Clear;

if(FileExists(ExtractFilePath(Application.ExeName)+'BDE.Ini'))then
begin
Database.Params.LoadFromFile(ExtractFilePath(Application.ExeName)+'BDE.ini');
end;

if(Database.Params.Count=0)then
begin
ErrorMessage('系统初始化失败!丢失文件BDE.ini');
Halt;
end
else
begin
SetSplashMsg('连接数据库...');
try
Database.Open;
except
ErrorMessage('无法连接服务器!'+#13+
'如果等待时间比较长(>10s),则服务器名错误或服务器尚未启动,'+#13+
'如果等待时间比较短(<=10s),则数据库名、登录用户名或登录口令错误.'+#13+
'除服务器未启动外,请修改BDE.INI'
);
ShutDownSystem;
else
SystemUnLock;}
Halt;
end;
end;
在DataModule的OnCreate事件中加入此过程.
 
明月剑,多谢你但是这无法达到最终目的。
我希望不用BDE程序进行配置

直接通过写程序就可以配置然后给以后的程序运用。
 
在interface部分的引用中加上db, DbiProcs, DBiTypes, dbtables单元
procedure TForm1.BitBtn1Click(Sender: TObject);
var
ls_aliaspara: String;
saved: Bool;
begin
saved:= True;
//首先初始化
dbiinit(nil);
//下面的db_name指你所用的数据库的名称
//edit1.text中输入你的数据库所在的主机名
//如果连接到数据库需要密码,那么下面的连接字符串中还应加上password
ls_aliaspara:='TYPE: SERVER;SERVER NAME: '+edit1.text+';USER NAME: sa;'+'DATABASE NAME: db_name';
//db_alias指你要创建的数据库别名
if DbiAddAlias(nil, 'db_alias', 'MSSQL', pchar(ls_aliaspara) , saved)=DBIERR_NONE then
showmessage('数据库连接成功!')
else
showmessage('数据库连接失败');
//把对新增加的数据库连接保存到bde的配置文件中
session.SaveConfigFile;
 
接受答案了.
 
后退
顶部