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

上传人:b****1 文档编号:986892 上传时间:2023-04-30 格式:DOCX 页数:13 大小:20.19KB
下载 相关 举报
excel导入access不能找到表达式中引用的字段的解决方案.docx_第1页
第1页 / 共13页
excel导入access不能找到表达式中引用的字段的解决方案.docx_第2页
第2页 / 共13页
excel导入access不能找到表达式中引用的字段的解决方案.docx_第3页
第3页 / 共13页
excel导入access不能找到表达式中引用的字段的解决方案.docx_第4页
第4页 / 共13页
excel导入access不能找到表达式中引用的字段的解决方案.docx_第5页
第5页 / 共13页
excel导入access不能找到表达式中引用的字段的解决方案.docx_第6页
第6页 / 共13页
excel导入access不能找到表达式中引用的字段的解决方案.docx_第7页
第7页 / 共13页
excel导入access不能找到表达式中引用的字段的解决方案.docx_第8页
第8页 / 共13页
excel导入access不能找到表达式中引用的字段的解决方案.docx_第9页
第9页 / 共13页
excel导入access不能找到表达式中引用的字段的解决方案.docx_第10页
第10页 / 共13页
excel导入access不能找到表达式中引用的字段的解决方案.docx_第11页
第11页 / 共13页
excel导入access不能找到表达式中引用的字段的解决方案.docx_第12页
第12页 / 共13页
excel导入access不能找到表达式中引用的字段的解决方案.docx_第13页
第13页 / 共13页
亲,该文档总共13页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

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

《excel导入access不能找到表达式中引用的字段的解决方案.docx》由会员分享,可在线阅读,更多相关《excel导入access不能找到表达式中引用的字段的解决方案.docx(13页珍藏版)》请在冰点文库上搜索。

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

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中逐一查找,逐一复制粘贴?

我们当然没有这么蠢。

下面介绍一

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 经管营销 > 经济市场

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2