插入, 插入, 还是插入[ 是关于Excel往Access里面插的],该如何解决

插入, 插入, 还是插入[ 是关于Excel往Access里面插的]
兄弟最近处理EXCEL表格, 其中先把excel表格内内容挪到access里面字段里面, 然后再处理access, 但是在处理插入的时候, 却执行不了, 程序未报错, access的各个字段仍旧是一片空白。有请高手指点。
注:
_Application
Workbooks
_Workbook
Worksheets
_Worksheet
Range
分别是利用工具导入的excel类。


C/C++ code
void CExcelindatabaseDlg::OnButliulan() 
{
    // TODO: Add your control notification handler code here
    CFileDialog file(true,NULL,NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,"All Files(*.*)|*.*| |",AfxGetMainWnd());
        if(file.DoModal()==IDOK)
        {
            //得到文件的完整路径
            strText=file.GetPathName();
            //Static控件显示文件路径
            m_lujing.SetWindowText(strText);
        }
}

void CExcelindatabaseDlg::OnOK() 
{
    // TODO: Add extra validation here
    //初始化
    CoInitialize(NULL);
    //定义变量
    _Application excelapp;
    Workbooks books;
    _Workbook book;
    Worksheets sheets;
    _Worksheet sheet;
    Range range;
    Range usedRange;
    LPDISPATCH lpDisp;    
    COleVariant vResult;
    COleVariant
        covTrue((short)TRUE),
        covFalse((short)FALSE),
        covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);

    if(!excelapp.CreateDispatch("Excel.Application"))
    {
        MessageBox("确认是否安装了Excel");
    }

    books.AttachDispatch(excelapp.GetWorkbooks());
    //打开Excel
    lpDisp = books.Open(strText,      
    covOptional, covOptional, covOptional, covOptional, covOptional,
    covOptional, covOptional, covOptional, covOptional, covOptional,
    covOptional, covOptional );
    book.AttachDispatch(lpDisp);
    sheets.AttachDispatch(book.GetWorksheets());

    lpDisp=book.GetActiveSheet();
    sheet.AttachDispatch(lpDisp);

    //读取已经使用区域的信息,包括已经使用的行数、列数、起始行、起始列
    usedRange.AttachDispatch(sheet.GetUsedRange());

    range.AttachDispatch(usedRange.GetRows());
    long iRowNum=range.GetCount();       //取得行数          
    range.AttachDispatch(usedRange.GetColumns());    
    long iColNum=range.GetCount();       //取得列数         
    
    long iStartRow=usedRange.GetRow();   //取得已使用区域的起始行,从1开始
    long iStartCol=usedRange.GetColumn();//取得已使用区域的起始列,从1开始
    
    ADOConn m_AdoConn;
    m_AdoConn.OnInitADOConn();
    CString sarrays[10][10];

    for(int i=iStartRow;i<=iRowNum;i++)
    {
        for(int j=iStartCol;j<=iColNum;j++)
        {
            //读取单元格的值
            range.AttachDispatch(sheet.GetCells());
            range.AttachDispatch(range.GetItem (COleVariant((long)i),COleVariant((long)j)).pdispVal);

            vResult =range.GetValue();
            CString str,stry,strm,strd;
            SYSTEMTIME st;

            if(vResult.vt == VT_BSTR)       //字符串            1
            {
                str=vResult.bstrVal;
            }
            else if (vResult.vt==VT_R8)     //8字节的数字       2 
            {
                str.Format("%f",vResult.dblVal);
            }
            else if(vResult.vt==VT_DATE)    //时间格式          3
            {
                VariantTimeToSystemTime(vResult.date, &st);
                stry.Format("%d",st.wYear);
                strm.Format("%d",st.wMonth);
                strd.Format("%d",st.wDay);
                str = stry+"-"+strm+"-"+strd;
            }
            else if(vResult.vt==VT_EMPTY)   //单元格空的        4
            {
                str="";
            }
            sarrays[i-1][j-1] = str;
        }

[color=#800080]//用断点跟踪调试时, 下面这句话执行插入操作, 但是, 执行后, 打开access的excelin,结果是空白的表单。[/color]

        _bstr_t sql;         sql =("insert into excelin (编号,姓名,工资,日期) values ('"+sarrays[i-1][0]+"','"+sarrays[i-1][1]+"','"+sarrays[i-1][2]+"','"+sarrays[i-1][3]+"') ") ;

        m_AdoConn.ExecuteSQL(sql);
    }


    m_AdoConn.ExitConnect();
    book.Close (covOptional,COleVariant(strText),covOptional);
    books.Close();      
    excelapp.Quit(); 

    //释放对象
    range.ReleaseDispatch();
    sheet.ReleaseDispatch();
    book.ReleaseDispatch();
    books.ReleaseDispatch();
    excelapp.ReleaseDispatch();
    
    m_adodc.SetRecordSource("select * from excelin");
    m_adodc.Refresh();
    //CDialog::OnOK();
}


[color=#800080]Adoconn.cpp代码部分[/color]

ADOConn::ADOConn()
{

}

ADOConn::~ADOConn()
{

}

void ADOConn::OnInitADOConn()
{
    //初始化OLE/COM库环境
    ::CoInitialize(NULL);
    try
    {
        //创建connection对象
       m_pConnection.CreateInstance("ADODB.Connection");       
       //设置连接字符串
       _bstr_t strConnect="uid=;pwd=;DRIVER={Microsoft Access Driver (*.mdb)};DBQ=database.mdb;";
       //SERVER和UID,PWD的设置根据实际情况来设置
       m_pConnection->Open(strConnect,"","",adModeUnknown);
    }
    //捕捉异常
    catch(_com_error e)
    {
        //显示错误信息
        AfxMessageBox(e.Description());
    }
}

_RecordsetPtr& ADOConn::GetRecordSet(_bstr_t bstrSQL)
{
    try
    {
        //连接数据库,如果connection对象为空,则重新连接数据库
        if(m_pConnection==NULL)
              OnInitADOConn();
        //创建记录集对象
        m_pRecordset.CreateInstance(__uuidof(Recordset));
        //取得表中的记录
        m_pRecordset->Open(bstrSQL,m_pConnection.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);
    }
    catch(_com_error e)
    {
        e.Description();
    }
    //返回记录集
    return m_pRecordset;
}

BOOL ADOConn::ExecuteSQL(_bstr_t bstrSQL)
{
    _variant_t RecordsAffected;
    try
    {
        //是否已连接数据库
        if(m_pConnection==NULL)
             OnInitADOConn();
        m_pConnection->Execute(bstrSQL,NULL,adCmdText);
        return true;
    }
    catch(_com_error e)
    {
        e.Description();
        return false;
    }
}

void ADOConn::ExitConnect()
{
    //关闭记录集和连接
    if(m_pRecordset!=NULL)
        m_pRecordset->Close();
    m_pConnection->Close();
    //释放环境
    ::CoUninitialize();
}