admin 管理员组

文章数量: 1184232


2024年2月24日发(作者:前端jquery选择器)

excel,导入access,不能找到表达式中引用的字段的解决方案

篇一:Access与Excel结合使用常用代码

Excel使用灵活但是处理数据量小(数据一多就会卡)Access能数据量大(相对于Excel)但是使用不灵活。Excel与Access结合使用能相互弥补不足。如用Access用为后台数据库对表进行筛选、汇总等一系列处理后再以Excel为前台导出数据,会比直接用Excel表刷选、汇总一个上万行的数据表快的多。以下是几种access与Excel结合使用常用方法与代码。

1. Access导入表格代码

Sub 导入材料出库表()

False'取消警告

"DELETE FROM 材料出库表" '删除材料出库表

acImport, 8, "材料出库表", _

“F:材料出库明细.xls", _

True, "sheet1!a2:agXX0" '导入材料出库明细表中的sheet1表a2:agXX0区域的数据 True

End Sub '恢复警告

注: acImport, 8, "材料出库表", “F:材料出库明细.xls", True, "sheet1!a2:agXX0" 此句代码中的"材料出库表"是表明导入到Access中的材料出库表中,参数true1文档来源为:从网络收集整理.word版本可编辑.

表明以导入数据的第一行作为列字段如将true改false 数据导入access中后表的列字段为“F1、F2、F3.....”。

2. 创建Access窗体与按钮

1. 创建窗体

点创建-窗体设计即调出窗体设计窗体界面。

2. 创建按钮

点设计-按扭即可用鼠标在窗体中插入按钮。

按钮做好后会自动弹出“命令按钮向导”直接点取消。

右击按钮-事件生成器-代码生成器即进入此按钮的代码编辑区。

将光标放到Private Sub Command3_Click() 下面粘贴以下代码

False

"DELETE FROM 材料出库表"

acImport, 8, "材料出库表", _

“F:材料出库明细.xls", _

True, "sheet1!a2:agXX0"

True

关闭代码界面回到窗体设计界面,点右下角窗体视图,

再点刚做好的按钮,“成本ERP导出表导入access材料出库明细.xls”的数据就会导入到access中的材料出库表中,

2文档来源为:从网络收集整理.word版本可编辑.

将不同的代代码放入按钮中就能实现不同功能的按钮。

3. Access导出到Excel表

Access导出Excel表方法很多(最简单的方法直接在Access点导出)这里介绍以Excel作为前台Access作为后台取数据的方法。

新建一个Excel打开Alt+F11 打开VBE窗口

点右键-插入-模块

这时会弹出模块1的界面并且光标在此界面闪。将以下代码贴入此模块,按F5即可运行此模块就可从Access导出数据(注运行时出现警告“用户类型未定义”这是没有对Microsoft ActiveX Data Object X Library 引用点工具-引用将Microsoft ActiveX Data Object X 打下勾即可)

Sub 导出材料汇总()

Dim mydata$, SQL$, hh%

Dim rs As

Dim cnn As

Range("d2:l10000").Clear

mydata = "成本ERP导出表基础数据.accdb"

Set cnn = New

With cnn

.Provider = ""

.Open mydata

3文档来源为:从网络收集整理.word版本可编辑.

End With

SQL = "SELECT DISTINCT 材料出库表.工单号, 材料出库表.仓库, 材料出库表.领料部门, 材料出库表.物料类型," _

& " 材料出库表.物料名称, 材料出库表.单位,

Sum(材料出库表.实发数量) AS 实发数量之总计, Sum(材料出库表.金额)" _

& " AS 金额之总计, 材料出库表.领料用途 FROM 材料出库表 GROUP BY 材料出库表.领料部门, 材料出库表.仓库, 材料出库表.工单号, " _

& " 材料出库表.物料类型, 材料出库表.物料名称,材料出库表.单位, 材料出库表.领料用途"

Set rs = (SQL)

With Range(Cells(1, 1), Cells(1, ))

.HorizontalAlignment = xlCenter

End With

Range("d2").CopyFromRecordset rs

Range("A1:l10000"). = 10

Columns("g:k").Style = "Comma"

Set rs = Nothing

Set cnn = Nothing

End Sub

4文档来源为:从网络收集整理.word版本可编辑.

注:Set cnn = New

With cnn

.Provider = ""

.Open mydata

End With

这段代码是建立与Access文件的连接。(access文件不用打开通过后台连接Access的数据)

SQL = "SELECT DISTINCT 材料出库表.工单号, 材料出库表.仓库, 材料出库表.领料部门, 材料出库表.物料类型," _

