用OTL库连接读取access数据库

一.环境及创建一个数据库

编程环境:VS2010

数据库:access2007

OTL库载地址:

使用access2007创建一个数据库 MetGS.accdb ,表名为:ModelInfo

二. 添加用户数据库源

控制面板—管理工具—数据源(ODBC)—–用户DSN—点击添加

如下图所示,选择Microsoft Access Driver(*.mdb,*accdb).

Access安装如下图。

这里两点需要修改,修改后,然后点击确认就可以

(1)数据库源名(N),这个随意填写,我这里使用:MetGS

(2)数据库选择,包含刚才创建MetGS.accdb的路径。

完成后就多出一个MetGS

三, 创建一个编程环境

(1)使用VS2010创建一个控制台的应用程序,然后需要把otlv4.h文件复制到对应的环境中,如下图所示:

(2)写程序,简单的测试代码如下。

#include <iostream>#include <string>#include <iomanip>using namespace std;#include <stdio.h>#include <string.h>#include <stdlib.h>#define OTL_ODBC #include "otlv4.h" // include the OTL 4.0 header filevoid print(otl_connect& db){//由于权限问题,access 2007 b不支持修改用户和用户组//没有实现直接从数据库获取表名,//char db_buf[32]={};//otl_stream stream1(50,"select name from MSysObjects where type=1 and flags=0",db);//stream1>>db_buf;//直接使用表名char db_buf[]="ModelInfo";char buf[128]={};sprintf_s(buf,"select * from %s",db_buf);otl_stream stream(50,buf,db);//MG m;int f1;char f2[32]="";int f3;char f4[32]="";int f5;char f6[32]="";while(!stream.eof()){stream>>f1>>f2>>f3>>f4>>f5>>f6;cout<<f1<<" "<<f2<<" "<<f3<<" "<<f4<<" "<<f5<<" "<<f6<<endl;}}int main(){otl_connect db;otl_connect::otl_initialize();try{db.rlogon("Admin/admin@MetGS"); //登录数据库cout<<"connnect succes"<<endl<<endl;print(db);}catch(otl_exception & p){cerr<<p.msg<<endl;cerr<<p.stm_text<<endl;cerr<<p.sqlstate<<endl;cerr<<p.var_info<<endl;}db.logoff();getchar();return 0;}

显示结果:

总结:

(1)链接数据库这块,,花了好几个小时,一直出现这个问题。

开始使用的是这种连接方式:

db.rlogon("Driver={Microsoft Access Driver(*.mdb,*accdb)};DBQ=\&;E:\CODE_test\Test\MetGS.accdb\&;;Uid=Admin;Pwd=admin");//不成功

最后的解决方案是:增加一个数据库源,db.rlogon("Admin/admin@MetGS"); //登录数据库,登录成功

(2)没有解决的权限问题,根据数据库获得表名称。“show tables”不能再access中使用。

使用语句:select name from MSysObjects where type=1 and flags=0

可以在access 2007中成功查询表名称,但是在程序中出现如下问题。

网上的解决方案如下,但是发现只适合access2003,最后直接用表查询。

打开您的ACCESS数据库,然后

工具 -> 选项 -> 视图 -> 隐藏对象、系统对象

前面的勾选上。

工具 -> 安全 -> 用户与组的权限

版权声明:本文为博主原创文章,未经博主允许不得转载。

每天告诉自己一次,『我真的很不错』

用OTL库连接读取access数据库

相关文章:

你感兴趣的文章:

标签云: