加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

MFC中利用ODBC保存数据为Excel的问题

(2018-01-17 09:10:13)
分类: 课题研究及论文写作

CDatabase database;
    CString sDriver = "MICROSOFT EXCEL DRIVER (*.XLS)"; // Excel安装驱动
    CString sSql,sExcelFile;
    //弹出对话框选择路径
    CFileDialog fileDlg (FALSE, "Path", filename,OFN_FILEMUSTEXIST| OFN_HIDEREADONLY, "*.xls");
  if( fileDlg.DoModal()==IDOK)
    {
    sExcelFile = fileDlg.GetPathName();    // 要建立的Excel文件
        CFileFind finder;
        BOOL bWorking = finder.FindFile(sExcelFile);//寻找文件
  
  if (bWorking)//如果已经存在文件,则删除
        {
            CFile::Remove((LPCTSTR)sExcelFile);
        }
 
     }
     else return;
 
  // 创建进行存取的字符串
       sSql.Format("DRIVER={%s};DSN='';FIRSTROWHASNAMES=1;READONLY=FALSE;CREATE_DB=/"%s/";DBQ=%s",  sDriver, sExcelFile, sExcelFile);
      // 创建数据库 (既Excel表格文件)
       if( database.OpenEx(sSql,CDatabase::noOdbcDialog) )
       {
     CHeaderCtrl* pHeader = resultlist.GetHeaderCtrl();
           //获得行,列的个数
           int nColCount = pHeader->GetItemCount();
           int nLineCount = resultlist.GetItemCount();
           int ColOrderArray[100];
           CString ca[100];
           resultlist.GetColumnOrderArray(ColOrderArray, nColCount);
     //检索各列的信息,确定列标题的内容
          for(int i =0 ; i< nColCount; i++)
          {
    
     LVCOLUMN lvc;
              char text[100];
              lvc.mask = LVCF_TEXT|LVCF_SUBITEM;
              lvc.pszText = text;
              lvc.cchTextMax = 100;
              resultlist.GetColumn(ColOrderArray[i], &lvc);
              ca[i] = lvc.pszText;      
          }
          // 创建表结构
          CString tempsql="(";
          for(i =0 ; i< nColCount-1; i++)
          {
              tempsql+=ca[i];
              tempsql+=" TEXT,";
     
           }
         tempsql+=ca[nColCount-1];
          tempsql+=" TEXT)";
          sSql = "CREATE TABLE Sheet1 ";
          sSql+=tempsql;
          database.ExecuteSQL(sSql);
   
    //插入数据
          int item_count=resultlist.GetItemCount();
          tempsql="(";
          for(i =0 ; i< nColCount-1; i++)
          {
              tempsql+=ca[i];
              tempsql+=" ,";
     
          }
          tempsql+=ca[nColCount-1];
          tempsql+=")";
   
    for(int itemnum=0;itemnum
          sSql="";
          sSql ="INSERT INTO Sheet1 ";
          sSql+=tempsql;
          sSql+="VALUES ('";
          for(i =0 ; i< nColCount-1; i++)
          {
              sSql+=resultlist.GetItemText(itemnum, i);
              sSql+="','";
     
          }
          sSql+=resultlist.GetItemText(itemnum, nColCount-1);
          sSql+="')";
          database.ExecuteSQL(sSql);
      }
       
  
   // 关闭数据库
   database.Close();

 AfxMessageBox("Excel文件写入成功!");

----------------------------

程序在前面黑体字的地方就出错了!报出的错误是:(一个对话框!)

--------------------------------------------------------------------

不能更新。数据库和对象为只读。

非法的连接串属性FIRSTROWHASNAMES

非法的连接串属性CREATE_DB

非法的连接串属性FIRSTROWHASNAMES

非法的连接串属性CREATE_DB

非法的连接串属性FIRSTROWHASNAMES

非法的连接串属性CREATE_DB

非法的连接串属性FIRSTROWHASNAMES

非法的连接串属性CREATE_DB

非法的连接串属性FIRSTROWHASNAMES

非法的连接串属性CREATE_DB

非法的连接串属性FIRSTROWHASNAMES

非法的连接串属性CREATE_DB

 驱动程序的SqlSetConnectAttr失败

---------------------------------------------------------------------

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有