& " 材料出库表.物料名称, 材料出库表.单位,

Sum(材料出库表.实发数量) AS 实发数量之总计, Sum(材料出库表.金额)" _

& " AS 金额之总计, 材料出库表.领料用途 FROM 材料出库表 GROUP BY 材料出库表.领料部门, 材料出库表.仓库, 材料出库表.工单号, " _

& " 材料出库表.物料类型, 材料出库表.物料名称,材料出库表.单位, 材料出库表.领料用途"

这段代码是SQL查询命令,修改这段代码可将各种所需的表导出。

代码Range("d2").CopyFromRecordset rs是表导出的起始位置,Range("d2")就是以d2单元格开始如改5文档来源为:从网络收集整理.word版本可编辑.

Range(“a2”)则从a2单元格开始。

复杂的SQL查询语句可以在Access中创建查询表,做符合要求的查询表后再将查询语句复制贴到Excel的代码中的SQL=” ” 双引号中,但要注意的是SQL=之所以加双引号是因为SQL=后面是接字符串的,access的查询语句中包含引号要用字符串连接形式处理代码才能在Excel的VBA运行。

篇二:运用excel 导入导出access数据库

excel 导入导出access数据库(winform)

//从excel导入到数据库。

OleDbConnection conExcel = new

OleDbConnection();

try

{

OpenFileDialog openFile = new

OpenFileDialog();//打开文件对话框。

= ("Excel 文件(*.xls)|*.xls");//后缀名。

if (() == )

{

string filename = ;

int index = ("");//截取文件的名字

filename = (index + 1);

6文档来源为:从网络收集整理.word版本可编辑.

= "Provider=;Data Source=" + + "";

//将excel导入access

//distinct :删除excel重复的行.

//[excel名].[sheet名] 已有的excel的表要加$

//where not in : 插入不重复的记录。

string sql = "insert into 用户表 select distinct

* from [Excel ;database=" + filename + "].[用户表$]

where 记录编号not IN (select 记录编号 from 用户表)";

OleDbCommand com = new OleDbCommand(sql,

conExcel);

();

();

("导入数据成功","导入数据", , );

}

}

catch (Exception ex)

{

(());

}

finally

{

7文档来源为:从网络收集整理.word版本可编辑.

();

}

//导出到excel操作。

OleDbConnection conExcel = new OleDbConnection();

try

{

SaveFileDialog saveFile = new SaveFileDialog();

= ("Excel 文件(*.xls)|*.xls");//指定文件后缀名为Excel 文件。 if (() == )

{

string filename = ;

if ((filename))

{

(filename);//如果文件存在删除文件。

}

int index = ("");//获取最后一个的索引

filename = (index + 1);//获取excel名称(新建表的路径相对于SaveFileDialog的路径)

//select * into 建立 新的表。

//[[Excel ;database= excel名].[sheet名] 如果是新建sheet表不能加$,如果向sheet里插入数据要加$.

//sheet最多存储65535条数据。

8文档来源为:从网络收集整理.word版本可编辑.

string sql = "select top 65535 *

into[Excel ;database=" + filename + "].[用户表] from

用户表";

= "Provider=;Data Source=" + + "";//将数据库放到debug目录下。

OleDbCommand com = new OleDbCommand(sql,

conExcel);

();

();

("导出数据成功","导出数据", , );

}

}

catch (Exception ex)

{

(());

}

finally

{

();

}

使用Transact-SQL进行数据导入导出方法详解[转载]

本文讨论了如何通过Transact-SQL以及系统函数9文档来源为:从网络收集整理.word版本可编辑.

OPENDATASOURCE和OPENROWSET在同构和异构数据库之间进行数据的导入导出,并给出了详细的例子以供参考。

1. 在SQL Server数据库之间进行数据导入导出

(1).使用SELECT INTO导出数据

在SQL Server中使用最广泛的就是通过SELECT INTO语句导出数据,SELECT INTO语句同时具备

两个功能:

根据SELECT后跟的字段以及INTO后面跟的表名建立空表(如果SELECT后是*, 空表的结构和FROM所指的表的结构相同);

将SELECT查出的数据插入到这个空表中。在使用SELECT INTO语句时,INTO后跟的表必须在数据库不存在,否则出错,下面是一个使用SELECT INTO的例子。

假设有一个表table1,字段为f1(int)、f2(varchar(50))。 SELECT * INTO table2 FROM table1这条SQL语的在建立table2表后,将table1的数据全部插入到table1中的,还可以将*改为f1或f2以便向适当的字段中插入数据。

SELECT INTO不仅可以在同一个数据中建立表,也可以在不同的SQL Server数据库中建立表。

