<font color=Red>Delphi通过BDE访问Access97以及制作安装程序--全攻略</font>(0分)

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

Fuweng

Unregistered / Unconfirmed
GUEST, unregistred user!
"全攻略"只是随便一说,小弟水平有限,不可能做到真正的全攻略,或许还有些错误
的地方,还请各位大侠,高手多多指教.


一. 通过BDE访问Access97

1. 打开BDE Administator, Configuration -&gt; Drivers -&gt; Native -&gt;
MSACCESS ,将DLL32改为IDDA3532.DLL.
2. 新建一工程,在Form1上放置TTable,TDataSource,TDatabase,TDbGrid控件
各一个.
3. 在Form1的OnCreate事件中放入如下代码(C++Builder程序,Delphi大同小异),
void __fastcall TForm1::FormCreate(TObject *Sender)
{
AnsiString DATABASE_NAME = "DATABASE NAME="+GetCurrentDir()+"//DATA//DELPHIBBS.MDB";
DataSource1-&gt;DataSet = Table1;
DBGrid1-&gt;DataSource = DataSource1;
Database1-&gt;DriverName = "MSACCESS";
Database1-&gt;Params-&gt;Clear();
Database1-&gt;Params-&gt;Add(DATABASE_NAME);
Database1-&gt;Params-&gt;Add("USER NAME=");
Database1-&gt;Params-&gt;Add("OPEN MODE=READ/WRITE");
Database1-&gt;Params-&gt;Add("LANGDRIVER=");
Database1-&gt;Params-&gt;Add("SYSTEM DATABASE=");
Database1-&gt;Params-&gt;Add("PASSWORD=");
Database1-&gt;LoginPrompt = false;
Database1-&gt;DatabaseName = "Fuweng";
Table1-&gt;DatabaseName = "Fuweng";
Table1-&gt;TableName = "letters";
Table1-&gt;Active = true;
}
/*
多方便!多省事!
有了上面的代码,程序一启动,letters表就被打开了,几乎是"全自动"!
当然,朋友们还可根据实际情况做进一步的完善,比如:加入异常保护...

访问Access97数据库的方法有很多,但我还是比较喜欢通过代码来实现,
因为这样最灵活,且排除了在程序外边手工设置别名带来的诸多麻烦,同
时也为将来制作安装程序极大得减轻了负担.
*/


二. 为上面的程序制作安装程序

首先,我想阐明自己的一些观点:
[1]. 安装程序要做得尽可能精练,最小化.多余的文件一个都不要.
[2]. 安装时要尽量不伤到用户系统中已有的软件,设置.
[3]. 反安装时尽量要卸的干净,不能伤及别的软件.
上面我多次说要"尽量","尽可能",就是说并不绝对.试想你能让IE4和IE5共存于
同一台机器中吗?不可能!!同样,Delphi3,4,5也很难共存...
在硬盘容量巨增的今天,有时浪费一点没什么,换来的是系统的清洁,不混乱...
因此我强烈建议:能放在当前目录下的文件就不放在别处("当前目录"指可执行文
件所在的目录;"别处"指C:/Windows,C:/Windows/system....)!

具体安装说明: (以C++Builder5为例,Delphi5应该是一模一样,其它版本有少许不
同,但绝大多数一样)

1. C++Builder5绝对必需的文件
BORLNDMM.DLL CC3250MT.DLL VCL50.BPL

2. BDE绝对必需的文件 (对于中文软件来说)
IDAPI32.DLL BLW32.DLL IDR20009.DLL FAREAST.BTL CHARSET.CVB
VCLBDE50.BPL VCLDB50.BPL BANTAM.DLL (USA.BTL似乎可有可无)

3. ACCESS97 (用BDE连接)
IDDA3532.DLL EUROPE.BTL ODBC32.dll ODBCINT.dll
[注册表] (就是说要注册下面的两个地方,跟你机器上的一样就可以)
HKEY_LOCAL_MACHINE/Software/Borland/Database Engine/Settings/DRIVERS/MSACCESS
HKEY_LOCAL_MACHINE/Software/Borland/Database Engine/Settings/SYSTEM

以上文件均放在安装目录下.

4. 另人极其讨厌的DAO安装问题
DAO是专门为Access数据库服务的,又由于Office套件和Windows 9X,NT是一家的,
它们之间总有着千丝万屡的关系,所以针对于DAO的文件,特别是注册表中的设置更
是多得要命!要想将其研究明白真不是容易的事,我曾经在干净的Windows95下用
regsnap软件跟踪过DAO的安装,结果发现在注册表中新增和改动的地方多得吓人!
我想硬要将其搞明白,意义就不大了!

所以,用DAO的独立安装包是目前的上策,有的朋友说另做一个程序让用户选择
是否安装DAO,我看也不错.

