我们正在将基于Visual FoxPro的遗留系统迁移到Java,我们需要将SQL Server配置为CRUD系统的DBF文件,因为我们将部分重写系统。因此,员工将同时使用这两个界面,我们需要在两个系统中进行实时更新。
现在,我能够在SQL Server上插入和选择数据,但我无法更新和删除。
我运行以下命令来创建链接服务器:
sp_addlinkedserver @server = 'DEN',
@srvproduct = 'foxpro',
@provider = 'VFPOLEDB.1',
@datasrc = 'D:\BaseTeste\denny\denny_db.dbc'
运行以下SQL来更新表:
UPDATE DEN...produtos SET familia=1 WHERE id=35
我收到了这个错误:
链接服务器“DEN”的OLE DB提供程序“VFPOLEDB”返回消息“多步OLE DB操作生成错误。检查每个OLE DB状态值,如果可用。没有工作。”。
Msg 7333,Level 16,State 2,Line 1
无法使用OLE DB提供程序“VFPOLEDB”中的书签为链接服务器“DEN”获取行。
如何解决? 感谢。
答案 0 :(得分:1)
我经常使用VFP OleDB,没有任何问题做任何插入,更新,删除,选择......有一点需要注意。您的连接字符串可以指向表所在的目录。此外,如果特定的.DBC与相关表格相关联,则可以包含数据库。
运行查询,插入,更新或删除时,您无需限定数据库,例如
DEN .... produtos(我假设它是Denny_db.Produtos - 因此指示Database.Table运行查询)。不要这样做......数据库是开放的,并且从连接中“可见”....你应该能够做到....
Update Produtos set x = 1 where something = whatever
or
insert into Produtos (fld1, fld2, fld3) values ( something1, another2, last3)
关于VFP的另一件事,当表与给定数据库相关联时,一旦打开它,如果没有打开相应的数据库,它将被FORCED打开以利用任何触发器等。因此,您可以简化您的连接,只需指向路径,让剩下的东西为您工作。
另一个注意事项....如果你有一个目录结构,其下有路径,其他位置有数据,例如
C:\SomeFolder\MainDataPath\
C:\SomeFolder\MainDataPath\SomeArchives\
C:\SomeFolder\MainDataPath\OtherFolder\
并建立与"C:\SomeFolder\MainDataPath\"
位置的连接,您的查询可以使用相对路径获取其他位置内的数据,例如
select whatever
from SomeRootTable SRT
join SomeArchives\SubFolderTable SFT
on SRT.KeyID = SFT.LinkKeyID
答案 1 :(得分:1)
使用SQL Server Express 2012 32bit安装VFPOLEDB后,以下似乎正在运行:
SELECT * FROM OPENROWSET('VFPOLEDB','D:\dir\file.dbf';'';'','file')
SELECT * FROM OPENROWSET('VFPOLEDB','D:\dir\file.dbf';'';'','update file set n=2 where n=1')
SELECT * FROM OPENROWSET('VFPOLEDB','D:\dir\file.dbf';'';'','delete from file where n=2')
SELECT * FROM OPENROWSET('VFPOLEDB','D:\dir\db2.dbc';'';'','tab2')
SELECT * FROM OPENROWSET('VFPOLEDB','D:\dir\db2.dbc';'';'','update tab2 set somedate=ctod("12/30/2000") where n=1')
唯一的不便是更新和删除语句导致错误7357告诉您没有要返回的行。您可以将其包装在try / catch块中并忽略7357作为预期条件,因为无论如何都会执行实际语句。要使用动态参数,可以通过exec(@sqltext)
执行此操作。
答案 2 :(得分:0)
您对链接服务器运气不好:
当您使用Visual FoxPro OLE DB提供程序作为SQL Server链接时 服务器,仅支持查询。 Visual FoxPro OLE DB提供程序 不支持通过链接更新,插入或删除操作 服务器
http://msdn.microsoft.com/en-us/library/0xzsac67(v=vs.80).aspx
而是使用MSDASQL
提供程序尝试OPENROWSET
并将fox-pro ODBC驱动程序作为第二个参数传递(Driver={Microsoft Visual FoxPro Driver}
)