MFC中怎么用ADO连接EXCEL2007

MFC中怎么用ADO连接EXCEL2007,第1张

    CDatabase database

    CString sDriver = _T("MICROSOFT EXCEL DRIVER (*.XLS)") // Excel安装驱动

    CString sSql

    CString sFileName

    CFileDialog fDlg(false, _T("xls"), NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, _T("xls File (*.xls)|*.xls|"),NULL)

    

    if(fDlg.DoModal()==IDOK)

    {

        sFileName = fDlg.GetPathName()

    }

    else

    {

        return false

    }

    try

    {

        // 创建进行存取的字符串

        sSql.Format(_T("DRIVER={%s}DSN=''FIRSTROWHASNAMES=1READONLY=FALSECREATE_DB=%sDBQ=%s"),sDriver, sFileName, sFileName)

        

        // 创建数据库 (既Excel表格文件)

        if( database.OpenEx(sSql,CDatabase::noOdbcDialog) )

        {

            // 创建表结构

            sSql = _T("create table 数据管理(序号 int,分公司 char(10),时间 char(10))")        

            CMySqlite mysql

            database.ExecuteSQL(sSql)

          

             for (int i = 0i < countDMflasei++)

             {  

                sSql.Format(_T("INSERT INTO 数据管理(序号,分公司,时间) VALUES(%d,'%s','%s')"),xx,xx,xx)   

                database.ExecuteSQL(sSql)        

              } 

        }

        // 关闭数据库

        database.Close()

        AfxMessageBox(_T("数据导出成功!"))

    }

    catch( _com_error *e)

    {

        AfxMessageBox(e->ErrorMessage())

    }

MFC访问EXCEL,那可是比较麻烦的了。给个以前做过的项目。是访问数据库的 你自己整理着看下 希望有帮助。

if(m_bDataBase) //有数据库

{

HRESULT hr

try

{

hr = m_pConnection.CreateInstance("ADODB.Connection")///创建Connection对象

if(SUCCEEDED(hr))

{

m_pConnection->ConnectionTimeout=3///设置超时时间为3秒

CString szOpen = theApp.m_szDataMisDir

if(szOpen.Right(1) != "\\")

szOpen += "\\"

//hr = m_pConnection->Open(Filepath,"","",adModeUnknown)

#ifndef _OFFICE97

szOpen = "Provider=Microsoft.Jet.OLEDB.4.0Data Source="+szOpen+"BiocaDatabase.mdb"

#else

szOpen = "Provider=Microsoft.Jet.OLEDB.3.51Data Source="+szOpen+"BiocaDatabase.mdb"

#endif

hr = m_pConnection->Open((_bstr_t)szOpen,"","",adModeUnknown)

}

}

catch(_com_error e)//捕捉异常

{

CString temp

if(m_bChinese) temp.Format("连接数据库错误信息:%s",e.ErrorMessage())

else temp.Format("Connecting database failure:%s",e.ErrorMessage())

AfxMessageBox(temp)

m_pConnection = NULL

}

//如果当前数据库为空,则导入最近使用的数据库

if(m_pConnection!=NULL)

{

CString szSQL = "SELECT * FROM TestData"

_RecordsetPtr pSearchRecordSet

try

{

pSearchRecordSet.CreateInstance("ADODB.Recordset")

pSearchRecordSet->Open((_variant_t)szSQL,_variant_t((IDispatch*)m_pConnection,true),adOpenStatic,adLockOptimistic,adCmdText)

if(pSearchRecordSet->adoEOF)

{

if(!CopyFile(m_szDesFileName1,m_szDataMisDir+"\\BiocaDatabase.mdb",FALSE))

{

//判断是否是装完软件后第一次运行

int RunNo=GetProfileInt("RunNo","No",0)//第一次运行

if(RunNo==0) WriteProfileInt("RunNo","No",1)//已经运行过了

else

{

if(m_bChinese) AfxMessageBox("导入数据库失败!")

else AfxMessageBox("Input database failure!")

}

}

}

}

catch(_com_error e)///捕捉异常

{

CString temp

if(m_bChinese) temp.Format("导入数据库出错:%s",e.ErrorMessage())

else temp.Format("Input database failure:%s",e.ErrorMessage())

AfxMessageBox(temp)

}

} //if(!m_pConnection=NULL)

} //if(m_bDataBase)

可以用多种方法,比如说用ODBC对excel数据库进行 *** 作,或者说用excel 的COM接口进行编程。我找到一个例子关键代码如下:

//创建并写入Excel文件

void CRWExcel::WriteToExcel()

{

CDatabase database

CString sDriver = "MICROSOFT EXCEL DRIVER (*.XLS)"// Excel安装驱动

CString sExcelFile = "c:\\demo.xls" // 要建立的Excel文件

CString sSql

TRY

{

// 创建进行存取的字符串

sSql.Format("DRIVER={%s}DSN=''''FIRSTROWHASNAMES=1READONLY=FALSECREATE_DB=\"%s\"DBQ=%s",

sDriver, sExcelFile, sExcelFile)

// 创建数据库 (既Excel表格文件)

if( database.OpenEx(sSql,CDatabase::noOdbcDialog) )

{

// 创建表结构(姓名、年龄)

sSql = "CREATE TABLE demo (Name TEXT,Age NUMBER)"

database.ExecuteSQL(sSql)

// 插入数值

sSql = "INSERT INTO demo (Name,Age) VALUES (''徐景周'',26)"

database.ExecuteSQL(sSql)

sSql = "INSERT INTO demo (Name,Age) VALUES (''徐志慧'',22)"

database.ExecuteSQL(sSql)

sSql = "INSERT INTO demo (Name,Age) VALUES (''郭徽'',27)"

database.ExecuteSQL(sSql)

}

// 关闭数据库

database.Close()

}

CATCH_ALL(e)

{

TRACE1("Excel驱动没有安装: %s",sDriver)

}

END_CATCH_ALL

}

// 读取Excel文件

void CRWExcel::ReadFromExcel()

{

CDatabase database

CString sSql

CString sItem1, sItem2

CString sDriver

CString sDsn

CString sFile = "Demo.xls" // 将被读取的Excel文件名

// 检索是否安装有Excel驱动 "Microsoft Excel Driver (*.xls)"

sDriver = GetExcelDriver()

if (sDriver.IsEmpty())

{

// 没有发现Excel驱动

AfxMessageBox("没有安装Excel驱动!")

return

}

// 创建进行存取的字符串

sDsn.Format("ODBCDRIVER={%s}DSN=''''DBQ=%s", sDriver, sFile)

TRY

{

// 打开数据库(既Excel文件)

database.Open(NULL, false, false, sDsn)

CRecordset recset(&database)

// 设置读取的查询语句.

sSql = "SELECT Name, Age "

"FROM demo "

"ORDER BY Name "

// 执行查询语句

recset.Open(CRecordset::forwardOnly, sSql, CRecordset::readOnly)

// 获取查询结果

while (!recset.IsEOF())

{

//读取Excel内部数值

recset.GetFieldValue("Name ", sItem1)

recset.GetFieldValue("Age", sItem2)

// 移到下一行

recset.MoveNext()

}

// 关闭数据库

database.Close()

}

CATCH(CDBException, e)

{

// 数据库 *** 作产生异常时...

AfxMessageBox("数据库错误: " + e->m_strError)

}

END_CATCH


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/10867402.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-11
下一篇 2023-05-11

发表评论

登录后才能评论

评论列表(0条)

保存