如何在一个没有安装Access驱动程序的系统安装Access的驱动程序odbcjt32.dll?

lyplyp 2004-06-22 04:52:53
怎么样进行驱动程序的注册和安装呢?在installshield中如何进行安装呢?
...全文
1308 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
Mr-Chen 2004-09-13
  • 打赏
  • 举报
回复
首先你需要安装ODBC,所有需要分发的文件都在光盘的Devstudio\VC\REDIST目录中,你可以在这个目录中找到Redistrb.wri文件,打开这个文件就可以看到更详细的说明。另外一个简单的办法是在VB的光盘中找一个ODBC目录,该目录下有现成的ODBC安装文件,在你的客户机器上安装一下就可以了.

至于注册方法,下面这篇文章详细介绍:

用Visual C++程序实现设置ODBC数据源
--=::唐一均::=--
   ODBC(Open Database Conectivity)即开放式数据库互联,作为Windows开放性结构的一
个重要部分已经为很多的Windows程序员所熟悉,ODBC的工作依赖于数据库制造商提供的驱动程
序,使用ODBC API的时候,Windows的ODBC管理程序,把数据库访问的请求传递给正确的驱动
程序,驱动程序再使用SQL语句指示DBMS完成数据库访问工作,因此,ODBC的存在为我们开发应
用数据库程序提供了非常强大的能力和灵活性。


  为了使ODBC能与数据库一起工作,必须把数据库注册到ODBC驱动程序管理器,这项工作可以
通过定义一个DSN或数据源名字来完成。通常,我们只能手动打开系统控制面板,运行其中的ODBC
数据源管理器,手工配置数据源,但是这项工作对用户而言过于复杂,我们必须考虑用程序替用户完
成这些配置工作。


  因此许多程序员在发布自己编写的数据库软件时候都希望能有一个优秀的安装程序能够自动设置
好ODBC数据源,虽然现在InstallShield等一些优秀的安装制作软件可以帮助我们实现此类功能,但
毕竟缺少灵活,程序员不能完全控制它,事实上,我们完全可以自己编写一些程序实现此类功能,实
现的方法有几种,一种办法是用程序修改Windows注册表,程序员可以用Windows API函数增改
HKEY_LOCAL_MACHINE\Software\ODBC下的ODBC.INI中的键值,这种方法比较烦琐。我现在推荐
一种在程序中使用ODBC API的方法,程序员可以在任何时候都可以用Visual C++编写的程序调用这
些API函数来设置ODBC数据源。


  下面我用MFC写一个程序来演示如何实现这个功能:


  首先打开Visual C++,在File菜单上选New,然后选定MFC AppWizard(exe)类的项目,Project
name我们定为try,按下OK键,下一Step 1屏幕中选Dialog based,由于不必用到后面的选项,此
时即可按下Finish键,结果系统将生成一个新的项目。

  完成上述工作后,在左侧Workspace窗口中,选择ResourceView,打开try resources中的Dia-
log资源,选择并打开IDD_TRY_DIALOG对话窗口,在Controls菜单窗口中点选按键图标,回到
IDD_TRY_DIALOG对话窗口并点击此窗口,将生成一个名叫Button1的按键,选中此按键再按鼠标
右键,在弹出式菜单上选Properties选项,在出现的对话框中把Caption项的Button1值改为Setup
ODBC,关闭此对话框,再选中此按键按鼠标右键,选择ClassWizard,在出现的对话窗口中,Object
Ids选IDC_BUTTON1,Messages中双击BN_CLICKED,此时弹出Add Member Function对话
窗,Member function name是OnButton1,按OK键。在Member functions选项中双击onButton1
ON_IDC_BUTTION1:BN_CLICKED,在出现的void CTryDlg::OnButton1()函数中用以下ODBC
API函数语句替换 //TODO: Add your control notification handler code here这条注释语句:

