使用opendatasource从远程数据库SQLserver导出数据到本地Access问题

rjs0212 2016-12-27 09:53:29
有没有大神帮忙解决这个问题:

使用opendatasource从远程数据库SQLserver导出数据到本地Access时提示,不是一个有效路径,
代码段如下:

strcommand.Format(_T("insert into OpenDataSource( 'Microsoft.Jet.OLEDB.4.0','Data Source=%s;User ID=Admin;Password=')...%s (%s) select %s from %s"),m_strAccessPath,VIEW_DATA,m_strDataColumnWithOutID,m_strDataColumnWithOutID,VIEW_DATA);

第一个%s为路径本地电脑D盘下路径,如图所示的路径,后面%s依次为远程数据库SQLServer2000表名,字段集,本地Access字段集,表名
...全文
389 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
Tiger_Zhao 2017-01-06
  • 打赏
  • 举报
回复
本地直接写csv文件。
Access/Excel可以从csv中一次性导入。
rjs0212 2017-01-06
  • 打赏
  • 举报
回复
有一个问题就是当数据量比较大时,导出数据会比较慢
rjs0212 2017-01-04
  • 打赏
  • 举报
回复
感谢各位的解答,还要感谢另外两个博主jiyuanjie和spoonyman ,参照他们给出的提示和例子,实现了从远程数据库SQL导出数据到本Access的功能,

//首先要定义两个连接对象和记录集
_ConnectionPtr   m_pConnection_sql; // sql数据库
_ConnectionPtr   m_pConnection_access; // access数据库
_RecordsetPtr    m_pRecordset_sql; // sql记录集
_RecordsetPtr    m_pRecordset_access; // access记录集
HRESULT hr;
_variant_t vValue;
//连接Access数据库
//if(m_pConnection_access->State)
//	m_pConnection_access->Close(); ///如果已经打开了连接则关闭它
try
{
	hr=m_pConnection_access.CreateInstance("ADODB.Connection");//创建Connection对象
	if (SUCCEEDED(hr))
            {
	        hr=m_pConnection_access->Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\\Test.mdb","","",adModeUnknown);//连接SQL只需修改语句,将m_pConnection_access换成m_pConnection_sql,具体怎么连接就不贴出来了,网上很多
	    }
} 
catch (_com_error e)//捕捉异常
{
	CString errormessage;
	errormessage.Format(_T("连接数据库失败!\r\n错误信息:%s"),e.ErrorMessage());
	AfxMessageBox(errormessage);//显示错误信息
}
//注意连接完sql数据库后还要使用“USE 数据库名” 指明具体是哪个数据库
//获取sql记录集
//创建记录集对象
m_pRecordset_sql.CreateInstance(__uuidof(Recordset));
 //取得表中的记录
m_pRecordset_sql->Open(bstrSQL,
	                        m_pConnection_sql.GetInterfacePtr(),
				adOpenDynamic,
				adLockOptimistic,
				adCmdText);
//获取access记录集
m_pRecordset_access.CreateInstance(__uuidof(Recordset));
//取得表中的记录
m_pRecordset_access->Open(bstrSQL,
				m_pConnection_access.GetInterfacePtr(),
				adOpenDynamic,
				adLockOptimistic,
				adCmdText);
try
	{
		//插入SQL的记录集到Access
		while (!m_pRecordset_sql->adoEOF)
		{
			m_pRecordset_access->AddNew();
			for (int i=0;i<m_pRecordset_sql->Fields->Count;i++)
			{
				vValue=m_pRecordset_sql->GetCollect(_variant_t((long)i));
				m_pRecordset_access->PutCollect(_variant_t((long)i),vValue);
			}
			m_pRecordset_access->Update();
			m_pRecordset_sql->MoveNext();
		}
		//关闭记录集和链接
		if(m_pRecordset_sql!=NULL)
			m_pRecordset_sql->Close();
		if(m_pConnection_sql!=NULL)
			m_pConnection_sql->Close();
		if(m_pRecordset_access!=NULL)
			m_pRecordset_access->Close();
		if(m_pConnection_access!=NULL)
			m_pConnection_access->Close();
	}
	catch(_com_error e)///捕捉异常
	{
		CATCH_ERROR;
		return false;
	}

Tiger_Zhao 2017-01-04
  • 打赏
  • 举报
回复
程序写入本地Excel!
rjs0212 2017-01-03
  • 打赏
  • 举报
回复
引用 8 楼 Tiger_Zhao 的回复:
可以。 为什么不直接写入Excel?
既然本地路径在服务器上不能识别,那导出数据到本地excel应该也会涉及到路径问题,不过没有试过, 最后根据别人的提示使用记录集的方式实现了,晚点整理后分享出来
Tiger_Zhao 2017-01-03
  • 打赏
  • 举报
