• MFC通过sql访问excel的方法


    1.首先检查安装的驱动中是否有excel,代码如下:
    CString CAbcd1Dlg::GetExcelDriver()
    {
      TCHAR sBuf[1000], *p=sBuf;
      WORD sBufMax=1000, sBufOut;
      if (!SQLGetInstalledDrivers(sBuf, sBufMax, &sBufOut))
        return "";

      CString strDriver;
      do{
        if(_tcsstr(p,_T("Excel"))!=0)
        {
          strDriver=CString(p);
          break;
        }
        p=_tcschr(p,_T('') )+1;
      }while(p[1]!=_T(''));

      return strDriver;
      }

      此函数的返回值即为excel驱动设备名称

    2.读取访问excel表数据,先定义一个表,操作如下:
      运行Microsoft Excel , 打开要操作的工作簿, 左键拖拽,选取要定义成为表的区域,
      从菜单中选择'插入 '->'名称'->'定义','定义名称'对话框出现后,键入表的名字,
      例如:test,保存退出。
      这样,你就可以在VC中,使用象SELECT * FROM test这样的SQL语句了

      CString sD;
      //m_strDriver为 1 中获取的excel设备驱动名称,
      //strExcelFullFileName是excel表的全名
      sD.Format(_T("ODBC;DRIVER={%s};DSN='';DBQ=%s"), m_strDriver, strExcelFullFileName);

      CDatabase database;
      //打开数据库(即Excel文件)
      if (0 == database.Open(NULL, false, false, sD))
      {
        CString strFailInfo;
        strFailInfo.Format(_T("%s database 打开失败"),strExcelName);
        AfxMessageBox(strFailInfo);
        return;
      }

      CRecordset recset(&database);

      //设置读取的查询语句
      CString ql(_T("SELECT 字段1,字段2 FROM test"));
      //执行查询语句
      recset.Open(CRecordset::forwardOnly,ql,CRecordset::readOnly);

      遍历每一条,获取每一个字段
      while(!recset.IsEOF())
      {
        CString str1, str2;
        recset.GetFieldValue(_T("字段1"), str1);
        recset.GetFieldValue(_T("字段2"), str2);
        recset.MoveNext();//移到下一条记录
      }

    3.写excel
      CString sSql;
      //m_strDriver为 1 中获取的excel设备驱动名称
      //strExcelFileName 为 写入的excel名称
      sSql.Format("DRIVER={%s};DSN='';FIRSTROWHASNAMES=1;READONLY=FALSE;CREATE_DB="%s";DBQ=%s",m_strDriver, strExcelFileName,   strExcelFileName);
      //打开数据文件
      if (0 == m_dbWriteToExcel.OpenEx(sSql,CDatabase::noOdbcDialog)){
        return false;
      }
      写入表头
      sSql = "CREATE TABLE Exceldemo (字段1 TEXT, 字段2 TEXT)";
      m_dbWriteToExcel.ExecuteSQL(sSql);

      //写入数据
      str1.Replace(_T("'"),_T("''"));
      str2.Replace(_T("'"),_T("''"));

      CString strSql;
      strSql.Format(_T("INSERT INTO Exceldemo (字段1, 字段2) VALUES ('%s', '%s ')"),str1, str2);
      m_dbWriteToExcel.ExecuteSQL(strSql);

      备注:
        1.由于sql中插入的字段值要用''包起来,如果字段值中有'则会出现冲突,在sql中俩个'代表一个'
        2.'%s ' 后面的'号前有个空格,经过测试,'紧挨着%s会出现一些奇怪的情况。

  • 相关阅读:
    扒皮下音悦台的“返回顶部”图标效果
    扒皮下京东首页楼层图标的动画效果实现方式
    总结前端开发中的一些特殊规范
    用JS识别各版本浏览器
    各主流浏览器内核介绍
    CSS百分比定义高度的冷知识
    图解js中常用的判断浏览器窗体、用户屏幕可视区域大小位置的方法
    从一个简单例子来理解js引用类型指针的工作方式
    仿京东首页商品分类底部色标随鼠标移动特效
    知乎网首页一个延时交互的小思路
  • 原文地址:https://www.cnblogs.com/sancong/p/6292243.html
Copyright © 2020-2023  润新知