
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表处理等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)