请大家帮忙说说解决方案---最好的存为DBF文件方法 (200分)

  • 主题发起人 主题发起人 onedot
  • 开始时间 开始时间
用BATCHMOVE行不?
 
BATCHMOVE还是不好,仍然不是很方便,还很容易错
况且我的所有连接都是ADO的
 
onedot 果然是精益求精啊.
 
不是,是懒人才会这样
总想找到更简便的方法
 
1。设置一个ODBC数据源,指向你的odbc文件的目录 (可用delphi改注册表实现)
2。在sQLserVER里用 sp_addlinkedserver 将刚才设置的ODBC设为链接服务器,(可用TSQL实现)
3。在SQLserver里将数据从本地数据库写入链接服务器里对应的表。(可用TSQL实现。)

下面是sp_addlinkedServer的说明,我以前用过,不过现在没有时间翻源码了,你自己看看吧,,如果不行,请跟帖。


sp_addlinkedserver
新增信息 - 2001 年 9 月

创建一个链接的服务器,使其允许对分布式的、针对 OLE DB 数据源的异类查询进行访问。在使用 sp_addlinkedserver 创建链接的服务器之后,此服务器就可以执行分布式查询。如果链接服务器定义为 Microsoft® SQL Server™,则可执行远程存储过程。

语法
sp_addlinkedserver [ @server = ] 'server'
[ , [ @srvproduct = ] 'product_name' ]
[ , [ @provider = ] 'provider_name' ]
[ , [ @datasrc = ] 'data_source' ]
[ , [ @location = ] 'location' ]
[ , [ @provstr = ] 'provider_string' ]
[ , [ @catalog = ] 'catalog' ]

参数
[ @server = ] 'server'

要创建的链接服务器的本地名称,server 的数据类型为 sysname,没有默认设置。

如果有多个 SQL Server 实例,server 可以为 servername/instancename。此链接的服务器可能会被引用为下面示例的数据源:

SELECT * FROM [servername/instancename].pubs.dbo.authors

如果未指定 data_source,则服务器为该实例的实际名称。

[ @srvproduct = ] 'product_name'

要添加为链接服务器的 OLE DB 数据源的产品名称。product_name 的数据类型为 nvarchar(128),默认设置为 NULL。如果是 SQL Server,则不需要指定 provider_name、data_source、location、provider_string 以及目录。

[ @provider = ] 'provider_name'

与此数据源相对应的 OLE DB 提供程序的唯一程序标识符 (PROGID)。provider_name 对于安装在当前计算机上指定的 OLE DB 提供程序必须是唯一的。provider_name 的数据类型为nvarchar(128),默认设置为 NULL。OLE DB 提供程序应该用给定的 PROGID 在注册表中注册。

[ @datasrc = ] 'data_source'

由 OLE DB 提供程序解释的数据源名称。data_source 的数据类型为 nvarchar(4000),默认设置为 NULL。data_source 被当作 DBPROP_INIT_DATASOURCE 属性传递以便初始化 OLE DB 提供程序。

当链接的服务器针对于 SQL Server OLE DB 提供程序创建时,可以按照 servername/instancename 的形式指定 data_source,它可以用来连接到运行于特定计算机上的 SQL Server 的特定实例上。servername 是运行 SQL Server 的计算机名称,instancename 是用户将被连接到的特定 SQL Server 实例的名称。

[ @location = ] 'location'

OLE DB 提供程序所解释的数据库的位置。location 的数据类型为 nvarchar(4000),默认设置为 NULL。location 作为 DBPROP_INIT_LOCATION 属性传递以便初始化 OLE DB 提供程序。

[ @provstr = ] 'provider_string'

OLE DB 提供程序特定的连接字符串,它可标识唯一的数据源。provider_string 的数据类型为 nvarchar(4000),默认设置为 NULL。Provstr 作为 DBPROP_INIT_PROVIDERSTRING 属性传递以便初始化 OLE DB 提供程序。

当针对 Server OLE DB 提供程序提供了链接服务器后,可将 SERVER 关键字用作 SERVER=servername/instancename 来指定实例,以指定特定的 SQL Server 实例。servername 是 SQL Server 在其上运行的计算机名称,instancename 是用户连接到的特定的 SQL Server 实例名称。

[ @catalog = ] 'catalog'

建立 OLE DB 提供程序的连接时所使用的目录。catalog 的数据类型为sysname,默认设置为 NULL。catalog 作为 DBPROP_INIT_CATALOG 属性传递以便初始化 OLE DB 提供程序。

返回代码值
0(成功)或 1(失败)

结果集
如果没有指定参数,则 sp_addlinkedserver 返回此消息:

Procedure 'sp_addlinkedserver' expects parameter '@server', which was not supplied.

使用适当 OLE DB 提供程序和参数的 sp_addlinkedserver 返回此消息:

Server added.

注释
下表显示为可通过 OLE DB 访问的数据源设置链接服务器的方法。对于给定的数据源,可以使用多种方法为其设置链接服务器,下表中可能有不止一行适用于一种数据源类型。下表也显示了用于设置链接服务器的 sp_addlinkedserver 参数值。

