一.环境及创建一个数据库
编程环境: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数据库,然后
工具 -> 选项 -> 视图 -> 隐藏对象、系统对象
前面的勾选上。
工具 -> 安全 -> 用户与组的权限
版权声明:本文为博主原创文章,未经博主允许不得转载。
每天告诉自己一次,『我真的很不错』