SQLConfigDataSource(NULL,ODBC_ADD
_SYS_DSN,"Microsoft Access Driver (*.mdb)\0","
DSN=TryDB\0DBQ=D:\\Database\\
try.mdb\0DEFAULTDIR=D:\\DATABASE\0\0");

  您可以根据您不同的设置需要修改上面的语句,SQLConfigDataSource一般有以下几个许可的
参数:ODBC_ADD_DSN: 加入一个新的用户数据源,ODBC_CONFIG_DSN: 修改一个存在的用
户数据源,ODBC_REMOVE_DSN: 删除一个存在的用户数据源,ODBC_ADD_SYS_DSN:增
加一个新的系统数据源,ODBC_CONFIG_SYS_DSN: 修改一个存在的系统数据源,ODBC_RE-
MOVE_SYS_DSN: 删除一个存在的系统数据源,ODBC_REMOVE_DEFAULT_DSN: 删除省缺
的数据源说明部分。需要注意的是,当我们使用SQLConfigDataSource ODBC API函数时必须声明
包含系统的odbcinst.h头文件,所以我们再选择workspace窗口中FileView打开Header Files
中try.h,在其中加入#include "odbcinst.h",如果不加入这个头文件,系统编译时就会显示unde-
clared identifier错误,在完成上述步骤后,假如我们立即编译并Link这个项目,会发现出现下面的错
误:

tryDlg.obj : error LNK2001: unresolved
external symbol _SQLConfigDataSource@16
Debug/try.exe : fatal error LNK1120:
1 unresolved externals


  有些人可能因为找不出错误而放弃了,其实这是因为当我们使用SQLConfigDataSource 这个
API函数时候必须用到odbccp32.dll,它是Microsoft提供的32位ODBC安装和管理的DLL,如果是
16位必须用到odbcinst.dll,odbccp32.dll有一个import library,所以解决的办法就是把
这个odbccp32.lib加到我们的项目中,我们可以打开Project系统菜单项,选Add to Project子菜
单,在其中选Files项,打开VC安装目录下的\vc\lib\目录,文件类型选Library Files(.lib), 选择其
中Odbccp32.lib后按OK键,然后重新编译即可通过,运行这个程序,将弹出对话窗,按下Setup
ODBC按键,之后,您就可以通过控制面板的ODBC数据源管理器或注册表查看运行结果,您会发
现,您的数据库已经成功的注册了。

  以上代码均在WIN98,VC5.0上编译通过,您可以灵活应用这些办法,让您编写的软件更易于
安装维护和使用。
lyplyp 2004-08-11
  • 打赏
  • 举报
回复
up
lyplyp 2004-07-15
  • 打赏
  • 举报
回复
在installshield 6.2中提供的ODBC驱动太旧了,而windows98本身带的ODBC驱动也太旧了,我如何才能在installshield 6.2中在安装程序的过程中更新ODBC的驱动?
lyplyp 2004-06-24
  • 打赏
  • 举报
回复
顶!
Delphi通过注册表在程序中增减和修改数据源,具体代码部分摘录://建立一个Registry实例,设置根键值为HKEY_LOCAL_MACHINE    if OpenKey('Software\ODBC\ODBC.INI\ODBC Data Sources',True) then    //找到Software\ODBC\ODBC.INI\ODBC Data Sources    WriteString( 'MyAccess', 'Microsoft Access Driver (*.mdb)')    //注册一个DSN名称    else    //创建键值失败    begin    memo1.lines.add('增加ODBC数据源失败');    exit;    end;    CloseKey;    if OpenKey('Software\ODBC\ODBC.INI\MyAccess',True) then    //找到或创建Software\ODBC\ODBC.INI\MyAccess,写入DSN配置信息    begin    WriteString( 'DBQ', 'C:\Demo\orders.mdb' );    //指定数据库目录    WriteString( 'Description', '新Access数据源' );    //数据源描述    WriteString( 'Driver', 'C:\PWIN98\SYSTEM\odbcjt32.dll' );    //驱动程序DLL文件,根据系统安装的目录不同而不同。    WriteInteger( 'DriverId', 25 );    //驱动程序标识    WriteString( 'FIL', 'Ms Access;' );    //Filter依据    WriteInteger( 'SafeTransaction', 0 );    //支持的事务操作数目    WriteString( 'UID', '' );    //用户名称    bData[0] := 0;    WriteBinaryData( 'Exclusive', bData, 1 );    //非独占方式    WriteBinaryData( 'ReadOnly', bData, 1 );    //非只读方式    end    else    //创建键值失败    begin    memo1.lines.add('增加ODBC数据源失败');    exit;    end;    CloseKey;    if OpenKey('Software\ODBC\ODBC.INI\MyAccess\Engines\Jet',True) then    //找到或创建Software\ODBC\ODBC.INI\MyAccess\Engines\Jet,写入DSN数据库引擎配置信息    begin    WriteString( 'ImplicitCommitSync', 'Yes' );    WriteInteger( 'MaxBufferSize', 512 );    //缓冲区大小    WriteInteger( 'PageTimeout', 10 );    //页超时    WriteInteger( 'Threads', 3 );    //支持的线程数目    WriteString( 'UserCommitSync', 'Yes' );    memo1.Lines.add('操作成功!');    end;   请下载完整实例的源码包。

16,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