Access/
Jet 用于 Jet 的 Microsoft OLE DB 提供程序 任何 Microsoft.Jet.OLEDB.4.0 Jet 数据库文件的完整路径名 - - -
ODBC 数据源 用于 ODBC 的 Microsoft OLE DB 提供程序 任何 MSDASQL ODBC 数据源的系统 DSN - - -
ODBC 数据源 用于 ODBC 的 Microsoft OLE DB 提供程序 任何 MSDASQL - - ODBC 连接字符串 -
文件系统 用于索引服务的 Microsoft OLE DB 提供程序 任何 MSIDXS 索引服务目录名称 - -

B. 使用用于 Jet 的 Microsoft OLE DB 提供程序
此示例创建一台名为 SEATTLE Mktg 的链接服务器。



说明 本示例假设已经安装 Microsoft Access 和示例 Northwind 数据库,且 Northwind 数据库驻留在 C:/Msoffice/Access/Samples。


USE master
GO
-- To use named parameters:
EXEC sp_addlinkedserver
@server = 'SEATTLE Mktg',
@provider = 'Microsoft.Jet.OLEDB.4.0',
@srvproduct = 'OLE DB Provider for Jet',
@datasrc = 'C:/MSOffice/Access/Samples/Northwind.mdb'
GO
-- OR to use no named parameters:
USE master
GO
EXEC sp_addlinkedserver
'SEATTLE Mktg',
'OLE DB Provider for Jet',
'Microsoft.Jet.OLEDB.4.0',
'C:/MSOffice/Access/Samples/Northwind.mdb'
GO


D. 将 data_source 参数与用于 ODBC 的 Microsoft OLE DB 提供程序一起使用
此示例创建一台名为 SEATTLE Payroll 的链接服务器,该服务器使用用于 ODBC 的 Microsoft OLE DB 提供程序和 data_source 参数。



说明 在执行 sp_addlinkedserver 之前,必须在服务器上将指定的 ODBC 数据源名称定义为系统 DSN。


USE master
GO
-- To use named parameters:
EXEC sp_addlinkedserver
@server = 'SEATTLE Payroll',
@srvproduct = '',
@provider = 'MSDASQL',
@datasrc = 'LocalServer'
GO
-- OR to use no named parameters:
USE master
GO
EXEC sp_addlinkedserver
'SEATTLE Payroll',
'',
'MSDASQL',
'LocalServer'
GO

E. 将 provider_string 参数与用于 ODBC 的 Microsoft OLE DB 提供程序一起使用
此示例创建一台名为 LONDON Payroll 的链接服务器,该服务器使用用于 ODBC 的 Microsoft OLE DB 提供程序和 provider_string 参数。



说明 有关 ODBC 连接字符串的更多信息,请参见 SQLDriverConnect 和如何分配句柄并与 SQL Server (ODBC) 连接。


USE master
GO
-- To use named parameters:
EXEC sp_addlinkedserver
@server = 'LONDON Payroll',
@srvproduct = '',
@provider = 'MSDASQL',
@provstr = 'DRIVER={SQL Server};SERVER=MyServer;UID=sa;PWD=sapassword;'
GO
-- OR to use no named parameters:
USE master
GO
EXEC sp_addlinkedserver
'LONDON Payroll',
'',
'MSDASQL',
NULL,
NULL,
'DRIVER={SQL Server};SERVER=MyServer;UID=sa;PWD=sapassword;'
GO


 
谢谢pely:但你说的我以前已经说过这种方案的不好地方
 
我写了一个将数据集导出成DBF文件的控件,无需安装VF,并且非常快。如果需要MAIL通知我,
用后觉得满意给我加分!
 
TO xiaojie:请MAIL:onedot@sina.com
我看看吧,呵呵。分数也一定会给的,而且还加分
反正分数就是用来感谢帮助的
 
TO xiaojie:也给我一个,
我的MAIL:Dawn7@21cn.com
 
TO xiaojie:好东西,我也要,谢谢!
yb79528@21cn.com
 
谢谢xiaojie的东东。东西不错(发的PAS文件有点小毛病,呵呵,多了USES VBEXPORT)
我会单独开个题目送分给你,你自己以你自己ID作为关键字查我送分给你的帖子吧。
恕我直言,这个代码似乎是国外人写的,呵呵。
 
to onedot和xiaojie: 请发一份给我好吗?我现在比较需要这个东东。谢谢!
wuzhenzhen@263.net
 
to onedot和xiaojie: 请发一份给我好吗?我现在比较需要这个东东。谢谢!
houcq@fosters.com.cn
 
to onedot:我现在也需要一份,你现在还有吗?如果有的话就麻烦你发给我一份吧,谢谢!
along407@21cn.com
 
to onedot和xiaojie: 能发一份给我吗!我现在也碰到了这个比较麻烦的问题。谢谢!
拜托啦!!
fhbing_cn@sina.com
 
后退
顶部