excel导入access不能找到表达式中引用的字段的解决方案.docx
- 文档编号:23732265
- 上传时间:2023-05-20
- 格式:DOCX
- 页数:13
- 大小:20.19KB
excel导入access不能找到表达式中引用的字段的解决方案.docx
《excel导入access不能找到表达式中引用的字段的解决方案.docx》由会员分享,可在线阅读,更多相关《excel导入access不能找到表达式中引用的字段的解决方案.docx(13页珍藏版)》请在冰豆网上搜索。
excel导入access不能找到表达式中引用的字段的解决方案
excel,导入access,不能找到表达式中引用的字段的解决方案
篇一:
Access与Excel结合使用常用代码
Excel使用灵活但是处理数据量小(数据一多就会卡)Access能数据量大(相对于Excel)但是使用不灵活。
Excel与Access结合使用能相互弥补不足。
如用Access用为后台数据库对表进行筛选、汇总等一系列处理后再以Excel为前台导出数据,会比直接用Excel表刷选、汇总一个上万行的数据表快的多。
以下是几种access与Excel结合使用常用方法与代码。
1.Access导入表格代码
Sub导入材料出库表()
False'取消警告
"DELETEFROM材料出库表"'删除材料出库表
acImport,8,"材料出库表",_
“F:
\材料出库明细.xls",_
True,"sheet1!
a2:
agXX0"'导入材料出库明细表中的sheet1表a2:
agXX0区域的数据True
EndSub'恢复警告
注:
acImport,8,"材料出库表",“F:
\材料出库明细.xls",True,"sheet1!
a2:
agXX0"此句代码中的"材料出库表"是表明导入到Access中的材料出库表中,参数true表明以导入数据的第一行作为列字段如将true改false数据导入access中后表的列字段为“F1、F2、F3.....”。
2.创建Access窗体与按钮
1.创建窗体
点创建-窗体设计即调出窗体设计窗体界面。
2.创建按钮
点设计-按扭即可用鼠标在窗体中插入按钮。
按钮做好后会自动弹出“命令按钮向导”直接点取消。
右击按钮-事件生成器-代码生成器即进入此按钮的代码编辑区。
将光标放到PrivateSubCommand3_Click()下面粘贴以下代码
False
"DELETEFROM材料出库表"
acImport,8,"材料出库表",_
“F:
\材料出库明细.xls",_
True,"sheet1!
a2:
agXX0"
True
关闭代码界面回到窗体设计界面,点右下角窗体视图,
再点刚做好的按钮,“\\\成本\ERP导出表\导入access\材料出库明细.xls”的数据就会导入到access中的材料出库表中,
将不同的代代码放入按钮中就能实现不同功能的按钮。
3.Access导出到Excel表
Access导出Excel表方法很多(最简单的方法直接在Access点导出)这里介绍以Excel作为前台Access作为后台取数据的方法。
新建一个Excel打开Alt+F11打开VBE窗口
点右键-插入-模块
这时会弹出模块1的界面并且光标在此界面闪。
将以下代码贴入此模块,按F5即可运行此模块就可从Access导出数据(注运行时出现警告“用户类型未定义”这是没有对MicrosoftActiveXDataObjectXLibrary引用点工具-引用将MicrosoftActiveXDataObjectX打下勾即可)
Sub导出材料汇总()
Dimmydata$,SQL$,hh%
DimrsAs
DimcnnAs
Range("d2:
l10000").Clear
mydata="\\\成本\ERP导出表\基础数据.accdb"
Setcnn=New
Withcnn
.Provider=""
.Openmydata
EndWith
SQL="SELECTDISTINCT材料出库表.工单号,材料出库表.仓库,材料出库表.领料部门,材料出库表.物料类型,"_
&"材料出库表.物料名称,材料出库表.单位,Sum(材料出库表.实发数量)AS实发数量之总计,Sum(材料出库表.金额)"_
&"AS金额之总计,材料出库表.领料用途FROM材料出库表GROUPBY材料出库表.领料部门,材料出库表.仓库,材料出库表.工单号,"_
&"材料出库表.物料类型,材料出库表.物料名称,材料出库表.单位,材料出库表.领料用途"
Setrs=(SQL)
WithRange(Cells(1,1),Cells(1,))
.HorizontalAlignment=xlCenter
EndWith
Range("d2").CopyFromRecordsetrs
Range("A1:
l10000").=10
Columns("g:
k").Style="Comma"
Setrs=Nothing
Setcnn=Nothing
EndSub
注:
Setcnn=New
Withcnn
.Provider=""
.Openmydata
EndWith
这段代码是建立与Access文件的连接。
(access文件不用打开通过后台连接Access的数据)
SQL="SELECTDISTINCT材料出库表.工单号,材料出库表.仓库,材料出库表.领料部门,材料出库表.物料类型,"_
&"材料出库表.物料名称,材料出库表.单位,Sum(材料出库表.实发数量)AS实发数量之总计,Sum(材料出库表.金额)"_
&"AS金额之总计,材料出库表.领料用途FROM材料出库表GROUPBY材料出库表.领料部门,材料出库表.仓库,材料出库表.工单号,"_
&"材料出库表.物料类型,材料出库表.物料名称,材料出库表.单位,材料出库表.领料用途"
这段代码是SQL查询命令,修改这段代码可将各种所需的表导出。
代码Range("d2").CopyFromRecordsetrs是表导出的起始位置,Range("d2")就是以d2单元格开始如改Range(“a2”)则从a2单元格开始。
复杂的SQL查询语句可以在Access中创建查询表,做符合要求的查询表后再将查询语句复制贴到Excel的代码中的SQL=””双引号中,但要注意的是SQL=之所以加双引号是因为SQL=后面是接字符串的,access的查询语句中包含引号要用字符串连接形式处理代码才能在Excel的VBA运行。
篇二:
运用excel导入导出access数据库
excel导入导出access数据库(winform)
//从excel导入到数据库。
OleDbConnectionconExcel=newOleDbConnection();
try
{
OpenFileDialogopenFile=newOpenFileDialog();//打开文件对话框。
=("Excel文件(*.xls)|*.xls");//后缀名。
if(()==)
{
stringfilename=;
intindex=("\\");//截取文件的名字
filename=(index+1);
="Provider=;DataSource="++"\\";
//将excel导入access
//distinct:
删除excel重复的行.
//[excel名].[sheet名]已有的excel的表要加$
//wherenotin:
插入不重复的记录。
stringsql="insertinto用户表selectdistinct*from[Excel;database="+filename+"].[用户表$]where记录编号notIN(select记录编号from用户表)";
OleDbCommandcom=newOleDbCommand(sql,conExcel);
();
();
("导入数据成功","导入数据",,);
}
}
catch(Exceptionex)
{
(());
}
finally
{
();
}
//导出到excel操作。
OleDbConnectionconExcel=newOleDbConnection();
try
{
SaveFileDialogsaveFile=newSaveFileDialog();
=("Excel文件(*.xls)|*.xls");//指定文件后缀名为Excel文件。
if(()==)
{
stringfilename=;
if((filename))
{
(filename);//如果文件存在删除文件。
}
intindex=("\\");//获取最后一个\的索引
filename=(index+1);//获取excel名称(新建表的路径相对于SaveFileDialog的路径)
//select*into建立新的表。
//[[Excel;database=excel名].[sheet名]如果是新建sheet表不能加$,如果向sheet里插入数据要加$.
//sheet最多存储65535条数据。
stringsql="selecttop65535*into[Excel;database="+filename+"].[用户表]from用户表";
="Provider=;DataSource="++"\\";//将数据库放到debug目录下。
OleDbCommandcom=newOleDbCommand(sql,conExcel);
();
();
("导出数据成功","导出数据",,);
}
}
catch(Exceptionex)
{
(());
}
finally
{
();
}
使用Transact-SQL进行数据导入导出方法详解[转载]
本文讨论了如何通过Transact-SQL以及系统函数OPENDATASOURCE和OPENROWSET在同构和异构数据库之间进行数据的导入导出,并给出了详细的例子以供参考。
1.在SQLServer数据库之间进行数据导入导出
(1).使用SELECTINTO导出数据
在SQLServer中使用最广泛的就是通过SELECTINTO语句导出数据,SELECTINTO语句同时具备
两个功能:
根据SELECT后跟的字段以及INTO后面跟的表名建立空表(如果SELECT后是*,空表的结构和FROM所指的表的结构相同);
将SELECT查出的数据插入到这个空表中。
在使用SELECTINTO语句时,INTO后跟的表必须在数据库不存在,否则出错,下面是一个使用SELECTINTO的例子。
假设有一个表table1,字段为f1(int)、f2(varchar(50))。
SELECT*INTOtable2FROMtable1这条SQL语的在建立table2表后,将table1的数据全部插入到table1中的,还可以将*改为f1或f2以便向适当的字段中插入数据。
SELECTINTO不仅可以在同一个数据中建立表,也可以在不同的SQLServer数据库中建立表。
USEdb1SELECT*INTOFROMtable1
以上语句在数据库db2中建立了一个所有者是dbo的表table2,在向db2建表时当前登录的用户必须有在db2建表的权限才能建立table2。
使用SELECTINTO要注意的一点是SELECTINTO不可以和COMPUTE一起使用,因为COMPUTE返回的是一组记录集,这将会引起二意性(即不知道根据哪个表建立空表)。
(2).使用INSERTINTO和UPDATE插入和更新数据SELECTINTO只能将数据复制到一个空表中,而INSERTINTO可以将一个表或视图中的数据插入到另外一个表中。
INSERTINTOtable1SELECT*FROMtable2或INSERTINTOSELECT*FROMtable2
但以上的INSERTINTO语句可能会产生一个主键冲突错误(如果table1中的某个字段是主键,恰巧table2中的这个字段有的值和table1的这个字段的值相同)。
因此,上面的语句可以修改为INSERTINTOtable1--假设字段f1为主键SELECT*FROMtable2WHERENOTEXISTS(SELECTFROMtable1WHERE=)以上语句的功能是将table2中f1在table1中不存在的记录插入到table1中。
要想更新table1可以使用UPDATE语句UPDATEtable1SET=,=FROMtable2WHERE=将以上两条INSERTINTO和UPDATE语句组合起来在一起运行,就可以实现记录在table1中不存在时插入,存在时更新的功能,但要注意要将UPDATE放在INSERTINTO前面,否则UPDATE更新的记录数将是table1和table2记录数的总和。
2.使用OPENDATASOURCE和OPENROWSET在不同类型的数据库之间导入导出数据
在异构的数据库之间进行数据传输,可以使用SQLServer提供的两个系统函数OPENDATASOURCE和OPENROWSET。
OPENDATASOURCE可以打开任何支持OLEDB的数据库,并且可以将OPENDATASOURCE做为SELECT、UPDATE、INSERT和DELETE后所跟的表名。
如
SELECT*FROMOPENDATASOURCE('SQLOLEDB','DataSource=;UserID=sa;Password=test').
这条语句的功能是查询这台机器中SQLServer数据库pubs中的authors表。
从这条语句可以看出,OPENDATASOURCE有两个参数,第一个参数是provider_name,表示用于访问数据源的OLEDB提供程序的PROGID的名称。
provider_name的数据类型为char,没有默
认值。
第二个参数是连接字符串,根据OLEDBProvider不同而不同(如果不清楚自己所使用的OLEDBProvider的连接字符串,可以使用delphi、visualstudio等开发工具中的ADO控件自动生成相应的连接字符串)。
OPENROWSET函数和OPENDATASOURCE函数类似,只是它可以在打开数据库的同时对数据库中的表进行查询,如以下语句
OPENROWSET('','Driver=MicrosoftVisualFoxProDriver;SourceDB=c:
\db;SourceType=DBF','SELECT*FROM[]')最后一个参数查询foxpro表,读者可以通过where条件对进行过滤。
如果将INSERTINTO、SELECTINTO和OPENDATASOURCE或OPENROWSET一起使用,就可以使SQLServer数据库和其它类型的数据库之间进行数据导入导出。
下面介绍如何使用这两个函数在SQLServer数据库和其它类型的数据库之间进行数据导入导出。
(1).SQLServer数据库和SQLServer数据库之间的数据导入导出。
导入数据
SELECT*INTOauthors1FROMOPENDATASOURCE('SQLOLEDB','DataSource=;UserID=sa;Password=abc').
导出数据
INSERTINTOOPENDATASOURCE('SQLOLEDB','DataSource=;UserID=sa;Password=abc').select*from
在这条语句中OPENDATASOURCE(...)可以理解为SQLServer的一个服务,.是这个服务管理的一个数据库的一个表authors。
使用INSERTINTO时OPENDATASOURCE(...)后跟的表必须存在。
也可以将以上的OPENDATASOURCE换成
OPENROWSETINSERTINTOOPENROWSET('SQLOLEDB','';'sa';'abc','select*from')SELECT*FROM使用OPENROWSET要注意一点,'';'sa';'abc'中间是";",而不是","。
OPENDATASOURCE和OPENROWSET都不接受参数变量。
(2).SQLServer数据库和Access数据库之间的数据导入导出。
导入数据
SELECT*INTOaccessFROMOPENDATASOURCE('','Provider=;DataSource=c:
\;PersistSecurityInfo=False')table1或者使用
OPENROWSETSELECT*FROMOPENROWSET('','c:
\';'admin';'','SELECT*FROMtable1')
导出数据
INSERTINTOOPENDATASOURCE('','Provider=;DataSource=c:
\;PersistSecurityInfo=False')table1SELECT*FROMaccess
打开access数据库的OLEDBProvider叫,需要注意的是操作非SQL
Server数据库在OPENDATASOURCE(...)后面引用数据库中的表时使用"...”,而不是“.”。
(3).SQLServer数据库和文本文件之间的数据导入导出。
导入数据
SELECT*INTOtext1FROMOPENDATASOURCE('','Text;DATABASE=c:
\')[data#txt]导出数据INSERTINTOOPENDATASOURCE('','Text;DATABASE=c:
\')[data#txt]SELECT*FROMtext1
或者使用
OPENROWSETINSERTINTOOPENROWSET('','Text;DATABASE=c:
\',
[data#txt])SELECT*FROMtext1
如果要插入部分字段,可使用
INSERTINTOOPENROWSET('','Text;DATABASE=c:
\','SELECTaaFROM[data#txt]')SELECTaaFROMtext1这条SQL语句的功能是将c盘根目录的文件导入到text1表中,在这里文件名中的“.”要使用“#”代替。
在向文本导出时,不仅文本文件要存在,而且第一行必须和要导出表的字段一至。
(4).SQLServer数据库和dbase数据库之间的数据导入导出。
导入数据
SELECT*INTOdbaseFROMOPENROWSET('','dBaseIII;HDR=NO;IMEX=2;DATABASE=C:
\','SELECT*FROM[]')
导出数据
INSERTINTOOPENROWSET('','dBaseIII;HDR=NO;IMEX=2;DATABASE=C:
\','SELECT*FROM[]')SELECT*FROMdbaseOPENROWSET(...)中的使用[...]括起来,是为了当dbf文件名有空格等字符时不会出错,如果没有这些特殊字符,可以将[...]去掉
(5).SQLServer数据库和foxpro数据库之间的数据导入导出。
导入数据
SELECT*INTOfoxproFROMOPENROWSET('','Driver=MicrosoftVisualFoxProDriver;SourceDB=c:
\;SourceType=DBF','SELECT*FROM[]')导出数据
INSERTINTOOPENROWSET('','Driver=MicrosoftVisualFoxProDriver;SourceDB=c:
\db;SourceType=DBF','SELECT*FROM')SELECT*FROMfoxpro
在此处不能使用[...]括起来,否则出错(这是由driver决定的)。
(6).SQLServer数据库和excel文件之间的数据导入导出
导入数据
SELECT*INTOexcelFROMOPENDATASOURCE('','Excel;DATABASE=c:
\')[Sheet1$]导出数据
INSERTINTOOPENDATASOURCE('','Excel;DATABASE=c:
\')[Sheet1$]SELECT*FROMexcel
在的Sheet1中必须有和excel表相对应的字段,否则会出错。
篇三:
利用Access查询两个表中相同字段的方法
查询两个表中相同字段的方法在办公的时候,我们可能需要做这样一件事情。
就是有两个不同的excel表,需要把表1、表2中有共同字段的信息提取出来。
但问题是,在excel里没有办法快速的得出想要的数据,难道真的要在excel中逐一查找,逐一复制粘贴?
我们当然没有这么蠢。
下面介绍一
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- excel 导入 access 不能 找到 表达式 引用 字段 解决方案