安装程序在没有delphi的机器上无法启动,请问需要做什么? (200分)

  • 主题发起人 主题发起人 c88
  • 开始时间 开始时间
C

c88

Unregistered / Unconfirmed
GUEST, unregistred user!
我在公司3台机器上试装我的delphi7制作的程序,碰到如下问题:
1 没delphi环境的机器(2台,均为2000系统)无法运行我的程序,一个安装完成到一半就
结束,此时有程序图标了,可是点击后,机器运行后没有任何界面;另一台安装正常,结束
后,点击程序运行,出现如下提示:
aaa.exe发生错误,会被windows关闭,您需要重新启动程序
正在创建错误程序日志”;
2 有delphi的机器是98系统,安装,运行无问题,但发现程序用到的某些控件图标明显变大,以至超出
正常显示窗体。
前期制作的时候程序用到了Ttable,Tquery等控件,并在别人的机器上(无delphi环境)试验安装过,
可以执行,然后加入报表,又放入TClientDataSet控件,此后并使用
DBName:=ExtractFilePath(Application.ExeName)+'data';//得到数据库的位置
DM.TblCgwcr_184.DatabaseName:=DBName;DM.TblCgwcr_184.Active:=true;//query类似
以避免安装dbe。可是制作完成后就出错了。
请大家帮助,指点我,如何解决这个问题。
 
1、你用的什么程序打包?
2、只要你使用了table、query、bachmove好象就必须安装BDE,
用adotable、adoquery可以例外
3、显示大小问题改程序字体设置就可以了
 
1.我delphi7制作,安装打包使用IS Express Delphi 4.0 Beta
2.我打包了dbe后,还是有该问题存在。莫非我指定DatabaseName跟打包DBE出冲突了吗?
3.中饭后,我来试验一下
 
你的DatabaseName可以在程序中动态设定,打开database时自动查找程序路径进行修正
命名注意一下,尽量避免重名
 
我是使用下面语句来动态指定的,
DBName:=ExtractFilePath(Application.ExeName)+'data';//得到数据库的位置
打包的时候我的表的路径也设置了。
该程序很简单,应该没有重名的
 
要安装BDE的。
 
制作窗体时,必须在98底下!
 
完全安装dbe之后,还是出现
aaa.exe发生错误,会被windows关闭,您需要重新启动程序
正在创建错误程序日志;
是不是我用ClientDataSet的原因?它需要带什么别的冬冬吗?
 
在98下字体变大的话,将字符集改为GB2312就行了。
 
是不是数据源不对?
 
数据源不对的话,那应该是那台机器 都不能装啊?
可是现在可以在有Delphi的机器上装。

