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