诸君大声请教Bartender标签传参加打字与印刷 的主题素材 干扰本人一点天了

图片 1

MFC通过sql访问excel的方法,mfcsql访问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('\0') )+1;
  }while(p[1]!=_T('\0'));

  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 展开失利"卡塔尔(قطر‎,strExcelNameState of Qatar;
    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会现出一些竟然的情形。

1.先是检查装置的驱动中是或不是有excel,代码如下: CString CAbcd1Dlg::GetExcelDriver(State of Qatar { TCHAMurano sBuf[1000], *p=sBuf;...