ACCESS数据库中怎样获取某一行中所有字段的值叠加在一起

ACCESS数据库中怎样获取某一行中所有字段的值叠加在一起,第1张

Access数据库中是用VBA来编写自定义的函数,需要通过Dataobject来调用SQL语句才能使某一行中所有字段的值叠加在一起。

Access中是用VBA来编写自定义的函数,需要通过Dataobject来调用SQL语句。Access中用VBA编写的函数可以用在Access查询中。

我在Access中的实现方法如下:

新建一个Module,在里面定义自己的函数。函数定义如下:

FunctionAddString(partstringAsString)AsString

'声明查询语句字符串和字段相加的字符串变量

DimoriginalStr,queryStrAsString

'声明ADO的一个记录对象,注意用New来声明并生成实例

DimmyRecordsetAsNewADODBRecordset

originalStr=""

'查询语句字符串是通过连接零件编号生成的,注意SQL语句需要引号

queryStr="selectfrommaterialwhereparts="""+partstring+""""

myRecordsetOpenqueryStr,CurrentProjectConnection

DoWhileNotmyRecordsetEOF

originalStr=originalStr+myRecordset("module")+","

myRecordsetMoveNext

Loop

'VBA语法,把返回值赋给函数名

AddString=originalStr

EndFunction

看到一个网友解决同样问题的做法,他不是用ADO对象,他用了下面一句:

SetFF=CurrentDbOpenRecordset(queryStr)

他实际上是隐性用了DAO对象。不过,如果你在VBA中显性声明DAO对象的话,有可能会碰到编译错误,这是因为AccessVBA默认没有包含DAO库的引用。

函数定义好后,就可以用在查询里了,SQL视图下,我的例子的SQL语句如下:

SELECTAddString(parts)ASAllMod,materialparts

FROMmaterial

GROUPBYmaterialparts

ORDERBYmaterialparts;

MSSQLServer中的例子就很多啦,也是自定义一个函数,然后把自定义的函数用在SQL语句中,我把例子也记下来吧。

createfunctionfn_AddString(@partnumbervarchar(50))

returnsnvarchar(1000)

as

begin

declare@snvarchar(1000)

set@s=''

select@s=@s+module+','frommaterialwhereparts=@partnumber

return@s

end

go

在SQL语句中调用该函数

selectparts,dbofn_AddString(parts)asAllModfrommaterial

groupbyparts

————————————————

版权声明:本文为CSDN博主「gracexu」的原创文章,遵循CC40BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:>

这里提供一个使用ODBC数据源链接表的傻瓜解决方案

首先创建一个ODBC数据源(连接本地或远程均可以),方法:

打开客户端MDB数据库,选择“表”对象,右边空白处右击于d出的菜单,选择“链接表”,在打开的“链接”对话框的文件类型下拉列表选择“ODBC 数据库”

于打开的“选择数据源”对话框,点击“新建”按钮

于“创建数据源”对话框,选择“SQL SERVER”点击下一步

点击下一步

点击下一步

点击完成,于d出的“创建到SQL Server的新数据源"对话框,填入服务器IP地址,点击下一步

点击下一步

点击下一步

点击完成

于d出的“ODBC Microsoft SQL Server安装”对话框点击确定

新创建的ODBC数据文件名称是“mySqlsrv”我将它保存在“我的文档”下的“我的数据源”夹,它也可以保存到其它位置。

创建保存好ODBC数据文件后,请关闭之前打开的“链接”对话框,再重新打开“链接”对话框

这次可以选择ODBC数据文件“mySqlsrv”了

在打开的“链接”对话框的文件类型下拉列表选择“ODBC 数据库”

在“选择数据源对话框”选择“mySqlsrv”点击确定

系统会再次要求输入用户名和密码,输入相关信息后将d出“链接表”对话框

此时选择需要链接的SQLSERVER表,点击确定即可。提示:为了避免以后每次都要输入用户名和密码的麻烦,记得确认前勾选“保存密码”

从上图可以看见,远程的SQL数据表已经链接到客户端的mdb数据库里了,现在客户端可以像 *** 作本地ACCESS表一样编辑远程SQLSERVER表。

此时“将客户端上access中的数据读到sqlserver中”就变得非常容易。在ACCESS里 *** 作链接表和本地表是没有区别的,可通过手动或运行SQL语句和窗体编辑等方式,直接将本地数据写入本地或远程SQL表里。

格式不对会导致数据乱码

连接超时会显示数据删除提示

建议你使用导入导出 *** 作 或者直接用SQL 分析,什么叫完善数据看不懂,你用STUDIO给他创建查询分析,也可以给他写一个窗体、报表。可以用向导执行简单的 *** 作,要写特定的程序C#比较与C是有个命名空间问题

所谓的数据传输,其实是指SQLServer访问Access、Excel间的数据。

为什么要考虑到这个问题呢

由于历史的原因,客户以前的数据很多都是在存入在文本数据库中,如Acess、Excel、FoXPro。现在系统升级及数据库服务器如SQLServer、Oracle后,经常需要访问文本数据库中的数据,所以就会产生这样的需求。前段时间出差的项目,就是面临这样的一个问题:SQLServer和VFP之间的数据交换。

要完成标题的需要,在SQLServer中是一件非常简单的事情。 通常的可以有3种方式:1、DTS工具 2、BCP 3、分布式查询 DTS就不需要说了,因为那是图形化 *** 作界面,很容易上手。

这里主要讲下后面两们,分别以查、增、删、改作为简单的例子:

下面废话就不说了,直接以T-SQL的形式表现出来。

一、SQLServer和Access

1、查询Access中数据的方法:

select from OpenRowSet('microsoftjetoledb40',';database=c:\db2mdb','select from serv_user')

select from OpenDataSource('MicrosoftJetOLEDB40','Data Source="c:\DB2mdb";User ID=Admin;PassWord=')serv_user

2、从SQLServer向Access写数据:

insert into OpenRowSet('microsoftjetoledb40',';database=c:\db2mdb','select from Accee表')

select from SQLServer表

或用BCP

masterxp_cmdshell'bcp "serv-htjsdboserv_user" out "c:\db3mdb" -c -q -S"" -U"sa" -P"sa"'

上面的区别主要是:OpenRowSet需要mdb和表存在,BCP会在不存在的时候生成该mdb

3、从Access向SQLServer写数据:有了上面的基础,这个就很简单了

insert into SQLServer表 select from

OpenRowSet('microsoftjetoledb40',';database=c:\db2mdb','select from Accee表')

或用BCP

masterxp_cmdshell'bcp "serv-htjsdboserv_user" in "c:\db3mdb" -c -q -S"" -U"sa" -P"sa"'

4、删除Access数据:

delete from OpenRowSet('microsoftjetoledb40',';database=c:\db2mdb','select from serv_user')

where lock=0

5、修改Access数据:

update OpenRowSet('microsoftjetoledb40',';database=c:\db2mdb','select from serv_user')

set lock=1

SQLServer和Access大致就这么多。

二、SQLServer和Excel

1、向Excel查询

select from OpenRowSet('microsoftjetoledb40','Excel 80;HDR=yes;database=c:\book1xls;','select from [Sheet1$]') where c like '%f%'

select from

OPENROWSET('MICROSOFTJETOLEDB40'

,'Excel 50;HDR=YES;IMEX=2;DATABASE=c:\book1xls',[sheet1$])

1)hdr=yes时可以把xls的第1行作为字段看待,如第1个中hdr=no的话,where时就会报错

2)[]和美圆$必须要,否则M$可不认这个账

2、修改Execl

update OpenRowSet('microsoftjetoledb40','Excel 80;hdr=yes;database=c:\book1xls;','select from [Sheet1$]')

set a='erquan' where c like '%f%'

3、导入导出

insert into OpenRowSet('microsoftjetoledb40','Excel 80;hdr=yes;database=c:\book1xls;','select from [Sheet2$]')(id,name)

select id,name from serv_user

或BCP

masterxp_cmdshell'bcp "serv-htjsdboserv_user" out "c:\book2xls" -c -q -S"" -U"sa" -P"sa"'

从Excel向SQLServer导入:

select into serv_user_bak

from OpenRowSet('microsoftjetoledb40','Excel 80;HDR=yes;database=c:\book1xls;','select from [Sheet1$]')

如果表serv_user_bak不存在,则创建有关BCP和分布式查询的详细解答,就查SQLServer自带的帮助吧。 SQLServer和txt文件、Html文件、VFP文件的数据交换都显得非常容易了。。。。 其实这些内容在帮助里都有,偶只不过是总结了一下

主要是创建链接服务器方式:

EXEC sp_addlinkedserver 

   'slk_access', 

   'OLE DB Provider for Jet',

   'MicrosoftJetOLEDB40', 

   'D:\abcmdb'

GO

SELECT

FROM slk_accessCust;

Cust 是access中的表名

以上就是关于ACCESS数据库中怎样获取某一行中所有字段的值叠加在一起全部的内容,包括:ACCESS数据库中怎样获取某一行中所有字段的值叠加在一起、sqlserver2008r2读取远程access数据库、关于ACCESS和SQLSERVER表处理等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9620971.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-30
下一篇2023-04-30

发表评论

登录后才能评论

评论列表(0条)

    保存