`
ldjsyl
  • 浏览: 194730 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

ACCESS和EXCEL之间的互操作

    博客分类:
  • VC
阅读更多
VC对数据库的操作,通常就是通过ADO、ODBC或DAO方式访问。在最近的工程中,对ADO和ODBC操作数据库有了一定的了解,DAO方式还没有尝试。
下面是通过ODBC访问数据库的操作,ADO方式建立连接时会出现异常。
一、ACCESS->EXCEL
主要思想就是通过CDatabase操作数据库,将ACCESS中的数据读取出来,然后再插入到EXCEL中。代码如下:
//将access数据导入到excel中
void ExportToExcel(CString filename, _RecordsetPtr &resultlist, CWnd *wnd,CString tableName)
{
	CDatabase database;
	CString sDriver = "MICROSOFT EXCEL DRIVER (*.XLS)"; // Excel安装驱动
	CString sExcelFile,sPath; 
	CString sSql;
	_variant_t var;
	CString strName,strAge,strWealth;

	TRY
	{
		// 创建进行存取的字符串
		sSql.Format("DRIVER={%s};DSN='';FIRSTROWHASNAMES=1;READONLY=FALSE;CREATE_DB=\"%s\";DBQ=%s",sDriver, filename, filename);

		// 创建数据库 (既Excel表格文件)
		if( database.OpenEx(sSql,CDatabase::noOdbcDialog) )
		{     
			// 创建表结构
			sSql = "CREATE TABLE TestSheet(姓名 TEXT,分数 TEXT,权值 TEXT)";//"CREATE TABLE Sheet1 (序号 TEXT,原始分数 TEXT,人数 TEXT,以下累加人数 TEXT,RP TEXT,Z TEXT,T=10Z+50 TEXT)";
			database.ExecuteSQL(sSql);
			// 读入库中各字段并加入列表框中
			while(!m_pRecordset->adoEOF)
			{
				var = m_pRecordset->GetCollect("Name");
				if(var.vt != VT_NULL)
					strName = (LPCSTR)_bstr_t(var);
				var = m_pRecordset->GetCollect("Age");
				if(var.vt != VT_NULL)
					strAge = (LPCSTR)_bstr_t(var);
				var = m_pRecordset->GetCollect("Wealth");
				if(var.vt != VT_NULL)
					strWealth = (LPCSTR)_bstr_t(var);

				sSql = "INSERT INTO TestSheet(姓名,分数,权值)VALUES ('" + strName +"','" +strAge+"','"+strWealth+"')";
				database.ExecuteSQL(sSql);

				m_pRecordset->MoveNext();
			}
			//插入数据   
//			sSql = "INSERT INTO 名单(姓名,分数,权值)VALUES ('ldj','57','28')";
//			database.ExecuteSQL(sSql);
		}

	// 关闭数据库
	database.Close();

	//	  AfxMessageBox("数据保存成功!");
	}
	CATCH_ALL(e)
	{
		TRACE1("Excel驱动没有安装: %s",sDriver);
		AfxMessageBox("Excel驱动没有安装!");
	}
	END_CATCH_ALL; 

}

二、EXCEL->ACCESS
主要思想是通过CSpreadSheet类读取EXCEL数据,然后将数据插入到ACCESS中,代码如下。其中CSpreadSheet类是专门操作EXCEL数据的类。
void CExcelAccessDlg::OnOK() 
{
	CString sExcelFile,sPath,filename = ".\\Demo.mdb",sql; 
	//弹出对话框选择路径
	CFileDialog fileDlg(TRUE, NULL, filename,OFN_FILEMUSTEXIST| OFN_HIDEREADONLY, _T("Excel files (*.xls)|*.xls|"),this);
	if( fileDlg.DoModal()==IDOK)
	{
		sExcelFile = fileDlg.GetPathName();    // 要建立的Excel文件
		CFileFind finder;
		BOOL bWorking = finder.FindFile(sExcelFile);//寻找文件
	}
	else return;
	CSpreadSheet SS(sExcelFile, "TestSheet");

	CStringArray Rows, Column;

	//清空列表框
	m_AccessList.ResetContent();
	for (int i = 2; i <= SS.GetTotalRows(); i++)
	{
		// 读取一行
		SS.ReadRow(Rows, i);
		CString strName = "" ,strAge = "", strWealth = "";
		strName = Rows.GetAt(0);
		strAge = Rows.GetAt(1);
		strWealth = Rows.GetAt(2);
		sql = "INSERT INTO DemoTable(Name,Age,Wealth)VALUES ('" + strName +"','" +strAge+"','"+strWealth+"')";
		insertToAcces(sql,filename);
	}
	Sleep(2 * 1000); 
	CDialog::OnOK();
}
void CExcelAccessDlg::insertToAcces(CString sql, CString filename)
{
	CDatabase database;
	CString sDriver = "MICROSOFT ACCESS DRIVER (*.mdb)"; // Excel安装驱动
	CString sExcelFile,sPath; 
	CString sSql;
	CString strName,strAge,strWealth;

	TRY
	{
		// 创建进行存取的字符串
		sSql.Format("DRIVER={%s};DSN='';FIRSTROWHASNAMES=1;READONLY=FALSE;CREATE_DB=\"%s\";DBQ=%s",sDriver, filename, filename);

		// 创建数据库 (既Excel表格文件)
		if( database.OpenEx(sSql,CDatabase::noOdbcDialog) )
		{     
			database.ExecuteSQL(sql);
		}

	// 关闭数据库
	database.Close();

	//	  AfxMessageBox("数据保存成功!");
	}
	CATCH_ALL(e)
	{
		TRACE1("Excel驱动没有安装: %s",sDriver);
		AfxMessageBox("Excel驱动没有安装!");
	}
	END_CATCH_ALL; 
}
分享到:
评论

相关推荐

    Excel与Access互转换

    在IT领域,数据管理和...了解并掌握Excel与Access之间的互转换技巧,能极大地提高工作效率,满足不同场景下的数据需求。无论是为了数据分析、项目管理还是业务报告,熟练掌握这两种工具的结合使用都是一项宝贵的技能。

    access与excel互转的dll

    标题中的“access与excel互转的dll”指的是一个动态链接库(DLL)文件,用于在Microsoft Access和Excel之间进行数据转换。DLL文件是Windows操作系统中的一种共享库,它包含可由多个程序调用的函数或代码模块。在这个...

    ASP excel导出/导入Access数据库(代码+实例下载)

    通过这个主题,你可以学习到ASP如何处理Excel和Access之间的数据交互,这对于需要在Web应用中集成这两种技术的开发者来说是非常有价值的。记住,安全性和性能优化也是这类操作中需要考虑的关键因素,例如,批量插入...

    Excel文件与Access文件互转换

    总结,Excel与Access之间的数据转换在Delphi中可以通过第三方控件实现,这个过程涉及读取、处理、创建和写入数据,以及数据库和文件系统的操作。熟练掌握这种转换技巧对于提高工作效率和数据管理能力具有重要意义。

    vs2010连接access输出excel和word文档程序源代码

    对于输出Excel和Word文档,VB.NET可以利用Microsoft.Office.Interop库,这是一个允许.NET应用与Office应用程序进行交互的COM互操作接口。例如,使用Excel的Application对象可以创建新的Workbook,设置工作表的值,...

    好东东:Excel与Access互转换

    本文将详细介绍如何在Excel和Access之间进行数据互换,以便更好地利用两者的优势。 1. **Excel到Access的转换**: - **数据导入**:当你发现Excel工作簿中的数据量过大,处理起来效率低或需要更复杂的查询时,可以...

    C#实现Excel2007数据批量导入Access2007和导出

    总结来说,本示例展示了C#在数据导入导出方面的能力,利用了.NET Framework提供的工具和接口,有效地处理了Excel和Access之间的数据交换。在实际开发中,可以根据需求进一步优化代码,比如添加错误处理机制,支持...

    aspnet access to excel

    5. **性能与限制**:虽然使用COM互操作和ADO.NET可以方便地处理小规模的Excel文件,但这种方法对于大型文件或高性能应用可能不适用,因为它涉及到Excel进程的启动和内存占用。对于大规模数据处理,建议考虑使用第三...

    SQL和Access导入数据工具,互倒

    总之,SQL Server与Access之间的数据互倒是一个常见且实用的操作,通过合适的工具和方法,可以有效地实现数据迁移,满足不同场景的需求。无论是企业升级数据库系统,还是个人用户在不同平台间共享数据,了解这些技巧...

    VB.net实现无需安装Excel由代码创建Excel文件纯代码创建Excel文件

    首先,我们需要理解的是,`Microsoft.Office.Interop.Excel`是Microsoft提供的一个COM互操作库,它允许.NET应用程序与Excel进行交互。然而,这个方法需要在目标机器上安装Excel,这并不符合我们的需求。因此,我们将...

    2007 Office system 驱动程序:数据连接组件AccessDatabaseEngine.rar

    这个驱动程序不仅适用于ArcGIS,还可以用于其他任何需要连接到Excel文件的软件,增强了数据的兼容性和互操作性。 总结来说,2007 Office系统的数据连接组件AccessDatabaseEngine对于解决ArcGIS中打开xlsx文件的错误...

    sql数据导入到access,和xml等文件中

    "SQL数据导入到Access,和XML等文件中"这个主题涉及到的就是如何在不同数据平台间进行数据交换,以实现数据共享和互操作性。让我们深入探讨这个过程。 首先,SQL Server是一种强大的关系型数据库管理系统,广泛用于...

    excel作为opc服务器pc+access的opc客户端[归纳].pdf

    在工业自动化领域,OPC(OLE for Process Control)标准被广泛应用于不同系统间的数据交换,尤其是在PLC(可编程逻辑控制器)与...通过OPC技术,可以方便地集成不同的自动化设备,增强了系统间的互操作性和灵活性。

    access数据库论文下载

    5. **兼容性和互操作性**:Access能够很好地与其他数据库系统(如SQL Server、Oracle等)进行数据交换。 ### Access数据库在学术研究中的应用 在学术领域,尤其是计算机科学、信息管理等相关专业,Access数据库被...

    Access 2010数据库程序设计教程-数据库

    9. 数据导入和导出:Access允许用户导入或链接来自其他数据源(如Excel、CSV、SQL Server等)的数据,以及将数据导出到其他格式,增强了与其他系统的互操作性。 通过学习《Access 2010数据库程序设计教程》,你可以...

    Access数据库教学课件

    了解如何导入和导出数据,能增强数据的互操作性,实现多系统间的数据整合。 8. **数据库安全性**:学习如何设置用户权限、保护数据库和备份恢复,以确保数据的安全性和可靠性。 9. **数据分析与可视化**:Access...

    Access 2003 数据库应用教程

    Access 2003支持与多种数据源的互操作性,包括Excel、文本文件、其他数据库系统等。教程将介绍如何: - **导入数据**:从外部文件或数据库导入数据到Access。 - **导出数据**:将Access中的数据导出为其他格式,...

    基于java的开发源码-和DLL(COM)互操作 Jawin.zip

    然而,在与Windows系统下的DLL(动态链接库)和COM(组件对象模型)组件交互时,Java原生并不支持直接的互操作。为了实现这样的功能,开发者通常需要借助一些第三方库或者特定的技术方案。"基于java的开发源码-和DLL...

    C#操作Excel表格.rar

    使用System.Runtime.InteropServices命名空间下的COM互操作,可以创建Excel对象,打开、修改和保存Excel文件。例如,以下代码片段展示了如何打开一个Excel文件并写入数据: ```csharp using Excel = Microsoft....

    收取邮件_excel与txt互转_十六进制与字符串的转换

    在本项目“收取邮件_excel与txt互转_十六进制与字符串的转换”中,可能包含了完整的流程示例,从收取邮件,到处理数据(如Excel和TXT文件的转换),再到十六进制的转换操作,这有助于学习和理解这些关键概念。...

Global site tag (gtag.js) - Google Analytics