回复
可以。
为什么不直接写入Excel?
rjs0212 2017-01-03
  • 打赏
  • 举报
回复
引用 6 楼 Tiger_Zhao 的回复:
方案一(仅适合局域网,而且我不确定 Access 是否支持网络路径的方式): 你把 mdb 所在目录共享,m_strAccessPath 用共享路径的方式: \\你的机器名\共享名称\xxx.mdb 方案二: 先导出到服务器自己的目录下,并且开通 ftp 服务供客户端下载。
软件是要实现导出数据库里的数据到Excel的功能,首先是导出道本地Access,再导出到Excel, 方便客户使用,不能要求客户再去设置成共享路径, 想到可以同时定义两个_ConnectionPtr连接远程SQL和本地Access,获取SQL的记录集_RecordsetPtr后再插入到Access中去, 不知能否实现?
Tiger_Zhao 2016-12-30
  • 打赏
  • 举报
回复
方案一(仅适合局域网,而且我不确定 Access 是否支持网络路径的方式):
你把 mdb 所在目录共享,m_strAccessPath 用共享路径的方式: \\你的机器名\共享名称\xxx.mdb

方案二:
先导出到服务器自己的目录下,并且开通 ftp 服务供客户端下载。
rjs0212 2016-12-30
  • 打赏
  • 举报
回复
那有没有实现的方法呢?
Tiger_Zhao 2016-12-29
  • 打赏
  • 举报
回复
SQL 是在服务器上执行的,里面的路径都必须是服务器上的路径。
简直就像你给千里外的朋友打电话“车钥匙就在我手上,你马上拿走”一样
rjs0212 2016-12-29
  • 打赏
  • 举报
回复
没有人知道吗
rjs0212 2016-12-27
  • 打赏
  • 举报
回复
语句执行应该没问题,我在远程数据库的电脑上建一个相同的路径,就没有错误了,但是会将数据导入到了远程电脑的路径下,我的目的是导出到本地Access
LongRui888 2016-12-27
  • 打赏
  • 举报
