关于报表:
你把报表文件打包进安装程序了吗?并结到相应目录了吗?请检查!
关于数据库从网上找到的文章
InstallShield Express制作Delphi数据库安装程序 
关键所在 
用Delphi编写的数据库程序在发布时需要同时发布BDE(Borland Database Engine),但BDE占用空间较大(不同版本大小不一,最新的Delphi5有17M多),远比一般的程序本身要大。但实际上,有些文件用不上的,所以我们可以在发布时用Delphi附带的InstallShield制作安装程序来定制BDE驱动,这样可以精简我们的数据库应用程序。 
实现与应用 
参考Bde32.HLP中"Introduction to Borland Database Engine"下的"Core BDE Files",可以得知BDE的关键文件及其作用,可以以此作为依据来精简BDE驱动程序。下面是各个文件的作用: 
一、不可缺少的文件 
Blw32.dll:语言驱动函数库。 
Idapi32.dll:BDE基本函数库。 
Fareast.btl、Usa.btl:远东语言及美国语言驱动程序,对中文软件不可缺少。 
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 provider驱动程序函数库,如果不用TProvider控件,可以不要。 
Idqbe32.dll:QBE驱动程序函数库,如果不用Query By Example,可以不要。 
Idsql32.dll:SQL查询驱动程序函数库,如果不用TQuery进行查询,可以不要。 
Idapi32.cfg:BDE配置文件,如果程序中没有特殊要求,可以不要。也可以在BDE管理器中设置正确后再分发。 四、其它文件(一般不用) 
其它的*.BTL:其它国家和地区的语言驱动程序,可以不要。 
BDE32.HLP、BDE32.CNT:BDE帮助文件,可以不要。 
BdeAdmin.exe、BdeAdmin.HLP、BdeAdmin.CNT:BDE管理器及帮助文件,如果不会发生要求软件用户自己配置BDE的情况时,可以不要。  
DataBump.EXE、DataBump.HLP、DataBump.CNT:数据库数据转移工具及帮助文件,可以不要。 
Localsql.HLP、Localsql.CNT:SQL查询语句帮助文件,可以不要。 
Sqllnk32.HLP、Sqllnk32.CNT:SQL连接帮助文件,可以不要。 在根据需要选择文件后,还要写注册表文件。可以手工设置,但最好在程序中设置,需要设置的注册表键值有(在调用数据库操作前需要有正确的键值存在,各对应键值在Win9x/NT/Win2000下均相同): 
数据驱动程序所在目录的设置: 
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.btl"  HKEY_LOCAL_MACHINE\Software\Borland \BLW32\LOCALE_LIB1="usa.btl"  
做完这些就足够了,按此办法即可有效减少BDE驱动程序的大小,例如只用TTable控件操作Paradox数据库,则只要Idapi32.dll、Blw32.dll、Idr20009.dll、Fareast.btl、Usa.btl、Idpdx32.dll六个文件即可。这些文件可放在任何一个目录,只要在注册表指明即可。BDE由17.4M减到1.48M,压缩一下就只有几百K了,这使程序大为减小。 
下面我们就以用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即可完成安装程序的制作。 
InstallShield应用中SetupRegistry()完整脚本 最近多数网友询问怎样在注册表中注册Access ODBC 及DBASE ODBC,下面版主将自己的InstallShield应用中一段SetupRegistry()完整脚本上载供大家参考,不足之处请高手指正!下面是SetupRegistry()///////////////////////////////////////////////////////////////////////////////
// //
// Function: SetupRegistry //
// //
// Purpose: This function makes the registry entries for this setup. //
// //
///////////////////////////////////////////////////////////////////////////////
function SetupRegistry()
STRING svDBprofile,svDB,szDriver,szSetup,svDBFile;
STRING svAccess,svDBASE,svSourceDB;
STRING svMStranslator,svMStransdriver;
STRING szXbdagl;
STRING szCommand, szCmdLine,svMsg;
begin
svMsg="正在更新注册表......";
SdShowMsg(svMsg,TRUE);
szXbdagl="SOFTWARE\\"+@COMPANY_NAME+"\\"+@PRODUCT_NAME+"\\"+@PRODUCT_VERSION;
//MessageBox(szXbdagl,INFORMATION);
RegDBSetDefaultRoot(HKEY_LOCAL_MACHINE);//注册ODBC有关内容
if (ComponentIsItemSelected(MEDIA,"ODBC Driver") ) then
svMStranslator="MS Code Page Translator";
svMStransdriver=WINSYSDIR+"mscpxl32.dll";
RegDBSetKeyValueEx ( "SOFTWARE\\ODBC\\ODBCINST.INI\\ODBC Core" , "" , REGDB_STRING , "" , -1 );RegDBSetKeyValueEx ( "SOFTWARE\\ODBC\\ODBCINST.INI\\"+svMStranslator , "Setup" , REGDB_STRING , svMStransdriver , -1 );//不用改
RegDBSetKeyValueEx ( "SOFTWARE\\ODBC\\ODBCINST.INI\\"+svMStranslator , "Translator" , REGDB_STRING , svMStransdriver , -1 );//不用改
RegDBSetKeyValueEx ( "SOFTWARE\\ODBC\\ODBCINST.INI\\ODBC Translators" , svMStranslator , REGDB_STRING , "Installed" , -1 );//不用改
endif;//注册Access数据库
if (ComponentIsItemSelected(MEDIA,"MS Access ODBC Driver") ) then
svDBprofile="MS Access Database for gzgl";
svDB="SOFTWARE\\ODBC\\ODBC.INI\\"+svDBprofile;
svDBFile = TARGETDIR+"\\dbms\\gzgl.mdb";//
szDriver = WINSYSDIR+"odbcjt32.dll";
svAccess="Microsoft Access Driver (*.mdb)";
RegDBSetDefaultRoot ( HKEY_CURRENT_USER );
RegDBSetKeyValueEx ( svDB , "DBQ" , REGDB_STRING , svDBFile , -1 );
RegDBSetKeyValueEx ( svDB , "Driver" , REGDB_STRING , szDriver , -1 );
RegDBSetKeyValueEx ( svDB , "FIL" , REGDB_STRING , "MS Access;" , -1 );
//RegDBSetKeyValueEx ( svDB , "DriverId" , REGDB_STRING , "25" , -1 );
RegDBSetKeyValueEx ( svDB , "DriverId" , REGDB_NUMBER , "25" , -1 );
RegDBSetKeyValueEx ( svDB , "SafeTransactions" , REGDB_STRING , "0" , -1 );
RegDBSetKeyValueEx ( svDB , "UID" , REGDB_STRING , "Admin" , -1 );RegDBSetKeyValueEx ( svDB +"\\Engines\\Jet" , "ImplicitCommitSync" , REGDB_STRING , "" , -1 );
RegDBSetKeyValueEx ( svDB +"\\Engines\\Jet", "UserCommitSync" , REGDB_STRING , "Yes" , -1 );
RegDBSetKeyValueEx ( svDB +"\\Engines\\Jet", "MaxBufferSize" , REGDB_NUMBER , "512" , -1 );
RegDBSetKeyValueEx ( svDB +"\\Engines\\Jet" , "PageTimeout" , REGDB_NUMBER , "5" , -1);
RegDBSetKeyValueEx ( svDB +"\\Engines\\Jet", "Threads" , REGDB_NUMBER , "3" , -1 );RegDBSetKeyValueEx ( "SOFTWARE\\ODBC\\ODBC.INI\\ODBC Data Sources",svDBprofile, REGDB_STRING , svAccess, -1 );//注册Access ODBC Driver
RegDBSetDefaultRoot ( HKEY_LOCAL_MACHINE );
RegDBSetKeyValueEx ( "SOFTWARE\\ODBC\\ODBCINST.INI\\"+svAccess , "APILevel" , REGDB_STRING , "1" , -1 );//不用改
RegDBSetKeyValueEx ( "SOFTWARE\\ODBC\\ODBCINST.INI\\"+svAccess , "ConnectFunctions" , REGDB_STRING , "YYN" , -1 );//不用改
RegDBSetKeyValueEx ( "SOFTWARE\\ODBC\\ODBCINST.INI\\"+svAccess , "Driver" , REGDB_STRING , szDriver , -1 );//不用改
RegDBSetKeyValueEx ( "SOFTWARE\\ODBC\\ODBCINST.INI\\"+svAccess , "DriverODBCVer" , REGDB_STRING , "02.50" , -1 );//不用改
RegDBSetKeyValueEx ( "SOFTWARE\\ODBC\\ODBCINST.INI\\"+svAccess , "DSN" , REGDB_STRING , svDBprofile , -1 );//不用改
RegDBSetKeyValueEx ( "SOFTWARE\\ODBC\\ODBCINST.INI\\"+svAccess , "FileExtns" , REGDB_STRING , "*.mdb" , -1 );//不用改
RegDBSetKeyValueEx ( "SOFTWARE\\ODBC\\ODBCINST.INI\\"+svAccess , "FileUsage" , REGDB_STRING , "2" , -1 );//不用改
RegDBSetKeyValueEx ( "SOFTWARE\\ODBC\\ODBCINST.INI\\"+svAccess , "Setup" , REGDB_STRING , szDriver , -1 );//不用改
RegDBSetKeyValueEx ( "SOFTWARE\\ODBC\\ODBCINST.INI\\"+svAccess , "SQLLevel" , REGDB_STRING , "0" , -1 );//不用改
RegDBSetKeyValueEx ( "SOFTWARE\\ODBC\\ODBCINST.INI\\"+svAccess , "UID" , REGDB_STRING , "Admin" , -1 );//不用改
//RegDBSetKeyValueEx ( "SOFTWARE\\ODBC\\ODBCINST.INI\\"+svAccess , "UsageCount" , REGDB_NUMBER , 4 , -1 );//不用改RegDBSetKeyValueEx ( "SOFTWARE\\ODBC\\ODBCINST.INI\\ODBC Drivers" , svAccess , REGDB_STRING , "Installed" , -1 );//不用改
endif;
//注册Hhctrl.OCX控件
if (ComponentIsItemSelected(MEDIA,"CHM帮助支持文件") ) then
szCommand = WINSYSDIR+APPLICATION_REG;
szCmdLine = WINSYSDIR+CMD_LINE_OCX;
if (LaunchApp(szCommand, szCmdLine) < 0) then
MessageBox("注册Hhctrl.ocx失败!", SEVERE);
endif;
endif;
//注册DBASE数据库
if (ComponentIsItemSelected(MEDIA,"DBASE ODBC Driver") ) then
svDBprofile="dBASE Files for gzgl";
svDB="SOFTWARE\\ODBC\\ODBC.INI\\"+svDBprofile;
svSourceDB = "c:\\gzgl";//原库的路径
szDriver = WINSYSDIR+"odbcjt32.dll";
szSetup=WINSYSDIR+"ODDBSE32.DLL";
svDBASE="Microsoft dBase Driver (*.dbf)";
RegDBSetDefaultRoot ( HKEY_CURRENT_USER );
RegDBSetKeyValueEx ( svDB , "DefaultDir" , REGDB_STRING , svSourceDB, -1 );
RegDBSetKeyValueEx ( svDB , "Driver" , REGDB_STRING , szDriver , -1 );
RegDBSetKeyValueEx ( svDB , "DriverId" , REGDB_NUMBER , "277" , -1 );
RegDBSetKeyValueEx ( svDB , "FIL" , REGDB_STRING , "dBase III", -1 );
RegDBSetKeyValueEx ( svDB , "SafeTransactions" , REGDB_NUMBER , "0", -1 );
RegDBSetKeyValueEx ( svDB , "UID" , REGDB_STRING , "" , -1 );RegDBSetKeyValueEx ( svDB +"\\Engines\\Xbase" , "CollatingSequence" , REGDB_STRING , "ASCII" , -1 );
RegDBSetKeyValueEx ( svDB +"\\Engines\\Xbase" , "Deleted" , REGDB_BINARY , "00" , -1 );
RegDBSetKeyValueEx ( svDB +"\\Engines\\Xbase" , "ImplicitCommitSync" , REGDB_STRING , "" , -1 );
RegDBSetKeyValueEx ( svDB +"\\Engines\\Xbase" , "PageTimeout" , REGDB_NUMBER , "5" , -1);
RegDBSetKeyValueEx ( svDB +"\\Engines\\Xbase" , "Statistics" , REGDB_BINARY , "00" , -1);
RegDBSetKeyValueEx ( svDB +"\\Engines\\Xbase", "Threads" , REGDB_NUMBER , "3" , -1 );
RegDBSetKeyValueEx ( svDB +"\\Engines\\XBase", "UserCommitSync" , REGDB_STRING , "Yes" , -1 );RegDBSetKeyValueEx ( "SOFTWARE\\ODBC\\ODBC.INI\\ODBC Data Sources",svDBprofile, REGDB_STRING , svDBASE, -1 );//注册DBASE ODBC Driver
RegDBSetDefaultRoot ( HKEY_LOCAL_MACHINE );
RegDBSetKeyValueEx ( "SOFTWARE\\ODBC\\ODBCINST.INI\\"+svDBASE , "APILevel" , REGDB_STRING , "1" , -1 );//不用改
RegDBSetKeyValueEx ( "SOFTWARE\\ODBC\\ODBCINST.INI\\"+svDBASE , "ConnectFunctions" , REGDB_STRING , "YYN" , -1 );//不用改
RegDBSetKeyValueEx ( "SOFTWARE\\ODBC\\ODBCINST.INI\\"+svDBASE , "Driver" , REGDB_STRING , szDriver , -1 );//不用改
RegDBSetKeyValueEx ( "SOFTWARE\\ODBC\\ODBCINST.INI\\"+svDBASE , "DriverId" , REGDB_STRING , "533" , -1 );//不用改
RegDBSetKeyValueEx ( "SOFTWARE\\ODBC\\ODBCINST.INI\\"+svDBASE , "DriverODBCVer" , REGDB_STRING , "02.50" , -1 );//不用改
RegDBSetKeyValueEx ( "SOFTWARE\\ODBC\\ODBCINST.INI\\"+svDBASE , "DSN" , REGDB_STRING , svDBprofile , -1 );//不用改
RegDBSetKeyValueEx ( "SOFTWARE\\ODBC\\ODBCINST.INI\\"+svDBASE , "FileExtns" , REGDB_STRING , "*.dbf,*.ndx,*.mdx" , -1 );//不用改
RegDBSetKeyValueEx ( "SOFTWARE\\ODBC\\ODBCINST.INI\\"+svDBASE , "FileUsage" , REGDB_STRING , "1" , -1 );//不用改
RegDBSetKeyValueEx ( "SOFTWARE\\ODBC\\ODBCINST.INI\\"+svDBASE , "Setup" , REGDB_STRING , szSetup , -1 );//不用改
RegDBSetKeyValueEx ( "SOFTWARE\\ODBC\\ODBCINST.INI\\"+svDBASE , "SQLLevel" , REGDB_STRING , "0" , -1 );//不用改
//RegDBSetKeyValueEx ( "SOFTWARE\\ODBC\\ODBCINST.INI\\"+svAccess , "UsageCount" , REGDB_NUMBER , 4 , -1 );//不用改RegDBSetKeyValueEx ( "SOFTWARE\\ODBC\\ODBCINST.INI\\ODBC Drivers" , svDBASE , REGDB_STRING , "Installed" , -1 );//不用改
endif;
SdShowMsg(svMsg,FALSE);
return 0;
end;回页首Installshield中注册SQL Anywhere 7.0 ODBC的完整脚本function SetupRegistry()
STRING svDBprofile,svDB,szDriver,szDriver1,szSetup,svDBFile;
STRING svAccess,svAsa70;
STRING svMStranslator,svMStransdriver;
STRING szXbdagl,svStart,svAsa70app;
STRING szCommand, szCmdLine,svMsg;
begin
svMsg="正在更新注册表......";
SdShowMsg(svMsg,TRUE);
szXbdagl="SOFTWARE\\"+@COMPANY_NAME+"\\"+@PRODUCT_NAME+"\\"+@PRODUCT_VERSION;
//MessageBox(szXbdagl,INFORMATION);
RegDBSetDefaultRoot(HKEY_LOCAL_MACHINE);//注册ASA70数据库
if (ComponentIsItemSelected(MEDIA,"asa70") ) then
svAsa70app="SOFTWARE\\Sybase\\Adaptive Server Anywhere\\7.0";
svDBprofile="kykq";
svDB="SOFTWARE\\ODBC\\ODBC.INI\\"+svDBprofile;
svDBFile = TARGETDIR+"\\database\\kykq.db";//kykq.db的全名
szDriver = TARGETDIR+"\\asa70\\dbodbc7.dll";
szDriver1=TARGETDIR+"\\asa70\\dbodtr7.dll";
svAccess="Adaptive Server Anywhere 7.0";
svAsa70="Adaptive Server Anywhere 7.0 Translator";
svStart= TARGETDIR+"\\asa70\\dbeng7.exe -c 8m";
RegDBSetDefaultRoot ( HKEY_CURRENT_USER );
RegDBSetKeyValueEx ( svDB , "AutoStop" , REGDB_STRING , "YES" , -1 );
RegDBSetKeyValueEx ( svDB , "DatabaseFile" , REGDB_STRING , svDBFile , -1 );
RegDBSetKeyValueEx ( svDB , "Debug" , REGDB_STRING , "NO" , -1 );
RegDBSetKeyValueEx ( svDB , "DisableMultiRowFetch" , REGDB_STRING , "NO" , -1 );
RegDBSetKeyValueEx ( svDB , "Driver" , REGDB_STRING , szDriver , -1 );
RegDBSetKeyValueEx ( svDB , "Integrated" , REGDB_STRING , "NO" , -1 );
RegDBSetKeyValueEx ( svDB , "PWD" , REGDB_STRING , "sql" , -1 );
RegDBSetKeyValueEx ( svDB , "UID" , REGDB_STRING , "dba" , -1 );
RegDBSetKeyValueEx ( svDB , "Start" , REGDB_STRING , svStart, -1 );//注册ASA70 ODBC Driver
RegDBSetDefaultRoot ( HKEY_LOCAL_MACHINE );
RegDBSetKeyValueEx ( "SOFTWARE\\ODBC\\ODBCINST.INI\\"+svAccess , "Driver" , REGDB_STRING , szDriver , -1 );//不用改
RegDBSetKeyValueEx ( "SOFTWARE\\ODBC\\ODBCINST.INI\\"+svAccess , "Setup" , REGDB_STRING , szDriver , -1 );//不用改RegDBSetKeyValueEx ( "SOFTWARE\\ODBC\\ODBCINST.INI\\"+svAsa70 , "Driver" , REGDB_STRING , szDriver1 , -1 );//不用改
RegDBSetKeyValueEx ( "SOFTWARE\\ODBC\\ODBCINST.INI\\"+svAsa70 , "Setup" , REGDB_STRING , szDriver1 , -1 );//不用改
RegDBSetKeyValueEx ( "SOFTWARE\\ODBC\\ODBCINST.INI\\"+svAsa70 , "Translator" , REGDB_STRING , szDriver1 , -1 );//不用改RegDBSetKeyValueEx ( "SOFTWARE\\ODBC\\ODBCINST.INI\\ODBC Drivers" , svAccess , REGDB_STRING , "Installed" , -1 );//不用改
RegDBSetKeyValueEx ( "SOFTWARE\\ODBC\\ODBCINST.INI\\ODBC Translators" , svAsa70 , REGDB_STRING , "Installed" , -1 );//不用改
//注册ASA7的应用,主要是设成中文版本
RegDBSetDefaultRoot ( HKEY_LOCAL_MACHINE );
RegDBSetKeyValueEx ( svAsa70app , "Language" , REGDB_STRING , "ZH" , -1 );
RegDBSetKeyValueEx ( svAsa70app , "Location" , REGDB_STRING , TARGETDIR+"\\asa70" ,-1 );
RegDBSetKeyValueEx ( svAsa70app , "Shared Location" , REGDB_STRING ,TARGETDIR+"\\asa70" , -1 );
endif;
SdShowMsg(svMsg,FALSE);
return 0;
end;

解决方案 »

  1.   

    感谢superjs(真剑神),虽然俺没有整明白,但是冲着你发表了这么大一片,给分!请问“把报表文件打包进安装程序,并结到相应目录”什么意思,能不能具体一点?
    报表文件是指什么呀?相应目录又是什么?
    (我用的是QuickReport和QuickRep做打印功能的)。
      

  2.   

    顺便再问一下,QuickReport中的QRDBText组件,连接了一个数据库表的其中某一字段;若是该字段的内容很长,一行不能显示完,怎样使其打印时自动分行??