问题:异构数据库之间完全可以用SQL语句导数据。大家抛弃BatchMove吧 如果觉得好请Up一下,如果觉得不好也请Up一下 ( 积分:1, 回复:603, 阅读:32905 ) 分类:数据库-C/S型 ( 版主:qince, luyear ) 来自:碧血剑, 时间:2003-3-18 16:33:00, ID:1691966 [显示:小字体 | 大字体] 告诉你一个最快的方法,用SQLServer连接DBF 在SQLServer中执行 SELECT * into bmk FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0', 'Data Source="e:\share";User ID=Admin;Password=;Extended properties=dBase 5.0')...bmk 这样就可以把e:\share中的bmk.dbf表导入到Sqlserver中, 速度是最快的 上面这个方法DBF文件必须在服务器上,如果DBF不在服务器上,就用 连接串 Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\temp;Extended Properties="dBase 5.0;";Persist Security Info=False SQL语句 SELECT * into aaa IN [ODBC] [ODBC;Driver=SQL Server;UID=sa;PWD=;Server=127.0.0.1;DataBase=Demo;] from aaa 这是直接把客户端上的DBF传上服务器的最直接方法。把压箱底的方法都告诉大家 在Form上放一个ADOConnection,连结指向目标Access库 比如txt文件在c:\temp\aaaa.txt 就执行 ADOConnection.Connected := True; ADOConnection.Execute('Select * Into abcd From [Text;Database=c:\temp].aaaa.txt'); 就一切Ok了,这个方法一定行的,我好不容易才研究出来的 有了这两个例子,异构数据库之间导数据的问题就举一反三,迎刃而解了。把Excel导入到Access中,同txt类似 select * into <table name> from [excel 8.0;database=<filename>].[<sheetname>$]我最讨厌别人用BatchMove导数据了,明明一个SQL的事情,偏要 我的目标是让大家抛弃BatchMoveProvider=MSDASQL.1;Extended Properties="Driver={Microsoft Visual Foxpro Driver};SourceType=DBF;SourceDB=你的文件所在路径;"
整理一下:解决了,我用的cb /* 功能 : Access To DBF ADOConnection2 => Access */ sql = "SELECT * INTO jyjh in \"c:\\temp\"[dbase 5.0;] FROM jyjh"; ADOConnection2->Execute(sql);c:\temp\aaa.dbf to Access, ADOConnection 指向Access 语句是 select * into bbb from aaa in 'c:\temp' 'dbase 5.0;'在Form上放一个ADOConnection,连结指向目标Access库 比如txt文件在c:\temp\aaaa.txt 就执行 ADOConnection.Connected := True; ADOConnection.Execute('Select * Into abcd From [Text;Database=c:\temp].aaaa.txt');将Oracle导入到文本文件 连接串 Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\temp;Extended Properties="text;HDR=YES;";Persist Security Info=False SQL语句 SELECT * into aaa.txt FROM Tab1 IN [ODBC] [ODBC;Driver={Microsoft ODBC for Oracle};UID=oracle;PWD=oracle;SERVER=yourdata;]将Oracle导入到Access 连接串 Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\temp\db1.mdb;Persist Security Info=False SQL语句 SELECT * into tablename FROM Tab1 IN [ODBC] [ODBC;Driver={Microsoft ODBC for Oracle};UID=oracle;PWD=oracle;SERVER=yourdata;]DBase 5.0 DBASE IV FoxPro 3.0 Paradox 7.X Excel 8.0 text;HDR=YES;FMT=DelimitedSELECT * into aaa FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0', 'Data Source="c:\temp\";User ID=Admin;Password=;Extended properties=Text')...[bb#txt]Excel联接ADO串 Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\temp\a.xls;Extended Properties="Excel 8.0;HDR=Yes;";Persist Security Info=False Extended Properties参数属性这样写 Excel 5.0;HDR=YES;IMEX=1 IMEX=1就是指混合型转换为文本 SQLServer从Excel取数 SELECT * FROM OpenDataSource('Microsoft.Jet.OLEDB.4.0','Data Source="C:\temp\b.xls";Extended Properties="Excel 5.0;HDR=Yes;";Persist Security Info=False')...sheet1$将SQLServer导入到文本文件 连接串 Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\temp;Extended Properties="text;HDR=YES;";Persist Security Info=False SQL语句 SELECT * into aaa.txt FROM Tab1 IN [ODBC] [ODBC;Driver=SQL Server;UID=sa;PWD=;Server=127.0.0.1;DataBase=Demo;] 要改变分隔符,可以修改 Schema.ini文件。该文件中指明分割符,如: [yourfile.txt] ... Format=Delimited(|) 更详细的例子可以参考:微软的Knowledge Base的文章:“Q149090 CC: How to Use Schema.ini for Accessing Text Data”和微软的Knowledge Base的文章:“Q187670 OWTO: Use RDO and ODBC Text Driver to Open a Delimited Text”。 txt导入SQLServer select * from OpenRowset('MSDASQL', 'Driver={Microsoft Text Driver (*.txt; *.csv)}; DefaultDir=c:\temp;','select * from aaaa.txt')sql server导出到access ADOConnection 指向Access SELECT * into table FROM Tab1 IN [ODBC] [ODBC;Driver=SQL Server;UID=sa;PWD=;Server=127.0.0.1;DataBase=Demo;]sql server导出到excel ADOConnection 指向excel, 用Jet4.0 ,Extended properties设为Excel 8.0 SELECT * into table FROM Tab1 IN [ODBC] [ODBC;Driver=SQL Server;UID=sa;PWD=;Server=127.0.0.1;DataBase=Demo;]insert into gds_order select * from gds_order in [ODBC][ODBC;dsn=jbcmis;User Name=informix;password=informix;]用SQLServer连接DBF 在SQLServer中执行 SELECT * into bmk FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0', 'Data Source="e:\share";User ID=Admin;Password=;Extended properties=dBase 5.0')...bmk 这样就可以把e:\share中的bmk.dbf表导入到Sqlserver中,Access 到 Access select * into aaa from aaa in 'c::\temp\b.mdb' 用ADOConnection.Execute执行对foxpro 6.0采取odbc,建立一个数据源 insert into t_d(申请日期,发票序号,序号,申请号) SELECT 申请日期,发票序号,序号申请号 from OPENROWSET('MSDASQL', 'dsn=ddd;SourceDB=e:\d_pro\mail\poprec;SourceType=DBF' ,'select * from E:\d_pro\mail\poprec\d.dbf') as a --where 发票号 not in(select 发票号 from t_d)
2.用2个ADO连接,2个Query,一个SQL读,一个写DB
TBatchMove允许在一组记录或是整个数据表中执行特种作业,这
个控件的主要用途在于把数据从服务器中卸到本地的数据源供分析或
进行其他操作。TBatchMove可以在目的地建立对应于原数据表内容的
数据表,自动将列名及数据类型进行适当的对应操作。
TBatchMove两个特性指明批量移动(Batch Move)操作的源表及目
的表。Source指定一个对应于已有的源数据表的数据集(一个Tquery
或Ttable控件),Destination指明对应于一个数据库数据表的Ttable
控件,目的数据表可以是已经存在的也可以是不存在的。
Mode特性指明TBatchMove对象想要作的事情:
表2
我们可以根据batCopy模式,对数据库类型进行适当的转换,以下
是从dBASE类型到其它类型的转换结果:
表3 数据库转换举例
现有用Foxbase开发的财务程序中的会计科目数据库(kjkmk.dbf)
,系统将升级到Window s环境下开发,数据库将采用Paradox语言。为
了沿用该库结构和数据,可采用如下方法进行转换。 1.Datasource1控件:
AutoEdit True
DataSet Table1
Enabled True
Name DataSorce1 2.Table1控件:
DatabaseName cw
Name Table1
Readonly False
TableName KJKMK
TableType udBase
Datasource1控件和Table1控件共同定义被转换的源文件,该文件
是在别名为cw里的kjk mk,文件类型为Dbase。 3.BatchMove1控件:
Destination Table2
Mode balCopy
Name BatchMove1
Sorce Table1
MatchMovel控件定义转换类型为Copy以及源文件、目标文件。
4.Datasource2控件:
AutoEdit True
DataSet Table2
Enabled True
Name DataSorce2
.Table2控件:
DatabaseName cwdb
Name Table2
Readonly False
TableName KJKMK
TableType uParadox
Datasource2控件和Table2控件共同定义转换后的目标文件,该文
件是在别名为cwdb里的kjkmk,文件类型为Paradox。 6.DbGrid1控件:
Datasorce Datasorce1
Name DbGridl
DbGridl网格控件先定义源文件,执行转换后再定义目标文件,主
要用于方便查看。
7.Button1控件:
OnClck ButtonClck
OndragDrop
Ondragover
OnEnddrag
该控件有一个OnClick事件,表示执行文件类型转换。其代码如下
:
procedure TForm1.Button1Click(Sender:TObject);
begin
BatchMove1.execute;
end;
经上述方法定义,编译执行后,即可将kjkmk.dbf文件转换成kjkmk
.db文件,然后就可以用Database Desktop工具对其进行修改调整。
用此方法还可进行其它任意文件的转换。
http://www.delphibbs.com/keylife/iblog_show.asp?xid=19064
分类:数据库-C/S型 ( 版主:qince, luyear )
来自:碧血剑, 时间:2003-3-18 16:33:00, ID:1691966 [显示:小字体 | 大字体]
告诉你一个最快的方法,用SQLServer连接DBF
在SQLServer中执行
SELECT * into bmk
FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0',
'Data Source="e:\share";User ID=Admin;Password=;Extended properties=dBase 5.0')...bmk
这样就可以把e:\share中的bmk.dbf表导入到Sqlserver中,
速度是最快的
上面这个方法DBF文件必须在服务器上,如果DBF不在服务器上,就用
连接串
Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\temp;Extended Properties="dBase 5.0;";Persist Security Info=False
SQL语句
SELECT * into aaa IN [ODBC]
[ODBC;Driver=SQL Server;UID=sa;PWD=;Server=127.0.0.1;DataBase=Demo;]
from aaa
这是直接把客户端上的DBF传上服务器的最直接方法。把压箱底的方法都告诉大家
在Form上放一个ADOConnection,连结指向目标Access库
比如txt文件在c:\temp\aaaa.txt
就执行
ADOConnection.Connected := True;
ADOConnection.Execute('Select * Into abcd From [Text;Database=c:\temp].aaaa.txt');
就一切Ok了,这个方法一定行的,我好不容易才研究出来的
有了这两个例子,异构数据库之间导数据的问题就举一反三,迎刃而解了。把Excel导入到Access中,同txt类似
select * into <table name> from [excel 8.0;database=<filename>].[<sheetname>$]我最讨厌别人用BatchMove导数据了,明明一个SQL的事情,偏要
我的目标是让大家抛弃BatchMoveProvider=MSDASQL.1;Extended Properties="Driver={Microsoft Visual Foxpro Driver};SourceType=DBF;SourceDB=你的文件所在路径;"
整理一下:解决了,我用的cb
/*
功能 : Access To DBF
ADOConnection2 => Access
*/
sql = "SELECT * INTO jyjh in \"c:\\temp\"[dbase 5.0;] FROM jyjh";
ADOConnection2->Execute(sql);c:\temp\aaa.dbf to Access,
ADOConnection 指向Access
语句是 select * into bbb from aaa in 'c:\temp' 'dbase 5.0;'在Form上放一个ADOConnection,连结指向目标Access库
比如txt文件在c:\temp\aaaa.txt
就执行
ADOConnection.Connected := True;
ADOConnection.Execute('Select * Into abcd From [Text;Database=c:\temp].aaaa.txt');将Oracle导入到文本文件
连接串
Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\temp;Extended Properties="text;HDR=YES;";Persist Security Info=False
SQL语句
SELECT * into aaa.txt FROM Tab1 IN [ODBC]
[ODBC;Driver={Microsoft ODBC for Oracle};UID=oracle;PWD=oracle;SERVER=yourdata;]将Oracle导入到Access
连接串
Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\temp\db1.mdb;Persist Security Info=False
SQL语句
SELECT * into tablename FROM Tab1 IN [ODBC]
[ODBC;Driver={Microsoft ODBC for Oracle};UID=oracle;PWD=oracle;SERVER=yourdata;]DBase 5.0
DBASE IV
FoxPro 3.0
Paradox 7.X
Excel 8.0
text;HDR=YES;FMT=DelimitedSELECT * into aaa
FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0',
'Data Source="c:\temp\";User ID=Admin;Password=;Extended properties=Text')...[bb#txt]Excel联接ADO串
Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\temp\a.xls;Extended
Properties="Excel 8.0;HDR=Yes;";Persist Security Info=False
Extended Properties参数属性这样写 Excel 5.0;HDR=YES;IMEX=1
IMEX=1就是指混合型转换为文本
SQLServer从Excel取数
SELECT *
FROM OpenDataSource('Microsoft.Jet.OLEDB.4.0','Data Source="C:\temp\b.xls";Extended Properties="Excel 5.0;HDR=Yes;";Persist Security Info=False')...sheet1$将SQLServer导入到文本文件
连接串
Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\temp;Extended Properties="text;HDR=YES;";Persist Security Info=False
SQL语句
SELECT * into aaa.txt FROM Tab1 IN [ODBC]
[ODBC;Driver=SQL Server;UID=sa;PWD=;Server=127.0.0.1;DataBase=Demo;]
要改变分隔符,可以修改
Schema.ini文件。该文件中指明分割符,如:
[yourfile.txt]
...
Format=Delimited(|)
更详细的例子可以参考:微软的Knowledge Base的文章:“Q149090 CC: How to Use Schema.ini for Accessing Text Data”和微软的Knowledge Base的文章:“Q187670 OWTO: Use RDO and ODBC Text Driver to Open a Delimited Text”。 txt导入SQLServer
select * from OpenRowset('MSDASQL', 'Driver={Microsoft Text Driver (*.txt; *.csv)};
DefaultDir=c:\temp;','select * from aaaa.txt')sql server导出到access
ADOConnection 指向Access
SELECT * into table FROM Tab1 IN [ODBC]
[ODBC;Driver=SQL Server;UID=sa;PWD=;Server=127.0.0.1;DataBase=Demo;]sql server导出到excel
ADOConnection 指向excel, 用Jet4.0 ,Extended properties设为Excel 8.0
SELECT * into table FROM Tab1 IN [ODBC]
[ODBC;Driver=SQL Server;UID=sa;PWD=;Server=127.0.0.1;DataBase=Demo;]insert into gds_order select * from gds_order
in [ODBC][ODBC;dsn=jbcmis;User Name=informix;password=informix;]用SQLServer连接DBF
在SQLServer中执行
SELECT * into bmk
FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0',
'Data Source="e:\share";User ID=Admin;Password=;Extended properties=dBase 5.0')...bmk
这样就可以把e:\share中的bmk.dbf表导入到Sqlserver中,Access 到 Access
select * into aaa from aaa in 'c::\temp\b.mdb'
用ADOConnection.Execute执行对foxpro 6.0采取odbc,建立一个数据源
insert into t_d(申请日期,发票序号,序号,申请号)
SELECT 申请日期,发票序号,序号申请号
from
OPENROWSET('MSDASQL',
'dsn=ddd;SourceDB=e:\d_pro\mail\poprec;SourceType=DBF'
,'select * from E:\d_pro\mail\poprec\d.dbf') as a --where 发票号 not in(select 发票号 from t_d)