我用delphi6和access2000数据库做了一个人事管理系统,现在发现用Install shield Express将其打包作成安装盘的时候,odbc数据源老是注册不上。这样的程序到底应该如何打包呢?哪位高手能写一个详细步骤给我参考一下吗?BDE,尤其是数据库别名、路径 那里应该如何设置呢?谢谢了
解决方案 »
- 关于发送TCP/IP数据包
- 关于用ActionManager做菜单的问题,超级郁闷!顶者有分!
- 怎么处理 array[0..63] of PAnsiChar;????
- 哪里有XP菜单控件?能同时也实现ToolBar上按钮的XP效果呢?
- 关于DBLookupComboBox的定位问题(急)
- 杭州的DELPHI程序员的价格!?
- 如何对文本中的换行(或回车)判断
- 我想在窗口打开之前就检测某个标志,如果标志不成立就关闭窗口,在onshow事件里不能写close,怎么办?
- 用query怎样与access连接
- 请问各位高手,delphi5.0能否做电子地图呢?
- 设计菜单时怎样加一条为横线的菜单项
- 新手提问:函数中的一些问题?
在右边的选择框里选一个你要装的,会弹出以对话框,照对话框做既可
----------------------------------
Windows Registry Editor Version 5.00[HKEY_CURRENT_USER\Software\ODBC\ODBC.INI\我的数据]
"Driver"="C:\\WINNT\\System32\\odbcjt32.dll"
"DBQ"="D:\\VB5\\BIBLIO.MDB"
"Description"="测试用"
"DriverId"=dword:00000019
"FIL"="MS Access;"
"SafeTransactions"=dword:00000000
"UID"=""[HKEY_CURRENT_USER\Software\ODBC\ODBC.INI\我的数据\Engines][HKEY_CURRENT_USER\Software\ODBC\ODBC.INI\我的数据\Engines\Jet]
"ImplicitCommitSync"=""
"MaxBufferSize"=dword:00000800
"PageTimeout"=dword:00000005
"Threads"=dword:00000003
"UserCommitSync"="Yes"
"DBQ"="D:\\VB5\\BIBLIO.MDB"这两句里的“\\”是否应该为“\”???Rootkey是HKEY_CURRENT_USER吗?
不是HKEY_LOCAL_MACHINE吗?还是随便哪个都可以?
//目的:读取驱动程序位置
//参数:AName--要读取的数据库驱动类型的标志(自己可以任意定制)
//***************************************************
Function ReadODBCDriver(AName: String):String;
var
registerTemp: TRegistry;
s:string;
begin registerTemp:=TRegistry.Create;
if AName='Access' then
begin
with registerTemp do
begin
RootKey:=HKEY_LOCAL_MACHINE;
if OpenKey('Software\ODBC\ODBCINST.INI\Microsoft Access Driver (*.mdb)',True) then
begin
s:=ReadString('Driver');
ReadODBCDriver:=ReadString('Driver');
CloseKey;
Free;
Exit;
end;
end;
end;
registerTemp.Free;
ReadODBCDriver:=''; end;//****************************************************
//目的:建立数据库驱动程序并配置
//参数:AName--要建立的ODBC数据库别名
// APath--要连接的数据库路径名称
// ADriver--ODBC驱动名称,由系统获取
//****************************************************
Function CreateMsAccess(AName: String; APath: String; ADriver: String):Boolean;
var
registerTemp:TRegistry;
bData:array[0..0] of byte;
begin if ADriver='' then
begin
//ShowMessage('读取ODBC驱动程序失败,请重新安装ODBC!');
CreateMsAccess:=False;
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名称--AName
WriteString(AName,'Microsoft Access Driver (*.mdb)');
end
else
begin
CreateMsAccess:=False;
Exit;
end;
CloseKey;
//写入DSN配置信息
if OpenKey('Software\ODBC\ODBC.INI\'+AName,True) then
begin
//数据库目录,连接你的数据库
WriteString('DBQ',APath);
//数据源描述 --任意修改??????????
WriteString('Description','Nsky Access DataBase'); //驱动程序DLL文件
WriteString('Driver',ADriver); //驱动程序标志
WriteInteger('DriverId',25); //Filter依据
WriteString('FIL','Ms Access;'); //支持的事务操作数目
WriteInteger('SafeTransaction',0); //用户名称
WriteString('UID',''); //用户密码--可以修改定制??????????
WriteString('PWD','nsky');
bData[0]:=0;
//非独占方式
WriteBinaryData('Exclusive',bData,1); //非只读方式
WriteBinaryData('ReadOnly',bData,1);
end
else
begin
CreateMsAccess:=False;
Exit;
end;
CloseKey;
//写入DSN数据库引擎配置信息
if OpenKey('Software\ODBC\ODBC.INI\'+AName+'\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.Button1Click(Sender: TObject);
var
pFn: TSQLConfigDataSource;
hLib: LongWord;
strDriver: string;
strHome: string;
strAttr: string;
strFile: string;
fResult: BOOL;
ModName: array[0..MAX_PATH] of Char;
srInfo : TSearchRec;
begin
Windows.GetModuleFileName( HInstance, ModName, SizeOf(ModName) );
strHome := ModName;
strfile:=extractfilepath(application.ExeName)+'2002.mdb';
//strfile:=extractfileDIR(application.ExeName); self.Caption:=strfile;
hLib := LoadLibrary( 'ODBCCP32' );
if( hLib <> NULL ) then
begin
@pFn := GetProcAddress( hLib, 'SQLConfigDataSource' );
if( @pFn <> nil ) then
begin
messagebox(handle,'test','succ',mb_ok);
strDriver := 'Microsoft Access Driver (*.mdb)';
strAttr := Format( 'DSN=myTEST'+#0+
'DBQ=%s'+#0+
'Exclusive=1'+#0+
'Description=Test Data'+#0+#0,
[strFile] );
fResult := pFn( 0, ODBC_ADD_SYS_DSN, @strDriver[1], @strAttr[1] );
if( fResult = false ) then ShowMessage( '创建MDB文件失败!' );
FreeLibrary( hLib );end;
end;
end;
不要用odbc,在程序里直接实用ado,
在数据库连接前这样
mainconn.ConnectString := '...............';
mainConn.OPen;这样最好的了,不用发布什么东西,只要exe就行了