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版本可编辑.
版权声明:本文标题:excel,导入access,不能找到表达式中引用的字段的解决方案 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.roclinux.cn/p/1708776984a531192.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论