USE db1 SELECT * INTO FROM table1

以上语句在数据库db2中建立了一个所有者是dbo的10文档来源为:从网络收集整理.word版本可编辑.

表table2,在向db2建表时当前登录的用户必须有在db2建表的权限才能建立table2。 使用SELECT INTO要注意的一点是SELECT INTO不可以和COMPUTE一起使用,因为COMPUTE返回的是一组记录集,这将会引起二意性(即不知道根据哪个表建立空表)。

(2).使用INSERT INTO 和 UPDATE插入和更新数据

SELECT INTO只能将数据复制到一个空表中,而INSERT INTO可以将一个表或视图中的数据插入到另外一个表中。

INSERT INTO table1 SELECT * FROM table2 或 INSERT

INTO SELECT * FROM table2

但以上的INSERT INTO语句可能会产生一个主键冲突错误(如果table1中的某个字段是主键,恰巧table2中的这个字段有的值和table1的这个字段的值相同)。因此,上面的语句可以修改为 INSERT INTO table1 -- 假设字段f1为主键 SELECT * FROM table2 WHERE NOT EXISTS(SELECT

FROM table1 WHERE = )以上语句的功能是将table2中f1在table1中不存在的记录插入到table1中。

要想更新table1可以使用UPDATE语句 UPDATE

table1 SET =, = FROM table2 WHERE =将以上两条INSERT

INTO和UPDATE语句组合起来在一起运行,就可以实现记录在table1中不存在时插入,存在时更新的功能,但要注意要将UPDATE放在INSERT INTO前面,否则UPDATE更新的记11文档来源为:从网络收集整理.word版本可编辑.

录数将是table1和table2记录数的总和。

2. 使用OPENDATASOURCE和OPENROWSET在不同类型的数据库之间导入导出数据

在异构的数据库之间进行数据传输,可以使用SQL

Server提供的两个系统函数OPENDATASOURCE和OPENROWSET。

OPENDATASOURCE可以打开任何支持OLE DB的数据库,并且可以将OPENDATASOURCE做为SELECT、UPDATE、INSERT和DELETE后所跟的表名。

