CadCaeCam.com是目前CAD/CAE/CAM/PLM类专业网站中,用户最多,技术含量最高的网站之一, 涵盖目前所有常用的C3P类软件技术讨论。

C3P专业门户

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 31083|回复: 84

[推荐] CAA ODBC 连接excel的方法

  [复制链接]
发表于 2008-3-19 20:32:11 | 显示全部楼层 |阅读模式
加入头文件:- b( Y! u# x% N
#include "afxdb.h"6 X: q$ w4 z# l9 N
#include "odbcinst.h"
/ S! h- H2 M" t! ]$ G$ C% u3 A) X' P
    CDatabase database;
$ f/ B7 Z! ?+ l6 k4 k& ~  CString sDriver = "MICROSOFT EXCEL DRIVER (*.XLS)"; // Excel安装驱动
: m' r9 @$ ^0 j* J2 H  CString sExcelFile,sPath; 8 x- \. M6 H- m: L' L
  CString sSql;
9 N) ?( g# a3 @9 j  4 u" P" v: p6 t5 X# ~
  //获取主程序所在路径,存在sPath中
( O. \4 u* B4 q  GetModuleFileName(NULL,sPath.GetBufferSetLength (MAX_PATH+1),MAX_PATH);) L* [% L( E7 j* o+ V/ F
  sPath.ReleaseBuffer ();& b, b, Y  N, {9 p- w
  int nPos;
/ [3 m, c6 T. m, I( T2 [
6 G/ Z6 |/ p, W0 S  nPos=sPath.ReverseFind('\\');
8 l5 _( D& b" U0 U, t9 I6 K8 A  sPath=sPath.Left (nPos);( Y& M# q# H( f4 y, D
  nPos=sPath.ReverseFind('\\');
; y) C0 q0 T- `% G( W" I  sPath=sPath.Left (nPos);
' S$ X# {' r' n9 Y7 J7 R8 {5 J! m  nPos=sPath.ReverseFind('\\');
$ K5 p+ t& M+ @& k- \+ I  sPath=sPath.Left (nPos);
: `2 q. D, f" `  y2 [% X4 f' R  
/ l# _+ X' U' }  sExcelFile = sPath + "\\拱圈参数.xls";    // 要建立的Excel文件2 a9 R6 l0 s- \: T9 a8 r
  q7 ?) z. s+ Z0 ]6 k+ I
  CATTry
0 }1 Z7 E8 j) N- \2 O2 _  {$ \  j/ D8 m: s7 M2 `$ {
    // 创建进行存取的字符串
( w" z& T: |; b( S1 ~    sSql.Format(_T("DRIVER={%s};DSN='';FIRSTROWHASNAMES=1;READONLY=FALSE;CREATE_DB=\"%s\";DBQ=%s"),sDriver, sExcelFile, sExcelFile);
( h1 `! R) e& B2 J1 k& |   
. s8 `" N3 V+ g- ]* v. q8 y3 j    // 创建数据库 (既Excel表格文件)
' E$ |. y7 a) C7 t    if( database.OpenEx(sSql,CDatabase::noOdbcDialog) )
# A& B# i7 b7 a; w+ R1 A    {& A: `' i" c1 U' ]" s/ n$ \# ~& y( s
      // 创建表结构(姓名、年龄)
* |. I) {6 H6 Q. U- M      sSql = "CREATE TABLE Exceldemo (Name TEXT,Age NUMBER)";% O+ ^/ F4 d' d  E) a. E: o# m
      database.ExecuteSQL(sSql);4 E% d* P6 E% b6 @* u
      4 ?5 R3 H2 i) K* \9 T
      // 插入数值/ Z0 D) E% F* B/ J3 r5 v& D
      sSql = "INSERT INTO Exceldemo (Name,Age) VALUES ('徐景周',26)";/ L7 m+ E1 U' M8 U' p5 G5 ]: {7 ~
      database.ExecuteSQL(sSql);
% g& F( Z; r( j) v* \      
+ c( p6 q2 x' \' e, M  i1 E      sSql = "INSERT INTO Exceldemo (Name,Age) VALUES ('徐志慧',22)";
% ]5 E; a# n% r      database.ExecuteSQL(sSql);# ^/ {2 t2 f/ P# y
      
( i1 }, l! m/ J9 ~( O      sSql = "INSERT INTO Exceldemo (Name,Age) VALUES ('郭徽',27)";4 u8 O. @' K" w8 a6 ]+ ~+ f
      database.ExecuteSQL(sSql);  r7 ^( _) o4 n$ W* ^4 @1 h
    }   . C0 S& C/ e4 [* k3 ^& W% S' D- R, L
    ! c; K2 O0 b$ a9 s) Z/ G
    // 关闭数据库
0 M& N' M3 m9 a/ v+ ]1 h    database.Close();  
4 A- j, h7 @( `+ W! r  }3 ?; I3 P1 p+ e) K  f
游客,如果您要查看本帖隐藏内容请回复
1 o1 e5 f$ k& F8 L  M% z- S
上面的代码仅仅是抛砖引玉,修改网上已有的一个例子的数据类型,有需要的同仁可以修改Cstring.Formit函数,更改传说中的CSpreadSheet,就可以完美的实现在window系统中对excel的操作了,它的效率远远高于用caa自带的excel读取函数。
发表于 2008-3-20 08:51:06 | 显示全部楼层
支持,帮顶一个
发表于 2008-3-20 11:46:54 | 显示全部楼层
好文章,我已经给你加精华了
发表于 2008-3-21 11:01:13 | 显示全部楼层
好东西,需要顶一个。
发表于 2008-3-23 12:24:30 | 显示全部楼层
See see
发表于 2008-4-3 09:10:13 | 显示全部楼层
丁一下!
发表于 2008-4-30 15:58:17 | 显示全部楼层
顶一个
发表于 2008-5-6 11:15:23 | 显示全部楼层
看看
发表于 2008-5-6 13:41:38 | 显示全部楼层
询问:CATCatch能够捕捉到database连接过程中的error?
发表于 2008-7-6 16:43:55 | 显示全部楼层

回复 7# fisher 的帖子

有新的进展么
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|手机版|小黑屋|CadCaeCamPlm专业门户网站 ( 蜀ICP备05008798号 ) 网站速度测试

GMT+8, 2019-7-17 11:25 , Processed in 0.094860 second(s), 22 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表