回复
你把这个insert into语句单独提出来,然后在sql server中运行一下,看看是否也报错呢
Office数据升迁 Access 导入 SQL Server,相信大家都知道 SQL-Server 数据导入导出功能吧,但当你装了精简版的SQL-Server这个功能就会没有了,也就是无法实现数据导入导出,那么怎么办 写SQL语句? Insert into Tables SELECT * FROM OPENDATASOURCE('Microsoft.Jet.OLEDB.4.0','Data Source="E:\Access.mdb";') 显然在正常情况下这可以 但如果你看见提示 Msg 15281, Level 16, State 1, Line 1 SQL Server blocked access to STATEMENT 'OpenRowset/OpenDatasource' of component 'Ad Hoc Distributed Queries' because this component is turned off as part of the security configuration for this server. A system administrator can enable the use of 'Ad Hoc Distributed Queries' by using sp_configure. For more information about enabling 'Ad Hoc Distributed Queries', see "Surface Area Configuration" in SQL Server Books Online. 这时怎么办? EXEC sp_configure 'show advanced options', 1 EXEC sp_configure 'Ad Hoc Distributed Queries', 1 结果你又被提示: Msg 15123, Level 16, State 1, Procedure sp_configure, Line 51 The configuration option 'Ad Hoc Distributed Queries' does not exist, or it may be an advanced option. 很明确这条路是走不通了,因为精简版的SQL-Server没这功能。所以你就要用的我的资源了。这里主要是通过Access自带功能(你要安装这个,暂时叫插件吧)完成数据转换。 步骤: 1.打开Access 点击菜单栏中的--》工具 2.打开 工具栏下的--》数据实用工具 3.选择 升迁向导(和SQL导入那里一样了 相当于数据导出 ) 选择你的 SQL-Server 服务器地址,登陆账号和密码,同时填写 生成后的SQL-Server数据名称,就这样简单完成了。Access到SQL-Server的转换。 Ps:当然你装的是完整版的SQL-Server, 直接可以导入导出(语句也可以的),不用这样麻烦,但如果你装的就是SQL-Server精简版那么这或许是最后的方法,同时也是对Access转SQL-Server有一个新的认识。 文件包: PRO11.MSI,A4561414.CAB,CR561401.CAB,MA561416.CAB,PA561401.CAB,SKU011.CAB,YI561401.CAB,YS561409.CAB,ZA561401.CAB, ZD561403.CAB,ZU561415.CAB,ZZ561401.CAB(office2003的) 我也是因为遇见这问题,才按这个方法成功的。希望对大家都帮助
中文版SQL Server 2000开发与管理应用实例-目录: 第 1 章 安装和配置SQL Server 1 1.1 SQL Server的版本和版本选择 1 1.2 安装SQL Server的常见问题 3 1.3 如何理解实例 5 1.4 如何实现无值守安装 5 1.5 Desktop Engine 9 1.5.1 MSDE 2000概述 9 1.5.2 获取MSDE 2000 9 1.5.3 安装MSDE 2000 10 1.5.4 管理MSDE 2000 11 1.5.5 支持的并发用户数和数据容量 12 1.6 SQL Server Service Pack 12 1.6.1 确定已安装SQL Server的版本 12 1.6.2 SQL Server Service Pack 4介绍 13 1.6.3 SQL Server Service Pack 4的内容 13 1.6.4 安装SQL Server Service Pack 4的常见问题 14 1.7 SQL Server服务 15 1.8 服务账户 15 1.9 影响SQL Server运行的设置 18 1.9.1 内存配置 18 1.9.2 数据存储 20 第 2 章 日期处理 23 2.1 日期类型概述 23 2.2 日期处理函数 25 2.2.1 日期增减函数 25 2.2.2 日期信息获取函数 26 2.2.3 日期差值计算函数 27 2.2.4 其他日期处理相关函数 27 2.3 日期选项设置 29 2.3.1 default language选项 30 2.3.2 SET DATEFIRST 31 2.3.3 SET DATEFORMAT 31 2.3.4 SET LANGUAGE 33 2.4 日期格式化与日期推算处理 34 2.4.1 日期格式化处理 34 2.4.2 日期推算处理 35 2.4.3 日期加减处理 38 2.5 日期处理实例 40 2.5.1 生日处理 40 2.5.2 生成日期列表 42 2.5.3 工作日处理 46 2.5.4 工作时间计算 49 2.6 日期处理疑难解答 51 2.6.1 日期处理中常犯的错误 51 2.6.2 常见的低效率日期处理方法 52 2.6.3 日期与数字 53 第 3 章 字符处理 55 3.1 字符类型概述 55 3.2 字符串分拆 56 3.2.1 循环截取法 57 3.2.2 动态Transact-SQL语句法 57 3.2.3 辅助表法 59 3.2.4 分拆数据到列 61 3.2.5 分拆数字数据 62 3.2.6 分拆短信数据 63 3.3 字符串合并 64 3.3.1 游标合并法 65 3.3.2 语句合并法 66 3.3.3 临时表合并法 68 3.3.4 固定行合并法 69 3.4 其他字符串处理要求 70 3.4.1 分段截取 70 3.4.2 分段更新 72 3.4.3 IP地址处理 72 3.5 字符串分拆与合并处理应用实例 74 3.5.1 字符串比较 74 3.5.2 字符串交集/并集 75 3.5.3 分拆字符串并统计 78 3.5.4 借用字符串实现无规律排序 82 3.5.5 列车车次查询 82 3.6 字符串在动态Transact-SQL语句中的应用 85 3.6.1 动态Transact-SQL语句概述 85 3.6.2 字符串在编号查询中的使用 87 3.6.3 动态参数存储过程 90 3.6.4 动态Transact-SQL语句中常见问题 92 3.7 text与ntext字段处理 96 3.7.1 text与ntext数据的存储 96 3.7.2 管理text与ntext数据 97 3.7.3 text与ntext字段的复制和合并 99 3.7.4 text与image字段转换 101 3.7.5 ntext字段的REPLACE处理 103 第 4 章 排序规则 107 4.1 字符存储编码与排序规则 107 4.1.1 字符数据的存储编码 107 4.1.2 UNICODE 108 4.1.3 排序规则 109 4.1.4 排序规则比较和排列规则 111 4.1.5 使用排序规则 112 4.1.6 如何选择字符字段类型 116 4.2 排序规则应用 117 4.2.1 拼音处理 117 4.2.2 全角与半角字符处理 120 第 5 章 编号处理 123 5.1 自动编号 123 5.1.1 IDENTITY 123 5.1.2 ROWGUIDCOL 129 5.2 手工编号 131 5.2.1 查表法 131 5.2.2 独立编号表法 135 5.2.3 随机编号 139 5.3 缺号与补号 143 5.3.1 检查缺号 143 5.3.2 补号处理 143 5.3.3 编号重排 146 5.4 编号查询 150 5.4.1 已用编号分布查询 150 5.4.2 缺号分布查询 151 5.4.3 生成已用编号和缺号分布字符串 152 5.4.4 缺勤天数统计 155 第 6 章 数据统计与汇总 159 6.1 基本查询 159 6.1.1 空(NULL)值对查询的影响 159 6.1.2 联接 161 6.1.3 UNION与UNION ALL 165 6.1.4 数据填充查询 167 6.1.5 上限与下限区间统计 169 6.1.6 随机记录查询 170 6.2 分级汇总 173 6.2.1 实现分级汇总处理 173 6.2.2 分级汇总结果的过滤 176 6.2.3 分级汇总结果显示格式处理 177 6.2.4 分级汇总结果的排序处理 179 6.3 交叉数据报表 181 6.3.1 实现原理 181 6.3.2 多列转置 184 6.3.3 动态列 185 6.3.4 动态列中的字符溢出处理 188 6.3.5 特殊的交叉报表 191 6.4 典型数据统计案例 193 6.4.1 库存明细账查询 193 6.4.2 同期及上期数据对比 197 6.4.3 动态分组统计 199 6.4.4 销售排行榜 200 第 7 章 分页处理 205 7.1 应用程序中的分页处理 205 7.2 数据中的分页处理 207 7.2.1 使用TOP N实现分页 207 7.2.2 使用字符串 211 7.2.3 使用临时表 213 7.2.4 使用SQL Server的系统存储过程处理分页 216 7.3 特殊要求的分页处理 217 7.3.1 随机显示的分页处理 217 7.3.2 分类数据的分页处理 221 第 8 章 树形数据处理 223 8.1 单编号处理法 223 8.1.1 方法概述 223 8.1.2 逐级汇总 225 8.1.3 编码重排 226 8.1.4 调整编码规则 229 8.1.5 调整编码隶属关系 233 8.2 双编号处理法 238 8.2.1 方法概述 239 8.2.2 树形数据排序 240 8.2.3 查找子节点 244 8.2.4 查找父节点 245 8.2.5 编码校验 246 8.2.6 节点复制 249 8.2.7 节点删除 251 8.2.8 逐级汇总 253 8.3 树形数据的扩展形式 256 8.3.1 产品配件清单 256 8.3.2 公交车乘车线路查询 258 第 9 章 数据导入与导出 261 9.1 访问外部数据 261 9.1.1 链接服务器 261 9.1.2 OPENROWSET与OPENDATASOURCE 268 9.1.3 外部数据访问方法总结 270 9.2 文本文件的导入与导出 274 9.2.1 查询文本文件内容 274 9.2.2 BCP与BULK  277 9.3 导入与导出中的常见问题 285 9.3.1 访问外部数据的注意事项 285 9.3.2 使用BCP或者BULK 时的注意事项 286 9.3.3 外部数据文件位置及文件访问权限问题 287 9.4 在客户端实现SQL Server数据导入与导出处理 288 9.4.1 在Access数据中实现与SQL Server之间的数据交换 288 9.4.2 实现客户端其他OLE DB数据源与SQL Server之间的数据交换 289 9.4.3 在客户端实现SQL Server数据导入与导出处理的一些说明 289 9.5 在数据中存取文件 290 9.5.1 SQL Server中的文件存取方法 290 9.5.2 程序中的文件存取处理方法 292 第 10 章 作业 295 10.1 作业概述 295 10.1.1 定义作业 295 10.1.2 使用系统存储过程定义作业的常用模板 300 10.2 作业的应用 303 10.2.1 定时启用(或者停用)数据 303 10.2.2 执行耗时的存储过程 304 10.2.3 秒级作业 305 10.3 使用作业的疑难解答 309 第 11 章 数据备份与还原 315 11.1 数据备份与还原方法介绍 315 11.1.1 完全备份与还原 315 11.1.2 差异备份与还原 317 11.1.3 日志备份与还原 319 11.1.4 数据文件或文件组备份与还原 320 11.1.5 备份设备 321 11.1.6 数据恢复模型对数据备份和还原的影响 322 11.2 制订数据备份方案 326 11.2.1 备份方案制订原则 326 11.2.2 建立数据备份方案 327 11.3 数据备份与还原的实践应用 332 11.3.1 系统数据的备份与还原 332 11.3.2 数据迁移 336 11.3.3 部分数据还原 339 11.3.4 抢救损坏数据中的数据 341 11.3.5 将数据还原到指定时间点 343 11.3.6 将数据还原到指定标记点 345 11.3.7 同步备用服务器 346 11.4 数据备份与还原疑难解答 349 11.4.1 数据备份与还原中的常见问题 349 11.4.2 使用媒体集备份时的常见问题 354 11.4.3 数据还原中的孤立用户问题 356 11.4.4 查询备份文件中的信息 360 第 12 章 用户定义数据类型 361 12.1 用户定义数据类型概述 361 12.1.1 创建和删除用户定义数据类型 361 12.1.2 为用户定义的数据类型绑定规则 365 12.1.3 为用户定义的数据类型绑定默认值 370 12.2 修改用户定义数据类型 373 12.2.1 修改被表引用的用户定义数据类型 373 12.2.2 修改被存储过程引用的用户定义数据类型 379 第 13 章 数据安全 383 13.1 SQL Server的存取构架 383 13.1.1 表格格式数据流(TDS) 383 13.1.2 Net-Library与网络协议 384 13.1.3 Net-Library加密 387 13.2 用户管理 388 13.2.1 身份验证模式 388 13.2.2 登录、用户、角色和组 390 13.2.3 管理用户 395 13.3 数据文件安全 403 13.4 SQL Server安全配置 405 13.4.1 安全配置建议 405 13.4.2 使用安全套接字层(SSL)加密 408 13.5 应用程序上的安全 417 13.5.1 防止SQL注入式攻击 417 13.5.2 限制应用程序访问 418 13.5.3 不安全的扩展存储过程 419 第 14 章 系统表应用实例 423 14.1 系统对象概述 423 14.1.1 每个数据中都存在的系统表 424 14.1.2 仅在系统数据中存在的系统表 424 14.1.3 系统表应用中三个重要的系统存储过程 426 14.2 系统表在对象信息检索中的应用 429 14.2.1 搜索指定的对象所处的数据 429 14.2.2 获取存储过程参数定义 432 14.2.3 搜索指定字符在哪个表的哪个字段中 435 14.2.4 非UNICODE字段改为UNICODE字段的可行性查询 438 14.2.5 字段相关对象查询 439 14.2.6 生成数据字典 443 14.3 系统对象在处理中的应用 444 14.3.1 批量处理数据中的对象 444 14.3.2 将所有的char、varchar改为nchar、nvarchar 445 14.3.3 标识列与普通列的相互转换 447 14.3.4 把列添加指定位置 450 14.3.5 在两个SQL Server数据之间复制对象 451 第 15 章 SQL Server应用疑难解答 455 15.1 访问SQL Server实例的常见问题 455 15.1.1 连接失败 455 15.1.2 用户登录失败 458 15.1.3 测试连接到SQL Server实例的方法总结 458 15.1.4 超时 459 15.1.5 单用户的问题 460 15.1.6 默认数据问题 461 15.2 索引中的疑难解答 462 15.2.1 索引对查询条件的影响 462 15.2.2 索引对查询结果顺序的影响 465 15.2.3 索引对数据操作的影响 469 15.3 数据日志疑难解答 470 15.3.1 影响日志文件增长的因素 471 15.3.2 从事务日志中删除日志记录 472 15.3.3 日志文件处理中的误区 472 15.3.4 合理解决日志文件增长 473 15.4 错误处理疑难解答 474 15.4.1 错误处理概述 474 15.4.2 错误处理严重程度 475 15.4.3 使用@@ERROR的疑难解答 476 15.4.4 XACT_ABORT与RAISERROR的疑难解答 477 15.5 游标处理疑难解答 479 15.5.1 全局游标与本地游标 479 15.5.2 检查指定的游标是否存在 480 15.5.3 事务提交或者回滚对游标的影响 482 15.5.4 可更新的游标 483 15.6 SQL Server处理中的其他疑难解答 484 15.6.1 并发工作负荷调控器 484 15.6.2 存储过程中的疑难解答 486 15.6.3 标识值疑难解答 488 15.6.4 全文检索疑难解答 491 15.6.5 发布与订阅中的常见问题 494 15.6.6 其他疑难解答 496 中文版SQL Server 2000开发与管理应用实例-简介: 《中文版SQL Server 2000开发与管理应用实例》 本书全面系统地介绍了SQL Server开发和管理的应用技术,涉及安装和配置SQL Server、日期处理、字符处理、排序规则、编号处理、数据统计与汇总、分页处理、树形数据处理、数据导入与导出、作业、数据备份与还原、用户定义数据类型、数据安全、系统表应用实例、SQL Server应用疑难解答等内容。本书不但融合了作者在使用SQL Server 2000过程中遇到的各种常见问题和应用案例,还总结了作者几年来在CSDN 社区SQL Server版所解决的大量问题,面向实际项目需求,涉及不同类型的应用,能够多角度地引导读者学习相关知识。而且针对各类问题,提供了详细的操作步骤和解决思路,具有很强的实用性和可操作性。

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