怎样配置ADOConnection组件ConnectionString属性的DataSource参数,才能使打包发布时安装到任何目录数据库都能被找到?(30分)

  • 主题发起人 grayhare
  • 开始时间
G

grayhare

Unregistered / Unconfirmed
GUEST, unregistred user!
如题,谢谢!
 
考虑一下把DataSource参数放到注册表或ini文件.
 
具体怎么做?(说的具体些,我找了几本书,都没有提到过这些东西)谢谢!
我现在已经为这个问题焦头烂耳了
 
ADOConnection打开之前先找到当前目录。
再组成连接字符串就可以在任何目录下运行了。
 
比如连接当前程序目录下的"Send"子目录中的"Send.
mdb"数据库
var path:string
begin
path:=ExtractFilePath ( ParamStr(0))+'Send/send.
mdb';
self.ADOConnection1.ConnectionString:='Provider=Microsoft.Jet.OLEDB.4.0;Data Source='
+path+';Persist Security Info=False';
self.ADOConnection1.open;
.....
 
你说的是文件型数据库吧
在你的ADOConnection打开的情况下 Ctrl+C Copy下来它的ConnectionString到记事本中看看,
找到你的数据库文件名的那段文字,把ConnectionString切为三段,
在ADOConnection.BeforConnected 中写如下:
if not(FileExist(ExtractFilePath.....)) then
// 如果数据库不在当前目录下
打开一对话框让用户选择数据文件路径
ADOConnection.ConnectionString
:='Provider.....' // 第一部分
+你的数据库路径和文件名 // 第二部分自已替换
+';Persist Security Info=False' // 第三部分
如果不选文件或打开 ADOConnection 错误,则退出程序
 
和 kmwh 的类似
“比如连接当前程序目录下的"Send"子目录中的"Send.
mdb"数据库
var path:string
begin
ADOConnection1.Connected := false;
path:=ExtractFilePath ( ParamStr(0))+'Send/send.
mdb';
ADOConnection1.ConnectionString:='Provider=Microsoft.Jet.OLEDB.4.0;Data Source='
+path+';Persist Security Info=False';
ADOConnection1.Connected := true;
 
ini or registry
 
to kmwh and 萧月禾
你们说的这段东西是要写在哪的?是ADOConnection1的哪个属性?
thanks
 
可以在数据模块建立时,读.ini文件,像上面大家说的那样,如果找不到ini中指定的数据库,
就自动调用EditConnectionString配置ADOConnection,然后把得到的ADOConnection的ConnectionString
保存到.Ini文件中,这样以后不就可以不用再配置了吗
 
拜托说得详细点啊,我都快疯了,我想过用
ExtractFileDir(paramstr(0))+'/data.mdb'
但不知道该往哪里写,那个DataSource参数根本就不认这串东西
 
uese IniFiles;
var
MyIniFile: TIniFile;
begin
MyIniFile := TIniFile.Create('myapp.ini');
//如果光写文名,就在Windows目录下
MyIniFile.WriteString('System', 'FormHeight',INTTOSTR(FORM1.Height));
MyIniFile.WriteString('System', 'FormWidth',INTTOSTR(FORM1.Width));
MyIniFile.Free;
end;

以上是写的方法!
----------------------------------------------------
var
MyIniFile: TIniFile;
begin
MyIniFile := TIniFile.Create('myapp.ini');
//如果光写文名,就在Windows目录下
FORM1.Height:=MyIniFile.ReadInteger('System', 'FormHeight',304);
FORM1.Width:=MyIniFile.ReadInteger('System', 'FormWidth',513);
MyIniFile.Free;
end;

以上的读的方法
---------------------------------------------------
写注册表和上面差不多!
Delphi帮助里学的...
如果有更好的方法,望请教;
 
有人能回答一下我这个问题吗?
对于 kmwh and 萧月禾 给的代码,应该是要写在哪的?是ADOConnection1的哪个属性?
谢谢!
 
可以写在你的数据模块的Create事件里.
上次写的不够清楚么?
那重新注释一下吧,
比如连接当前程序目录下的"Send"子目录中的"Send.
mdb"数据库
var path:string
begin
//先关闭数据连接
ADOConnection1.Connected := false;
//得到目标数据库的完整路径+文件名
path:=ExtractFilePath ( ParamStr(0))+'Send/send.
mdb';
//设置ADO连接字符.把path中的内容填写在其中.这是针对Access库的,其他数据库的
//连接字符和这个不大一样
ADOConnection1.ConnectionString:='Provider=Microsoft.Jet.OLEDB.4.0;Data Source='
+path+';Persist Security Info=False';
//打开数据连接
ADOConnection1.Connected := true;
 
嗯,谢谢了,其实代码的意思我都理解,只是不知道这些代码该往哪个事件里写
能给我讲讲关于数据模块的Create事件吗?我手头上的书更本都没提到过这些东西
有哪些这方面比较好的参考书籍?顺便推荐一下
 
噢,这个问题的答案我已经清楚了,那个create事件是form的,谢谢各位啦
 
多人接受答案了。
 
顶部