[:(!][:(!]……………………急……………………[:(!][:(!]
 

用InstallShield制作数据库应用系统的安装程序


  Delphi具有强大的数据库应用程序开发功能,其Client/Sever版本可以开发一般的单机数据库应用系统、普通Client/Sever应用系统直至基于Web的多层应用,其中自然离不开Borland数据库引擎(BDE)的功劳。不过在没有安装过Delphi程序的计算机上运行数据库程序时,必须同时分发庞大的BDE文件,Borland建议用户用Delphi附带的InstallShield制作安装程序来解决这些问题。但怎样选择BDE文件才能使自己的安装程序更加精炼呢?我首先介绍一下其中几个必须的文件:
  Idapi32.dll:BDE基本函数库
  Blw32.dll:语言驱动函数库
  Idr20009.dll:错误信息库
  Fareast.bll:远东语言驱动程序
  Usa.bll:美国语言驱动程序
  以下文件为根据需要可选:
  如用Paradox,则应选择:Idpdx32.dll
  如用Dbase,则应选择:Iddbas32.dll
  如用Access,则应选择:Iddao32.dll
  如用Ascii,则应选择:Idasci32.dll
  如用TBatchMove,则应选择:Idbat32.dll
  如用Data Repostitory,则应选择:Iddr32.dll
  如用ODBC,则应选择:Idodbc32.dll
  如用BDE DataSet Provider DLL,则应选择:Idprov32.dll
  如用SQL查询,则应选择:Idsql32.dll
  下面我们就以用InstallShield来制作一个Paradox数据库应用系统的安装程序为例:
  1.启动程序设置有关文件目录路径,进入Setup Checklist;
  2.在Set the Visual Design中设置程序名、程序目录、安装程序主窗口等;
  3.在Specify Components and Files中设置Groups and Files项,在Program Files中加入用户所有程序文件和数据库表文件,以及下列文件:Idbat32.dll、Usa.btl、Idapi.cfg、Charset.cvb、Bantam.dll、BLW32.dll、Idapi32.dll、Fareast.btl、Idpdx32.dll、Idr20009.dll、Idsql32.dll
(以上文件必须含目录路径);
  4.在Dialog Boxes中设置所需安装对话框;
  5.在Make Registry Changes中设置Keys项,在
HKEY_LOCAL_MACHINE中加入software/borland/blw32和software/borland/database engine两项,并且在blw32值中加入“Blapipath ‘以上文件目录’”、“LOCALE_LIB0 ‘以上文件目录’/Fareast.bll”和“LOCALE_LIB1 ‘以上文件目录’/Usa.bll”,在database engine值中加入“Dllpath ‘以上文件目录’”、“Configfile01 ‘以上文件目录’/Idapi.cfg”;
  6.在Specify Folder and Icons中根据实际要求设置有关项目;
  7.在Run Disk Builder中设置安装盘的有关信息;
  8.最后进行Test the Installation和Create Distribution Media即可完成安装程序的制作。
 
各位大富翁,你们好!我在这里也碰到了向上面那位所说的:“ aaa.exe发生错误,会被windows关闭,您需要重新启动程序
正在创建错误程序日志;”
我是用ACCESS数据库作了一个BOM清单;我将ACCESS数据库放到了我们公司服务器。我用我机器生成的EXE程序可以进行访问和有关操作。但将程序拷贝至别人机器上就提示我上述问题。是不是我没打成包导致~里面只用到了ADOQUERY,ADODATESET,ADOCONNECTION,用JET4.0 OLE DB PROVIDER 驱动,要是没有打包,我该用什么进行打包。真的很感谢你能看到最后!
 
一个不太注意的可能:
就是:您的Database控件还开着呢,请关闭连接后再编译。
并且确保路径、DBName 都正确后再使用数据库。
 
发布BDE,我的笨方法(以Delphi5X为例)
自定义发布BDE
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
001::如何避免使用数据库别名
将数据库和程序摆在同一目录下,在DELPHI6里是自动识别的
在DELPHI5X里,只要将TABLE1.tableName输入一个表名即可。
直接输入路径+表名好象也行。
数据库别名就是给程序提供一个查找路径,在该路径下有tableName指定的表,
它保存在一个叫“IDAPI.CFG”的文件里,这个文件的具体路径可以运行控制面板
里BDE Administrator程序,看一下它的标题,它的标题就是“IDAPI.CFG”文件的路径。
要修改该路径很容易的,修改注册表即可。
进入注册表:开始/运行/REGEDIT/确定
定位到:HKEY_LOCAL_MACHINE/SOFTWARE/Borland/Database Engine
在右边的窗口里有一个键值为“CONFIGFILE01”,
……
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
002::如何在程序中动态的生成数据库别名
首先要在窗体上添加一个TSession组件
并保证注册表的“HKEY_LOCAL_MACHINE/SOFTWARE/Borland/Database Engine/CONFIGFILE01”
的键值指向“IDAPI.CFG”文件。
1. 检 测 别 名
通 过 调 用Session1.GetAliasNames(list:Tstrings) 方 法,
可 将 当 前BDE 配 置 中 的 所 有 数 据 库 别 名 的 名 称
存 放 到List 字 符 串 列 表 中。 list.IndexOf(' 需 要 检 测 的 别 名')
的 值 会 告 诉 我 们 这 个 别 名 是 否 存 在 ( 其 值 为-1 时 不 存 在)。
2. 增 加 一 个 新 的 别 名
Session 组 件 的 过 程AddStandardAlias(const Name, Path, DefaultDriver: string),
可 以 增 加 一 个 标 准 类 型 的 数 据 库 别 名。 例 如 增 加 一 个
名为test, 缺 省 数 据 库 驱 动 程 序 为 PARADOX,存 放 路 径 为c:/delphi 的 别 名
Session1.AddStandardAlias('test','c:/delphi','Paradox');
3.BDE 配 置 文 件 存 盘(保存到“IDAPI.CFG”)
Session1.SaveConfigFile;
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
003::如何确定你的程序需要哪些BDE文件的方法
首先要构造没有安装DELPHI的环境,不是将DELPHI卸了,
而是关闭DELPHI32.exe,将C:/……/Borland Shared/下的“BDE”文件夹改名为“BDE123”即可。
运行看看,是不是你的数据库程序已无法运行了,别着急啊。
接着,你必须在C:/……/Borland Shared/下新建一个文件夹,名为BDE,
将BDE123里的“IDAPI.CFG”拷贝到BDE下,其他文件不管。
再将BDE123里的所以文件拷贝到你数据库程序之下,
运行看看,你的数据库程序又正常运行了吧!
以下是关键的地方:
关闭你的数据库程序,删除一部分DLL文件,或其他文件
打开你的数据库程序,如果一切正常,那删掉的就是没有用的DLL文件啊。
如果不正常的话,那就是不能删除掉,赶快恢复过来吧!!
依次类推,直到删除哪一个都不行为止,那就达到最简化状态了。
环境恢复,将BDE123改为BDE
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
004::如何让你的数据库程序和所需的DLL文件关联。
不用修改注册表,只要把需要选择的文件和你的程序放在同一目录下也可以的
但是,在注册表中指定也不是个坏注意,在发现注册表中没有相应键值时写入
需要设置的注册表键值有:

数据驱动程序所在目录的设置:
HKEY_LOCAL_MACHINE/Software/Borland/Database Engine/DLLPATH(字符串值)
语言驱动程序所在目录的设置:
HKEY_LOCAL_MACHINE/Software /Borland/BLW32/BLAPIPATH(字符串值)
语言驱动程序文件名:HKEY_LOCAL_MACHINE/ Software/Borland/BLW32/LOCALE_LIB#(字符串值)
 其中#为编号,按顺序为0、1、2、3......如:
 HKEY_LOCAL_MACHINE/Software/Borland/BLW32/LOCALE_LIB0="fareasst.bll"
 HKEY_LOCAL_MACHINE/Software/Borland /BLW32/LOCALE_LIB1="usa.bll"
数据库别名保存文件所在目录设置
HKEY_LOCAL_MACHINE/SOFTWARE/Borland/Database Engine/CONFIGFILE01(字符串值)
就这些了,按此办法即可有效减少BDE驱动程序的大小,
这些文件可放在任何一个目录,只要在注册表指明即可。
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
我推荐用最简单的方法:
避免使用数据库别名,把所需的BDE文件和你程序放在同一目录下,也不要修改注册表,就什么都OK了。
或者干脆用ADO吧。
procedure TForm1.FormCreate(Sender: TObject);
var
a,b,c:String;
const
ConnStr = 'Provider=%s;Data Provider=%s;Data Source=%s';
begin
a:='MSDataShape.1';
b:='Microsoft.Jet.OLEDB.4.0';
c:='jsjaccdb.mdb';
if not ADOConnection1.Connected then
ADOConnection1.ConnectionString :=Format(ConnStr,[a,b,c]);
ADOTable1.Open;
end;
可以直接将和程序在同一目录下的'jsjaccdb.mdb'打开,
需要指定ADOConnection1.LoginPrompt为false;
需要指定ADOTable1.Connection,ADOTable1.TableName。
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
作者:wqhatnet/E-mail:wqhnet@hotmail.com//2004/01/12
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
 
后退
顶部