主要错误信息是: 服务器: 消息 7333,级别 16,状态 2,行 1 未能用书签从 OLE DB 提供程序 'MICROSOFT.JET.OLEDB.4.0' 中提取行。 [OLE/DB provider returned message: 多步 OLE DB 操作产生错误。如果可能,请检查每个 OLE DB 状态值。没有工作被完成。] OLE DB 错误跟踪[OLE/DB Provider 'MICROSOFT.JET.OLEDB.4.0' IRowsetLocate::GetRowsByBook returned 0x80040e21: ]。 UPDATE openrowset('MICROSOFT.JET.OLEDB.4.0','dBase 5.0;DATABASE=F:\样例\','select * from GZZK1007') SET NGGZ=CONVERT(NUMERIC(15,2),A.[超额工资/节余工资])--,ZT=CONVERT(NUMERIC(15,2),A.[绩效浮动]),JT=CONVERT(NUMERIC(15,2),A.[可控节超]),ST=CONVERT(NUMERIC(15,2),A.[个人罚]) FROM openrowset('Microsoft.Jet.OLEDB.4.0','EXCEL 5.0;hdr=yes;database=F:\样例\20100711.xls;',sheet1$) AS A inner join openrowset('MICROSOFT.JET.OLEDB.4.0','dBase 5.0;DATABASE=F:\样例\','select * from GZZK1007') AS B ON A.GONGHAO=B.GONGHAO 我觉得是我的UPDATE语句编写的有问题,可能是语法问题,但是我查了半天也不知道 如何改。 分不够的话再加,我一年也没问过几个问题,还是大侠帮帮忙啊
--try UPDATE B SET B.NGGZ=CONVERT(NUMERIC(15,2),A.[超额工资/节余工资]) FROM openrowset('Microsoft.Jet.OLEDB.4.0','EXCEL 5.0;hdr=yes;database=F:\样例\20100711.xls;',sheet1$) AS A inner join openrowset('MICROSOFT.JET.OLEDB.4.0','dBase 5.0;DATABASE=F:\样例\','select * from GZZK1007') AS B ON A.GONGHAO=B.GONGHAO
--(5) */ /*将本地表中的信息导入到远程数据库表中 下面的例子将本地whsxjAdmin种的(Title,Password)插入到远程 zhongyiAdmin中去 */ insert into opendatasource('SQLOLEDB','Data Source=IP地址;User ID=zhongyi;password=xinrongkeji').sqlzhongyi.dbo.zhongyiAdmin(Title,Password) select Title,Password from whsxjAdmin
我试了,你给的SQL提示结果如下: “ 服务器: 消息 208,级别 16,状态 1,行 1 对象名 'B' 无效。 服务器: 消息 7399,级别 16,状态 1,行 1 OLE DB 提供程序 'Microsoft.Jet.OLEDB.4.0' 报错。提供程序未给出有关错误的任何信息。 OLE DB 错误跟踪[OLE/DB Provider 'Microsoft.Jet.OLEDB.4.0' IDBInitialize::Initialize returned 0x80004005: 提供程序未给出有关错误的任何信息。]。 ”是不是更新表不能有别名?
UPDATE B SET B.NGGZ=CONVERT(NUMERIC(15,2),A.[超额工资/节余工资]) FROM openrowset('Microsoft.Jet.OLEDB.4.0','EXCEL 5.0;hdr=yes;database=F:\样例\20100711.xls;',sheet1$) AS A inner join openrowset('MICROSOFT.JET.OLEDB.4.0','dBase 5.0;DATABASE=F:\样例\','select * from GZZK1007.DBF') AS B ON A.GONGHAO=B.GONGHAO
兄弟,你给我的语句提示:“对象名 'B' 无效。”我知道 ws_hgo 是想给我方法,他给我的那个例子我也看过了,甚至: http://topic.csdn.net/u/20080523/11/08e4624a-13d1-4a6c-a9bc-7cfdd721a351.html 这里的我也看过了, 你能不能指出我的语句错误的地方? UPDATE openrowset('MICROSOFT.JET.OLEDB.4.0','dBase 5.0;DATABASE=F:\样例\','select * from GZZK1007') SET NGGZ=CONVERT(NUMERIC(15,2),A.[超额工资/节余工资]) FROM openrowset('Microsoft.Jet.OLEDB.4.0','EXCEL 5.0;hdr=yes;database=F:\样例\20100711.xls;',sheet1$) AS A inner join openrowset('MICROSOFT.JET.OLEDB.4.0','dBase 5.0;DATABASE=F:\样例\','select * from GZZK1007') AS B ON A.GONGHAO=B.GONGHAO
兄弟,我又测试了你的语法,如下是正确的: update b set b.minTime=a.minTime,b.maxTime=a.maxTime from new.dbo.table as a inner join clm_classtable as b on a.andcode=b.classcode where (a.andcode='JX0' OR a.andcode='JX4' OR a.andcode='JX8')在使用本地表的时候是正确的,看来我的错误信息主要是openrowset的更新问题。有人建议“建议用链接服务器吧 openrowset opendatesource问题多多 特别是远程更新” 请问,我的一个.dbf的文件,如果用链接服务器?
汗!是SQL2000 。 等高手解答。
恩,2000怎么了。 我用2000连接的EXCEL AND DBF进行远程更新,并用了2000进行本地数据测试。 同样语法远程不行,本地可以。
大家上午好,问题我已经解决了,使用OpenRowset确实是有问题,最后我更换了链接服务器就好了,代码如下: --创建链接服务器 exec sp_addlinkedserver 'dbf','','MICROSOFT.JET.OLEDB.4.0','F:\样例\','','dBase 5.0' exec sp_addlinkedserver 'ex','','MICROSOFT.JET.OLEDB.4.0','F:\样例\20100711.xls','','Excel 5.0' exec sp_addlinkedsrvlogin 'dbf','false',null, 'admin', '' exec sp_addlinkedsrvlogin 'ex','false',null, 'admin', ''--查询示例 select [台帐小计],* from ex...sheet1$ where gonghao='11001' select NGGZ,* from dbf...GZZK1007 where gonghao='11001'UPDATE B SET B.NGGZ=A.[可控节超] from ex...sheet1$ AS A inner join dbf...GZZK1007 AS B ON A.GONGHAO=B.GONGHAO --删除链接服务器 exec sp_dropserver 'dbf','droplogins' exec sp_dropserver 'ex','droplogins' 在此感谢大家的帮忙。 在此特别感谢@ws_hgo @claro
看看帖子中三楼的方法,谢谢。
openDatasource:不使用连接服务器的名称,而提供特殊的链接信息.
使用openDatasource的前提是仅当 DisallowAdhocAccess
注册表选项针对指定的提供程序显式设置为 0,
并且启用 Ad Hoc Distributed Queries 高级配置选项时,
OPENDATASOURCE 才可用于访问 OLE DB 数据源中的远程数据。
如果未设置这些选项,则默认行为不允许即席访问。
*/
--代码如下:
exec sp_configure 'show advanced options',1
reconfigure
exec sp_configure 'Ad Hoc Distributed Queries',1
reconfigure
--(1)例如现在我想打开D盘中BJData.mdb中的BJAdmin表的信息
select ID,Title,OwnerName from
opendataSource('Microsoft.Jet.OLEDB.4.0','Data Source="D:\BJData.mdb";')...BJAdmin
/*Results:
ID Title OwnerName
----------- -------------------- --------------------------------------------------
1 xinrong
4 webmaster admin
5 bing webmaster
(3 行受影响)
*/
--(2)我现在要将BJAdmin中BJNewsCategory中的信息插入到A表中
--先查询下Test.Newscategory
select * from Test.dbo.Newscategory
/*
ID Title
----------- --------------------
1 MSSQL
(1 行受影响)
*/
insert into Newscategory select Title from OpenDataSource
('Microsoft.Jet.OLEDB.4.0','Data Source="D:\BJData.mdb";')...BJNewsCategory
--导入之后再查询
select * from Test.dbo.Newscategory
/*
ID Title
----------- --------------------
1 MSSQL
2 新闻分类
3 新闻动态
4 工程案例
5 膜结构知识
6 在建工程
(6 行受影响)
*/
--上面的都是在MSSQL中查询Access中的信息,现在将MSSQL中的信息导入到Access中去
--(3)将AdminInfo的信息插入到BJData.mdb中的BJAdmin中去
select * from Test.dbo.AdminInfo
/*
ID Title
----------- ------------------------------
1 ws_hgo
(1 行受影响)
*/
insert into opendatasource('microsoft.Jet.OLEDB.4.0','Data source="D:/BJData.mdb"')...BJAdmin
(Title,RoleID) select Title,1 from AdminInfo
--然后查询BJAdmin表的信息
select ID,Title,OwnerName from
opendataSource('Microsoft.Jet.OLEDB.4.0','Data Source="D:\BJData.mdb";')...BJAdmin
/*
ID Title OwnerName
----------- -------------------- --------------------------------------------------
1 xinrong
4 webmaster admin
5 bing webmaster
12 ws_hgo NULL
(4 行受影响)
*/
--(4)上面说的是Access与MSSQl之间的操作现在操作下
--Excel与MSSQL之间的操作
--从Excel中读取信息
select * from OpenDataSource
('Microsoft.Jet.OLEDB.4.0','Data Source="D:\work.et";Extended properties=Excel 5.0')...[sheet1$]
/*
EmployeeName Sex Age Post
----------- ----------- -------- ------------
ws_hgo Boy 23 Senior Programmer
yangzhognyuan Boy 24 Programmer
chenjing Girl 24 Designer
(3 行受影响)--(5)
*/
/*将本地表中的信息导入到远程数据库表中
下面的例子将本地whsxjAdmin种的(Title,Password)插入到远程
zhongyiAdmin中去
*/
insert into opendatasource('SQLOLEDB','Data Source=IP地址;User ID=zhongyi;password=xinrongkeji').sqlzhongyi.dbo.zhongyiAdmin(Title,Password)
select Title,Password from whsxjAdmin
我是把EXCEL中的数据导入到DBF中,EXCEL中可以正常读取,甚至也可以和DBF关联,但是插入出问题了,我昨天 晚上找了半天,也没有找到。
你说的三楼只是把EXCEL插入到新的本地表中,
我说的是插入到BDF,可以说是远程表。
服务器: 消息 7333,级别 16,状态 2,行 1
未能用书签从 OLE DB 提供程序 'MICROSOFT.JET.OLEDB.4.0' 中提取行。
[OLE/DB provider returned message: 多步 OLE DB 操作产生错误。如果可能,请检查每个 OLE DB 状态值。没有工作被完成。]
OLE DB 错误跟踪[OLE/DB Provider 'MICROSOFT.JET.OLEDB.4.0' IRowsetLocate::GetRowsByBook returned 0x80040e21: ]。
UPDATE openrowset('MICROSOFT.JET.OLEDB.4.0','dBase 5.0;DATABASE=F:\样例\','select * from GZZK1007')
SET NGGZ=CONVERT(NUMERIC(15,2),A.[超额工资/节余工资])--,ZT=CONVERT(NUMERIC(15,2),A.[绩效浮动]),JT=CONVERT(NUMERIC(15,2),A.[可控节超]),ST=CONVERT(NUMERIC(15,2),A.[个人罚])
FROM openrowset('Microsoft.Jet.OLEDB.4.0','EXCEL 5.0;hdr=yes;database=F:\样例\20100711.xls;',sheet1$) AS A inner join
openrowset('MICROSOFT.JET.OLEDB.4.0','dBase 5.0;DATABASE=F:\样例\','select * from GZZK1007') AS B
ON A.GONGHAO=B.GONGHAO 我觉得是我的UPDATE语句编写的有问题,可能是语法问题,但是我查了半天也不知道 如何改。
分不够的话再加,我一年也没问过几个问题,还是大侠帮帮忙啊
UPDATE B
SET B.NGGZ=CONVERT(NUMERIC(15,2),A.[超额工资/节余工资])
FROM
openrowset('Microsoft.Jet.OLEDB.4.0','EXCEL 5.0;hdr=yes;database=F:\样例\20100711.xls;',sheet1$) AS A
inner join
openrowset('MICROSOFT.JET.OLEDB.4.0','dBase 5.0;DATABASE=F:\样例\','select * from GZZK1007') AS B
ON A.GONGHAO=B.GONGHAO
--(5)
*/
/*将本地表中的信息导入到远程数据库表中
下面的例子将本地whsxjAdmin种的(Title,Password)插入到远程
zhongyiAdmin中去
*/
insert into opendatasource('SQLOLEDB','Data Source=IP地址;User ID=zhongyi;password=xinrongkeji').sqlzhongyi.dbo.zhongyiAdmin(Title,Password)
select Title,Password from whsxjAdmin
“
服务器: 消息 208,级别 16,状态 1,行 1
对象名 'B' 无效。
服务器: 消息 7399,级别 16,状态 1,行 1
OLE DB 提供程序 'Microsoft.Jet.OLEDB.4.0' 报错。提供程序未给出有关错误的任何信息。
OLE DB 错误跟踪[OLE/DB Provider 'Microsoft.Jet.OLEDB.4.0' IDBInitialize::Initialize returned 0x80004005: 提供程序未给出有关错误的任何信息。]。
”是不是更新表不能有别名?
更新和插入是有区别的啊,我的更新是不是多条的原因呢。你有没有仔细看啊。
SET B.NGGZ=CONVERT(NUMERIC(15,2),A.[超额工资/节余工资])
FROM
openrowset('Microsoft.Jet.OLEDB.4.0','EXCEL 5.0;hdr=yes;database=F:\样例\20100711.xls;',sheet1$) AS A
inner join
openrowset('MICROSOFT.JET.OLEDB.4.0','dBase 5.0;DATABASE=F:\样例\','select * from GZZK1007.DBF') AS B
ON A.GONGHAO=B.GONGHAO
兄弟,你给我的语句提示:“对象名 'B' 无效。”我知道 ws_hgo 是想给我方法,他给我的那个例子我也看过了,甚至:
http://topic.csdn.net/u/20080523/11/08e4624a-13d1-4a6c-a9bc-7cfdd721a351.html
这里的我也看过了,
你能不能指出我的语句错误的地方?
UPDATE openrowset('MICROSOFT.JET.OLEDB.4.0','dBase 5.0;DATABASE=F:\样例\','select * from GZZK1007')
SET NGGZ=CONVERT(NUMERIC(15,2),A.[超额工资/节余工资])
FROM openrowset('Microsoft.Jet.OLEDB.4.0','EXCEL 5.0;hdr=yes;database=F:\样例\20100711.xls;',sheet1$) AS A inner join
openrowset('MICROSOFT.JET.OLEDB.4.0','dBase 5.0;DATABASE=F:\样例\','select * from GZZK1007') AS B
ON A.GONGHAO=B.GONGHAO
兄弟,我又测试了你的语法,如下是正确的:
update b
set b.minTime=a.minTime,b.maxTime=a.maxTime
from new.dbo.table as a inner join clm_classtable as b
on a.andcode=b.classcode
where (a.andcode='JX0' OR a.andcode='JX4' OR a.andcode='JX8')在使用本地表的时候是正确的,看来我的错误信息主要是openrowset的更新问题。有人建议“建议用链接服务器吧 openrowset opendatesource问题多多 特别是远程更新”
请问,我的一个.dbf的文件,如果用链接服务器?
等高手解答。
恩,2000怎么了。
我用2000连接的EXCEL AND DBF进行远程更新,并用了2000进行本地数据测试。
同样语法远程不行,本地可以。
--创建链接服务器
exec sp_addlinkedserver 'dbf','','MICROSOFT.JET.OLEDB.4.0','F:\样例\','','dBase 5.0'
exec sp_addlinkedserver 'ex','','MICROSOFT.JET.OLEDB.4.0','F:\样例\20100711.xls','','Excel 5.0'
exec sp_addlinkedsrvlogin 'dbf','false',null, 'admin', ''
exec sp_addlinkedsrvlogin 'ex','false',null, 'admin', ''--查询示例
select [台帐小计],* from ex...sheet1$ where gonghao='11001'
select NGGZ,* from dbf...GZZK1007 where gonghao='11001'UPDATE B
SET B.NGGZ=A.[可控节超]
from ex...sheet1$ AS A inner join
dbf...GZZK1007 AS B
ON A.GONGHAO=B.GONGHAO --删除链接服务器
exec sp_dropserver 'dbf','droplogins'
exec sp_dropserver 'ex','droplogins' 在此感谢大家的帮忙。
在此特别感谢@ws_hgo @claro