欢迎访问:常州市武进区嘉泽中心小学网站 !今天是:
栏目列表
您现在的位置是:首页>>教师>>计算机技术>>程序设计>>杂项>>文章内容
问问MFC中利用ODBC保存数据为Excel的问题!!???
发布时间:2008-11-20   点击:   来源:本站原创   录入者:佚名
 

 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<item_count;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失败

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

我的csdn上看到别人也是这么用的,他们怎么没有出现这个问题啊!?我是MFC新手,希望各位大侠告知啊!!有点急啊!


附件:
    关闭窗口
    打印文档
    账号登录
    保持登录 忘记密码?
    账号与武进教师培训平台同步