我是用ACCESS数据库,用ODBC。我的系统是WIN2000,打包的步骤如下,但在有些98上安装是正常,有的98上安装会破坏ODBC驱程。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、Iddao32.dll、Idr20009.dll、Idsql32.dll、Idodbc32.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”;
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、Iddao32.dll、Idr20009.dll、Idsql32.dll、Idodbc32.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”;
解决方案 »
- 我想把一个现成的EXE文件加到自己写的程序里。然后我点我程序里的确定按钮就把这个EXE程序释放到当前目录里。如何实现。有点像木马程序!
- ActiveX或COM对象怎样访问html页面里的大数据?
- 请教:安装上delphi之后,windows一旦出错,delphi就自动启动且定位到具体的出错地址以及cpu状态,如何关闭该功能?
- edit控件如何实现里面的内容右对齐,例如输入金额。
- 一个关于grid的问题,急,在线等
- 大家看看这个sql语句有什么问题!!!!
- 难道就没有下载delphi企业版的地方?
- 菜鸟一问(2):请问怎样实现文件的复制(从路径1复制到路径2)?
- form颜色
- resource workshop 在哪里?
- 帮帮我啊!在线等待!要不死定啦
- 三层 高水平问题 如何用函数返回数据集(不用数组)?
2、依次添加ToolBar1、ADOConnection1、ADOTable1、DataSource1、DBGrid1、OpenDialog1各一个。
3、在ToolBar1添加ToolButton1、ComboBox1各一个。
4、设置:
ADOTable1.Connection:=ADOConnection1;
DataSource1.DataSet:=ADOTable1;
DBGrid.DataSource:=DataSource1;二、完整的源代码unit Unit1;
interface
uses
Windows,Messages,SysUtils,Classes,Graphics,Controls,Forms,Dialogs,Registry,ExtCtrls,DBCtrls,ImgList,ComCtrls,ToolWin,Grids,DBGrids,Db,ADODB,StdCtrls;type
TForm1 = class(TForm)
ADOConnection1:TADOConnection;
ADOTable1:TADOTable;
DataSource1:TDataSource;
DBGrid1:TDBGrid;
OpenDialog1:TOpenDialog;
ToolBar1:TToolBar;
ToolButton1:TToolButton;
ImageList1:TImageList;
DBNavigator1:TDBNavigator;
ComboBox1:TComboBox;procedure ToolButton1Click(Sender: TObject);
procedure ComboBox1Change(Sender: TObject);private
{Private declarations}public
{Public declarations}end;var
Form1:TForm;
Function ReadODBCDriver(Name: String):String;
Function CreateMsAccess(Path: String; driver:String):Boolean;implementation
{$R *.DFM}//读取驱动程序位置
Function ReadODBCDriver(Name: String):String;
var
registerTemp: TRegistry;
begin registerTemp:=TRegistry.Create;
//读取MS-ACCESS驱动程序位置
if Name='Access' then
begin
with registerTemp do
begin
RootKey:=HKEY_LOCAL_MACHINE;
if OpenKey('Software\ODBC\ODBCINST.INI\Microsoft Access Driver(*.mdb)',True) then
begin
ReadODBCDriver:=ReadString('Driver');
CloseKey;
Free;
Exit;
end;
end;
end;
registerTemp.Free;
ReadODBCDriver:=''; end;Function CreateMsAccess(Path: String; driver: String):Boolean;
var
registerTemp:TRegistry;
bData:array[0..0] of byte;
begin if Driver='' then
begin
ShowMessage('读取ODBC驱动程序失败,请重新安装ODBC!');
Exit;
end;
registerTemp:=TRegistry.Create;
CreateMsAccess:=True;
with registerTemp do
begin
RootKey:=HKEY_LOCAL_MACHINE;
if OpenKey('Software\ODBC\ODBC.INI\ODBC Data Sources',True) then
begin
//注册一个DSN名称
WriteString('TemAccess','Microsoft Access Driver(*.mdb)');
end
else
begin
CreateMsAccess:=False;
Exit;
end;
CloseKey;
//找到或创建Software\ODBC\ODBC.INI\TemAccessDataBase, 写入DSN配置信息
if OpenKey('Software\ODBC\ODBC.INI\TemAccess',True) then
begin
//数据库目录,连接你的数据库
WriteString('DBQ',Path);
//数据源描述
WriteString('Description','AccessDataBase'); //驱动程序DLL文件
WriteString('Driver',Driver); //驱动程序标识
WriteInteger('DriverId',25); //Filter依据
WriteString('FIL','Ms Access;'); //支持的事务操作数目
WriteInteger('SafeTransaction',0); //用户名称
WriteString('UID','');
bData[0]:=0;
//非独占方式
WriteBinaryData('Exclusive',bData,1); //非只读方式
WriteBinaryData('ReadOnly',bData,1);
end
else
begin
CreateMsAccess:=False;
Exit;
end;
CloseKey;
//找到或创建Software\ODBC\ODBC.INI\TemAccessDataBase\Engines\Jet 写入DSN数据库引擎配置信息
if OpenKey('Software\ODBC\ODBC.INI\TemAccess\Engines\Jet',True) then
begin
WriteString('ImplicitCommitSync','Yes');
//缓冲区大小
WriteInteger('MaxBufferSize',512); //页超时
WriteInteger('PageTimeout',10); //支持的线程数目
WriteInteger('Threads',3);
WriteString('UserCommitSync','Yes');
end
else
begin
CreateMsAccess:=False;
Exit;
end;
CloseKey;
Free;
end; end;procedure TForm1.ToolButton1Click(Sender: TObject);
var
FileName:String;
begin
if OpenDialog1.Execute then
begin
ADOConnection1.Connected:=False;
FileName:=OpenDialog1.FileName;
//创建ODBC
CreateMsAccess(FileName,ReadODBCDriver('Access'));
//连接ODBC
ADOConnection1.ConnectionString:='Provider=MSDASQL.1;Persist Security Info=False;Data Source=TemAccess;Mode=ReadWrite';
ADOConnection1.Connected:=True;
ADOConnection1.GetTableNames(ComboBox1.Items.False);
ComboBox1.ItemIndex:=0;
ADOTable1.Connection:=ADOConnection1;
ADOTable1.TableName:=ComboBox1.Text;
ADOTable1.Open;
end;end;procedure TForm1.ComboBox1Change(Sender: TObject);
begin
ADOTable1.Active:=False;
ADOTable1.TableName:=CoboBox1.Text;
ADOTable1.Open;
end;end.