数据库程序移植问题(100分)

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

huangke

Unregistered / Unconfirmed
GUEST, unregistred user!
各位大虾:
我是一名delphi初学者,在数据库程序设计中遇到一个问题。
数据库程序中,设置了别名,别名代表了一个绝对路径如:
d:/hk/data 但制作成安装程序后,并不知道用户安装在哪一个路径下。
如:生成一个数据库程序,别名设置成d:/library, 应用程序缺省也
安装在d:/library,但用户一旦改变路径,如 e:/library ,程序的别名
就失效了,程序就无法运行。
能不能在程序安装时或,在程序首次运行之先,就固定一个目录,将
库表源文件copy过去,或者还有其他解决的办法,还请赐教。
 
如果你用的是paradox库,可以不用设置别名,直接把ttalbe的databasename设成
paradox库所在的路径就可以了。
如果用别的库,你必须要动态设置别名了。
 
parodox dbase 都可以有路径来代替别名.
直接把ttalbe的databasename设成.paradox库所在的路径就可以了。如果是其他得数剧库
可用 copyfile() 把你得数剧库靠到特定位置.
copyfile('文件现在位置','被拷贝的位置'.true);
 
如果是paradox ,不要指定 tdatabase的 数据库路径
而是在 form 的 oncreat事件中,取得当前程序
的运行路径,然后生成数据库路径,
这样就不会有问题
 
不用自己设别名,在DatabaseName中选相应驱动程序,
如:dBASE Files,Visual FoxPro Tables等,然后
在TableName中加上路径,如:/Your Dir/DBName.dbf。
 
你可以用在确省的路径中找对应的数据库,如果找不到
那就出一个fileOpen窗口让用户指定该库所在的路径
 
如何获得BDE中某个数据库(Paradox)别名的路径?
uses DB, DBTables, DBConsts,bde,.... ;
function GetAliasPath(const sAliasName: string): string;
var
szName: array[0..100] of char; Desc: DBDesc; wResult: DBIResult; begin
Result := ''; StrPLCopy(szName, sAliasName, High(szName));
wResult := DbiGetDatabaseDesc(szName, @Desc);
if wResult = DBIERR_NONE then
Result := StrPas(Desc.szPhyName);
end;
还可以这样
var
list:tstringlist;
begin
try
tsession。getaliasname(list);
finally
list。free;
end;
end;
这样可获得全部的别名列表。也就知道了。
 
1 可以使用一个文件对话框
2 可以动态地跟踪路径(安装文件时记录路径)
3 可以使用WINDOWS的查找功能(数据库的文件名是固定的)
 
你可以在制作安装盘时设置数据路径及数据库别名.然后把数据库填加到指定路径即可.
installshield express中所涉及的项目为
1、select insallshield objects for delphi
2、specify components and files
3、specify folders and icons
 
你可以把数据库放到应用程序的子目录,如/DATA
在Installshield中设别名路径为<INSTALLDIR>/DATA即可.
这样无论安装到哪里都可.

或干脆不要数据库别名直接在程序里定义如:
Table1.DatabaseName:=ExtRactFilePath(Application.ExeName)+'data';

 
上面:
"在Installshield中设别名路径为/DATA即可."
应为
"在Installshield中设别名路径为<INSTALLDIR>/DATA即可."

 
我的第一段转摘hubdog自特此声明
 
在installshield 中……
意见于RSS相同
 
如果是MS的库,可以用ado直接在connectstring中指明,用
参照应用程序路径给出数据库的路径。
 
接受答案了.
 
后退
顶部