SELECT * FROM OPENDATASOURCE('SQLOLEDB', 'Data

Source=;User ID=sa;Password=test').

这条语句的功能是查询这台机器中SQL Server数据库pubs中的authors表。

从这条语句可以看出,OPENDATASOURCE有两个参数,第一个参数是provider_name,表示用于访问数据源的 OLE

DB 提供程序的 PROGID 的名称。provider_name 的数据类型为 char,没有默

认值。第二个参数是连接字符串,根据OLE DB Provider不同而不同(如果不清楚自己所使用的OLE DB Provider的连接字符串,可以使用delphi、visual studio等开发工具中的ADO控件自动生成相应的连接字符串)。

OPENROWSET函数和OPENDATASOURCE函数类似,只是12文档来源为:从网络收集整理.word版本可编辑.

它可以在打开数据库的同时对数据库中的表进行查询,如以下语句

OPENROWSET('', 'Driver=Microsoft Visual FoxPro

Driver; SourceDB=c:db; SourceType=DBF', 'SELECT *

FROM []')最后一个参数查询foxpro表,读者可以通过where条件对进行过滤。

如果将INSERT INTO、SELECT INTO和OPENDATASOURCE或OPENROWSET一起使用,就可以使SQL Server数据库和其它类型的数据库之间进行数据导入导出。

下面介绍如何使用这两个函数在SQL Server数据库和其它类型的数据库之间进行数据导入导出。

(1).SQL Server数据库和SQL Server数据库之间的数据导入导出。

导入数据

SELECT * INTO authors1 FROM

OPENDATASOURCE( 'SQLOLEDB', 'Data Source=;User

ID=sa;Password=abc' ).

导出数据

INSERT INTO OPENDATASOURCE( 'SQLOLEDB', 'Data

Source=;User ID=sa;Password=abc' ). select * from

在这条语句中OPENDATASOURCE(...)可以理解为SQL

Server的一个服务,.是这个服务管理的一个数据库的一个13文档来源为:从网络收集整理.word版本可编辑.

表authors。使用INSERT INTO时OPENDATASOURCE(...)后跟的表必须存在。 也可以将以上的OPENDATASOURCE换成

OPENROWSET INSERT INTO

OPENROWSET('SQLOLEDB','';'sa';'abc', 'select * from ')

SELECT * FROM 使用OPENROWSET要注意一点,'';'sa';'abc'中间是";",而不是","。OPENDATASOURCE和OPENROWSET都不接受参数变量。

(2). SQL Server数据库和Access数据库之间的数据导入导出。

导入数据

SELECT * INTO access FROM OPENDATASOURCE( '',

'Provider=;Data Source=c:;Persist Security

Info=False')table1 或者使用

OPENROWSET SELECT * FROM OPENROWSET('',

'c:';'admin';'','SELECT * FROM table1')

导出数据

INSERT INTO OPENDATASOURCE( '', 'Provider=;Data

Source=c:;Persist Security Info=False')table1 SELECT

* FROM access

打开access数据库的OLE DB Provider叫,需要注意的是操作非SQL

Server数据库在OPENDATASOURCE(...)后面引用数据库14文档来源为:从网络收集整理.word版本可编辑.

中的表时使用"...”,而不是“.”。

(3). SQL Server数据库和文本文件之间的数据导入导出。

导入数据

SELECT * INTO text1 FROM

OPENDATASOURCE('','Text;DATABASE=c:')[data#txt]导出数据 INSERT INTO

OPENDATASOURCE('','Text;DATABASE=c:')[data#txt]

SELECT * FROM text1

或者使用

OPENROWSET INSERT INTO

OPENROWSET('','Text;DATABASE=c:',

[data#txt]) SELECT * FROM text1

如果要插入部分字段,可使用

INSERT INTO OPENROWSET('','Text;DATABASE=c:',

'SELECT aa FROM [data#txt]') SELECT aa FROM text1这条SQL语句的功能是将c盘根目录的文件导入到text1表中,在这里文件名中的“.”要使用“#”代替。在向文本导出时,不仅文本文件要存在,而且第一行必须和要导出表的字段一至。

(4). SQL Server数据库和dbase数据库之间的数据导入导出。

15文档来源为:从网络收集整理.word版本可编辑.

导入数据

SELECT * INTO dbase FROM OPENROWSET('' , 'dBase

III;HDR=NO;IMEX=2;DATABASE=C:','SELECT * FROM []')

导出数据

INSERT INTO OPENROWSET('' , 'dBase

III;HDR=NO;IMEX=2;DATABASE=C:','SELECT * FROM []')

SELECT * FROM dbaseOPENROWSET(...)中的使用[...]括起来,是为了当dbf文件名有空格等字符时不会出错,如果没有这些特殊字符,可以将[...]去掉

(5). SQL Server数据库和foxpro数据库之间的数据导入导出。

导入数据

SELECT * INTO foxpro FROM OPENROWSET('',

'Driver=Microsoft Visual FoxPro Driver; SourceDB=c:;

SourceType=DBF', 'SELECT * FROM []')导出数据

INSERT INTO OPENROWSET('' , 'Driver=Microsoft

Visual FoxPro Driver; SourceDB=c:db;

SourceType=DBF','SELECT * FROM ') SELECT * FROM foxpro

在此处不能使用[...]括起来,否则出错(这是由driver决定的)。

(6). SQL Server数据库和excel文件之间的数据导入导出

16文档来源为:从网络收集整理.word版本可编辑.

导入数据

SELECT * INTO excel FROM OPENDATASOURCE('',

'Excel ;DATABASE=c:' )[Sheet1$] 导出数据

INSERT INTO OPENDATASOURCE('',

'Excel ;DATABASE=c:' )[Sheet1$] SELECT * FROM excel

在的Sheet1中必须有和excel表相对应的字段,否则会出错。

篇三:利用Access查询两个表中相同字段的方法

查询两个表中相同字段的方法 在办公的时候,我们可能需要做这样一件事情。就是有两个不同的excel表,需要把表1、表2中有共同字段的信息提取出来。但问题是,在excel里没有办法快速的得出想要的数据,难道真的要在excel中逐一查找,逐一复制粘贴?我们当然没有这么蠢。下面介绍一种方法,帮助大家快速解决这个问题。

要解决这个问题,我们要用到的工具就是access和一段SQL代码:

Select [t1].*,[t2].* from[t1]inner join[t2]

on[t1].f1=[t2].f2 (t1、t2分别代表表1、表2;f1、f2分别代表字段1、字段2) 下面我用一个实例演示一下:

打开access,新建一个access文件。

因为我们的数据是excel表,需要导入access中。因此,我们点击菜单栏中 文件?获取外部数据?导入 获得17文档来源为:从网络收集整理.word版本可编辑.

excel中数据。

导入

下一步

下一步

下一步

下一步

下一步

完成

同理,导入 表2。

下面开始查询具有相同字段的记录。示例的相同字段为“代码”

18文档来源为:从网络收集整理.word版本可编辑.


本文标签: 数据 导入 导出 材料 出库