DAO35.EXE和DAO36.EXE在此处下载:http://www.finalfiler.com/
(3.071KB) (4.444KB)

按照上述4点就可以制作安装程序了,至于用什么工具,随便!
首先,BDE的安装可以说是很精练了;其次,由于大部分文件都安装在"安装目录"下,
所以反安装时可以全部删掉,不用担心是否与别的程序共享某些文件;再有,不必设
置讨厌的别名,什么IDAPI.CFG一概不用管,全在程序里.

大致就这么多(上述方法在干净的Win95,Win98,WinNT4下通过),如果哪位朋友有更
好的方法,请说出来与大家共享!!
 
我就是要这样的全功略!
有后续的吗?
比如之一呀之二啦之三啦等等……
 
&lt;h2&gt;我这儿也有一篇安装制作文章:&lt;/h2&gt;



安装程序制作:(支持Paradox数据库TTable TQuery组件)

希望对你有所帮助---我搞了2天才搞定!!!!

1.制作环境:
Delphi 5.0
Install Shield for Delphi 5.0
BDE ver 5.01
Window 2000 (制作好后,在Win98下安装运行都正确)

2.制作步骤:
1〉找出所有需要的文件:&lt; 安装到&lt;INSTALLDIR&gt;路径下 &gt;
IDR20009.DLL
BANTAM.DLL
CHARSET.CVB
FAREAST.BTL
IDAPI32.DLL
IDBAT32.DLL
IDPDX32.DLL
IDSQL32.DLL

2&gt;修改注册表:

路径:HKEY_LOCAL_MACHINE/Software/Borland/Database Engine 值名: DLLPATH 值:&lt;INSTALLDIR&gt;
路径:HKEY_LOCAL_MACHINE/Software /Borland/BLW32 值名: BLAPIPATH 值:&lt;INSTALLDIR&gt;


3&gt;别名的建立:

在程序中建立:程序一个例子如下:
procedure TFrmTM.AutoCreateAlias;
const
DBType='Type=STANDARD';
DBDefaultDriver='DEFAULT DRIVER=PARADOX';
DBBCD='ENABLED BCD=FALSE';
DBPATH='PATH=';
DataDir='Data';
AliasName='TM';
var
MyList: TStringList;
DataPath:string;
begin
if test.IsAlias(AliasName) then begin
Exit;//如果别名存在则不建立否则建立TM别名。
end;
MyList := TStringList.Create;
DataPath:=RectifyPath(GetCurrentDir)+DataDir;
try
with MyList do begin
Add(DBType);
Add(DBDefaultDriver);
Add(DBBCD);
Add(DBPath+DataPath);
end;
test.AddAlias(AliasName, Driver, MyList);
finally
MyList.Free;
end;
end;

4&gt;其他步骤按照不详细介绍:(参考delphi书籍)

3 疑问:

为什么我按照王先生的文中所讲的去做,死活生不成别名,到后来还发现他提供的有一些多余的文件
并且需要的一些文件没有提供?奇怪?版本不同还是制作环境不同所致?



 
王先生的文章:

深圳
王发军
[请作者提供详细的邮政地址]
---- Delphi程序员都知道,在数据库应用程序开发完成后,要发布程序需要同时发布BDE(Borland Database Engine),否则会引起错误“A Error occurred while attempingto initilize Borland Database Engine(Error $2109)”。当觉得程序太大而辛辛苦苦精简自己的程序到满意时,却发现BDE管理程序器需要9M之巨,不由感到沮丧,真有点自己的努力被糟蹋的感觉。不过也不必太沮丧,只要肯尝试,还是有办法来精简BDE的。

---- 首先来看看BDE目录中的文件,所有文件确实有近9M大吧。不过有些可能是用不到的,关键文件的作用可参见Bde32.HLP中“Introduction to Borland Database Engine”下的“Core BDE Files”,其中列出了BDE的关键文件及其作用,可以以此作为依据来尝试精简BDE驱动程序。下面是各个文件的作用:

---- 一、不可缺少的文件

---- Blw32.dll:语言驱动函数库。

---- Idapi32.dll:BDE基本函数库。

---- Fareast.bll、Usa.bll:远东语言及美国语言驱动程序,对中文软件不可缺少。

---- Idr20009.dll:错误信息库。

---- 二、数据库驱动程序(根据需要选择一个或多个)

---- Idasci32.dll:Ascii文本数据库驱动程序函数库,如果不用Ascii文本数据库,可以不要。

---- Iddao32.dll:Access数据库驱动程序函数库,如果不用Access数据库,可以不要。

---- Iddbas32.dll:dBase数据库驱动程序函数库,如果不用dBase数据库,可以不要。

