取得安装目录?(50分)

  • 主题发起人 主题发起人 hbhhjjyy
  • 开始时间 开始时间
H

hbhhjjyy

Unregistered / Unconfirmed
GUEST, unregistred user!
我动态设置了ODBC,请问我如何设置DBQ,也就是数据库的路径会随安装路径而改变,并反映在程序里.
各们大哥,帮帮忙.
 
你在写安装程序的时候把安装路径写入注册表中或是INI文件中,在由程序读出不就可以了
 
对了兄弟我也有这样的问题,假设我的数据数据库文件是"aa.mdb"放置的路径是"C:/Program Files/ai/data/aa.mdb",,,,,,
设置的数据库别名是"bb",
我怎么才能让程序自动找到数据库而连接上去呢,也就是说不要手动去配置ODBC ...
 
用ADO这样可以不用ODBC
 
对,ADO,就是比较慢!
 
我是用的,ADOtable1,和ADOconnect>.........
但是,不知道怎么去设置拉......我程序打包以后,在别的机器上面安装,,,,安装以后.如果
不到ODBC里面去设置那什么数据源的话,,,,它就提示数据库错误拉。
哎,,,我做那什么鬼程序员日子还不多,经常碰到鬼问题,搞死人达......

谢谢回答..老兄。
 
ADO不会比ODBC慢
 
procedure TForm1.Button1Click(Sender: TObject);
var
filename:string;
begin
filename:=ParamStr(0);
showmessage(filename+#13+#13+ExtractFilePath(filename)+#13+#13+ExtractFiledir(filename));
end;
 
unit untDBModule;

interface

uses
SysUtils, Classes, DB, ADODB,Registry,IniFiles;

type
TDataModule1 = class(TDataModule)
conMain: TADOConnection;
procedure DataModuleCreate(Sender: TObject);
procedure DataModuleDestroy(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
DataModule1: TDataModule1;
RPIniFile: TIniFile;
implementation

uses untInfo, untSetup;

{$R *.dfm}

procedure TDataModule1.DataModuleCreate(Sender: TObject);
var
strSerName: string;
strDBName:string;
strUser:string;
strPassWord:string;
rs,conn:Variant;
strSQL:String;
strConn:String;
strUserName:string;
strMd5:string;
begin
RPIniFile := TInifile.Create('RPClient.ini');
strSerName := RPIniFile.ReadString('AppCofig', 'Server Name', strSerName); //读取连接字符串
strDBName := RPIniFile.ReadString('AppCofig', 'DB Name', strDBName); //读取连接字符串
strUser := RPIniFile.ReadString('AppCofig', 'User', strUser); //读取连接字符串
strPassWord := RPIniFile.ReadString('AppCofig', 'PassWord', strPassWord); //读取连接字符串
if strSerName='' then
begin
with TfrmSetup.Create(Self) do
begin
ShowModal;
end;
end
else
begin


strConn:='Provider=SQLOLEDB.1;Password=ruipu99999;Persist Security Info=True;User ID=sa;Initial Catalog=RP2002;Data Source=Server';
strConn:='Provider=SQLOLEDB.1;server='+ strSerName +';uid='+strUser+';pwd='+strpassword+';database='+strDBName+'';
conMain.ConnectionString:=strConn;
try

conMain.Connected:=true;

except
with TfrmInfo.Create(Self) do
begin
labinfo.Caption:='数据库连接错误!';
ShowModal;
end;
with TfrmSetup.Create(Self) do
begin
ShowModal;
end;
end;
end;
end;
 
动态配置路径:
procedure TDataModule1.DataModuleCreate(Sender: TObject);
var cdir:string ;
begin
cdir:=GetCurrenDir;
ADOConnectionUser.ConnectionString:='Provider=Microsoft.Jet.OLEDB.4.0;Data Source='+cdir+'YourDatabaseName;Persist Security Info=false';
end;
Function GetCurrenDir:string;
var strCurrentDirectory1:string;
begin
SetLength(strCurrentDirectory1,144);
If GetCurrentDirectory(144,PChar(strCurrentDirectory1))<>0 then
SetLength(strCurrentDirectory1,StrLen(PChar(strCurrentDirectory1)))
Else
RaiseLastWin32Error;
result:=strCurrentDirectory1;
end;

 
ADO肯定比ODBC慢,你看这里:
http://www.delphibbs.com/delphibbs/dispq.asp?lid=583365

BDE是对ODBC的封装,BDE比ADO快多了,我以前从不用ADO,最近因为工作需要才用,并把
一个BDE的程序改成ADO的,结果,慢n倍,就上面那个链接中我说的那个程序,我数了一下,
一个节点才20个属性(即20条记录),也就是说,显示一个节点的全部属性要做20次循环,
每次一条记录,结果要将近1秒钟,而BDE则不到0.1秒,几乎是点上去,右边的数据就列出
来了,程序写法和数据环境完全一样,仅仅是把BDE组件改成了ADO组件,的确如此。

唉,考虑到这些属性最多要达到60个,现在只好加上进度条了,虽然这样程序会更慢,但起码
让用户知道程序还在一刻不停地工作。
 
接受答案了.
 

Similar threads

D
回复
0
查看
889
DelphiTeacher的专栏
D
D
回复
0
查看
857
DelphiTeacher的专栏
D
D
回复
0
查看
808
DelphiTeacher的专栏
D
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
后退
顶部