回答第二个问题,可以一起研究下: //adotb是本地表;adoq是远程数据库传入过来的数据 adoq.close; adoq.sql.clear; adoq.sql.text :='select * from remoteTb where id ='+adotb.adofieldbyname('id').value; adoq.open;if adoq.recordcount =0 then begin adotb.append; .... adotb.post; end ------------------------------------ 体验速度,体验CSDN论坛助手:http://community.csdn.net/Expert/TopicView.asp?id=4700683
你的问题不就是将SQL2000导入access吗?,可以用ADO连上sqlserver(远程与本地没有关系,操作是一样的,只是连接串不一样) 然后用 insert into opendatasource(...) select ... from ... 这样的插入效率是最高的,且直接一面查,一面插(如果你的已经用ado查出记录了,那就可以直接在原有的查询基础上修改SQL就可以了,且该语法可直接用于SQL的查询分析器中)
keiy() : 谢谢,周一上班我去试试,不过我总觉得这个方法不行,因为程序通过ADO把SQL语句传递到远程数据库中执行,那么Data Source="c:\doc\accessdb.mdb"这个路径服务器会认为是它本地路径,而不是客户端的路径,所以这个语句会出错,呵呵,这是我的猜想,试过才知道,等我好消息。 INSERT INTO opendatasource( 'Microsoft.Jet.OLEDB.4.0','Data Source="c:\doc\accessdb.mdb";Jet OLEDB:Database Password=abc)... B04 (afield1,afield2,afield3,afield4,afield5,afield6) SELECT sfield1,sfield2,sfield3,sfield4,sfield5,sfield6 FROM sqltablename
我试了一下,的确有你说的问题,它只能输出到服务器上,不过,还有一种方法: 用ADO连ACCESS,然后执行 'insert into test(a,b,c,d) select a,b,c,d from test IN [odbc][ODBC;Driver=SQL Server;UID=sa;PWD=;Server=servername;DataBase=master;]'; 这种方法没问题,我测试过
keiy() : 用ADO连ACCESS,然后执行 'insert into test(a,b,c,d) select a,b,c,d from test IN [odbc][ODBC;Driver=SQL Server;UID=sa;PWD=;Server=servername;DataBase=master;]'; ===================================== 这个看上去应该可以,可是客户端无法直接去访问远程SQLServer,只能信赖远程服务器上的中间层进行访问,所以问题的关键就在于我的客户端ADOQuery已经获得查询结果时,如何快速的插入到本地的ACCESS中,请再帮忙想想。
如果这样,我目前还有一个方法,就是用XLSReadWriteII,它可将ADOQuery的结果直接写入execl文件,然后再写入access,从excel写入access可用上面类似的方法,在access中SQL的语法为: select * into <table name> from [excel 8.0;database=<filename>].[<sheetname>$] 当然,它也有两个缺陷 1.记录数不能超过65536 2.要生成中间的excel文件 你可在你的应用上试试,看看速度上是否会快于一条条插入
http://w3china.org/blog/more.asp?name=angelblog&id=13165
//adotb是本地表;adoq是远程数据库传入过来的数据
adoq.close;
adoq.sql.clear;
adoq.sql.text :='select * from remoteTb where id ='+adotb.adofieldbyname('id').value;
adoq.open;if adoq.recordcount =0 then
begin
adotb.append;
....
adotb.post;
end
------------------------------------
体验速度,体验CSDN论坛助手:http://community.csdn.net/Expert/TopicView.asp?id=4700683
你没看懂我提出的问题吧,或者没仔细思考,你给的网址内容与我的问题没关系。
很感谢你的代码,不过也不是正解,请继续帮忙思考!
然后用
insert into opendatasource(...) select ... from ...
这样的插入效率是最高的,且直接一面查,一面插(如果你的已经用ado查出记录了,那就可以直接在原有的查询基础上修改SQL就可以了,且该语法可直接用于SQL的查询分析器中)
谢谢,周一上班我去试试,不过我总觉得这个方法不行,因为程序通过ADO把SQL语句传递到远程数据库中执行,那么Data Source="c:\doc\accessdb.mdb"这个路径服务器会认为是它本地路径,而不是客户端的路径,所以这个语句会出错,呵呵,这是我的猜想,试过才知道,等我好消息。
INSERT INTO opendatasource( 'Microsoft.Jet.OLEDB.4.0','Data Source="c:\doc\accessdb.mdb";Jet OLEDB:Database Password=abc)... B04 (afield1,afield2,afield3,afield4,afield5,afield6)
SELECT sfield1,sfield2,sfield3,sfield4,sfield5,sfield6
FROM sqltablename
------------------------------------
体验速度,体验CSDN论坛助手:http://community.csdn.net/Expert/TopicView.asp?id=4700683
用ADO连ACCESS,然后执行
'insert into test(a,b,c,d) select a,b,c,d from test IN [odbc][ODBC;Driver=SQL Server;UID=sa;PWD=;Server=servername;DataBase=master;]';
这种方法没问题,我测试过
用ADO连ACCESS,然后执行
'insert into test(a,b,c,d) select a,b,c,d from test IN [odbc][ODBC;Driver=SQL Server;UID=sa;PWD=;Server=servername;DataBase=master;]';
=====================================
这个看上去应该可以,可是客户端无法直接去访问远程SQLServer,只能信赖远程服务器上的中间层进行访问,所以问题的关键就在于我的客户端ADOQuery已经获得查询结果时,如何快速的插入到本地的ACCESS中,请再帮忙想想。
select * into <table name> from [excel 8.0;database=<filename>].[<sheetname>$]
当然,它也有两个缺陷
1.记录数不能超过65536
2.要生成中间的excel文件
你可在你的应用上试试,看看速度上是否会快于一条条插入
非常感谢你热心的帮助,无论怎样,这100分都应该给你,再次感谢!