---- Idodbc32.dll:ODBC数据库驱动程序函数库,如果不用ODBC数据库,可以不要。

---- Idpdx32.dll:Paradox数据库驱动程序函数库,如果不用Paradox数据库,可以不要。

---- 三、其它驱动程序和配置文件(根据需要选择一个或多个)

---- Idbat32.dll:批操作驱动程序函数库,如果不用TBatchMove控件或DbiBatchMove类函数,可以不要。

---- Iddr32.dll:Data Repository驱动程序函数库,如果不用Data Repository功能,可以不要。

---- Idprov32.dll:BDE DataSet provide驱动程序函数库,如果不用TProvider控件,可以不要。

---- Idqbe32.dll:QBE驱动程序函数库,如果不用Query By Example,可以不要。

---- Idsql32.dll:SQL查询驱动程序函数库,如果不用TQuery进行查询,可以不要。

---- Idapi32.cfg:BDE配置文件,如果程序中没有特殊要求,可以不要。也可以在BDE管理器中设置正确后再分发。

---- 四、其它文件(一般不用)

---- BDE32.HLP、BDE32.CNT:BDE帮助文件,可以不要。

---- BdeAdmin.exe、BdeAdmin.HLP、BdeAdmin.CNT:BDE管理器及帮助文件,如果不会发生要求软件用户自己配置BDE的情况时,可以不要。

---- 其它*.BLL:其它国家和地区的语言驱动程序,可以不要。

---- DataBump.EXE、DataBump.HLP、DataBump.CNT:数据库数据转移工具及帮助文件,可以不要。

---- Localsql.HLP、Localsql.CNT:SQL查询语句帮助文件,可以不要。

---- Sqllnk32.HLP、Sqllnk32.CNT:SQL连接帮助文件,可以不要。

---- 在根据需要选择文件后,还要写注册表文件。这个应该不成问题,可以手工设置,但最好在程序中设置,在发现注册表中没有相应键值时写入,用TRegFile对象用不了几行代码的。需要设置的注册表键值有(在调用数据库操作前需要有正确的键值存在):

---- 数据驱动程序所在目录的设置:

---- 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"

---- 就这些了,按此办法即可有效减少BDE驱动程序的大小,例如只用TTable控件操作Paradox数据库,则只要Idapi32.dll、Blw32.dll、Idr20009.dll、Fareast.bll、Usa.bll、Idpdx32.dll六个文件即可。

---- 这些文件可放在任何一个目录,只要在注册表指明即可。OK,BDE由9M多减到不到2M,ZIP一下就700多K了,比原来的应用系统减少了不少吧。

---- 以上程序在PWIN98+DELPHI3.0下调试通过.



 
to lodgue:
王发军的这篇文章我早已读过,有没有他的E_Mail.
 
to lodgue:
王发军的这篇文章我早已读过,有没有他的E_Mail.
 
我笨,我笨:
按照fuweng的程序,老是出现错误的databaseName:fuweng,
请问怎么设置。
 
bde如何访问access2000?
 
BDE暂时还无法访问Access2000
 
好极了!还有吗?再来点。
 
有源代码吗?
请给我一份,谢谢! zw333@371.net
 
好极了,好文章
 
fuweng,你好,我的攻略中我想有一个问题:在一.3中有一句:table1-&gt;databasename="fuweng";
这里我在delphi中试了,不行,delphi中,这里只能输入数据库的别名,这样一来,就又用到了别名,还要设置
别名?本意就变了,是不是?我太笨,还请您多多帮忙!还有dao的问题,如果用户的access
不知是97还是2000,如何安装dao35 还是dao36?
请各位大侠帮帮我,!
 
&gt;&gt;这里我在delphi中试了,不行,delphi中,这里只能输入数据库的别名,这样一来,就又用到了别名

怎么可能呢? 那一定是你的TDatabase控件没设好!! Fuweng的用法没错!!!
 
&gt; 1. C++Builder5绝对必需的文件
&gt; BORLNDMM.DLL CC3250MT.DLL VCL50.BPL
这三个一个也不要!!!
 
to huzb:
如果那三个文件一个都不要,需要将Project--&gt;Options--&gt;Linker中的
Use dynamic RTL 和 Project--&gt;Options--&gt;Packages--&gt;Builde with runtime
Packages 这两项都去掉,这样一来编译的可执行文件大了不少,相当于把
BORLNDMM.DLL CC3250MT.DLL VCL50.BPL这三个文件做到可执行文件中去了.
运行时内存中的情形一样.
 
to All:
BORLNDMM.DLL CC3250MT.DLL VCL50.BPL 这三个文件是C++Builder和其做出的程序
绝对不可缺少的文件!!! 绝对不可缺少 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
 
后退
顶部