To : navyxin(海军) 一个用来读表的结构和数据,一个用来创建表和插入数据 如何实现数据的插入呢? 比如:A用来连接源数据库,B连接目标数据库。A用来读表的结构和数据,B用来创建表和插入数据。读取结构和数据以及创建表我都会,可是怎样插入数据呢? 望不吝赐教
sql.text:='insert 数据库名1..表1 select * from 数据库名2..表2'; 表1,表2结构相同
adodataset连接adoconnection 把所有的字段读到listbox1中 var insertsql:string; i:integer;//(构建insert into语句) while adodataset1.Eof=false do begin insertsql:='insert into ' +你的目标表名+'('; for i:=listbox1.items.Count-1 downto 0 do begin insertsql:=insertsql+listbox1.Items.Strings[i]; if i<>0 then insertsql:=insertsql+','; end; insertsql:=insertsql+')'+' values '+'('; for j:=listbox1.Items.Count-1 downto 0 do begin case adodataset1.FieldByName(listbox1.Items.Strings[j]).DataType of ftwidestring: insertsql:=insertsql+''''+adodataset1.fieldbyname (listbox1.items.strings[j]).asstring + ''''; ftinteger : insertsql:=insertsql+inttostr(adodataset1.fieldbyname(listbox1.Items.Strings[j]).AsInteger) ; ftdatetime : insertsql:=insertsql+datetostr(adodataset1.fieldbyname(listbox1.items.strings[j]).AsDateTime) ; ftfloat : insertsql:=insertsql+floattostr(adodataset1.fieldbyname(listbox1.Items.Strings[j]).AsFloat); ftsmallint : insertsql:=insertsql+inttostr(adodataset1.fieldbyname(listbox1.Items.Strings[j]).AsInteger); ftstring : insertsql:=insertsql+''''+adodataset1.fieldbyname(listbox1.items.strings[j]).asstring + ''''; ftbcd : insertsql:=insertsql+bcdtostr(adodataset1.fieldbyname(listbox1.Items.Strings[j]).AsBCD); //在unit中必须引用fmtbcd else showmessage('没有匹配的类型') ; end; 主要的就是构建create table和insert into语句。
如果你可以用BDE的BatchMove方法。如果用ADOConnection的话,本地的好做,直接用碧血剑说的方法,你曾经给我回过帖,就是你给我说的insert into 的方法。首先要得到她的字段名可以直接用ADOConnection.getFieldName的方法,然后select这些字段,插入目标表中(access<-->SQL Server 和access<-->access都实现了。)。如果是异地的,我现在也正在想这个问题,就是相连接局域网中的SQL Server服务器,把它上面的数据导入到本地的Access数据库中。或者把本地的Access数据库数据导到局域网中的SQL Server服务器中。希望一起探讨这个问题。
/* 功能 : 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执行
只能循环用adoquery.insert;了
ADODataset.Connection := ADOConnection
然后在ADODataset1中执行SQL语句(select语句),
ADODataSet1.SaveToFile(TempFileName);
之后ADODataset2.LoadFromFile(TempFileName);各位看这种方法怎么样?
一个用来读表的结构和数据,一个用来创建表和插入数据
如何实现数据的插入呢?
比如:A用来连接源数据库,B连接目标数据库。A用来读表的结构和数据,B用来创建表和插入数据。读取结构和数据以及创建表我都会,可是怎样插入数据呢? 望不吝赐教
表1,表2结构相同
把所有的字段读到listbox1中
var insertsql:string;
i:integer;//(构建insert into语句)
while adodataset1.Eof=false do
begin
insertsql:='insert into ' +你的目标表名+'(';
for i:=listbox1.items.Count-1 downto 0 do
begin
insertsql:=insertsql+listbox1.Items.Strings[i];
if i<>0 then insertsql:=insertsql+',';
end;
insertsql:=insertsql+')'+' values '+'(';
for j:=listbox1.Items.Count-1 downto 0 do
begin
case adodataset1.FieldByName(listbox1.Items.Strings[j]).DataType of
ftwidestring: insertsql:=insertsql+''''+adodataset1.fieldbyname (listbox1.items.strings[j]).asstring + '''';
ftinteger : insertsql:=insertsql+inttostr(adodataset1.fieldbyname(listbox1.Items.Strings[j]).AsInteger) ;
ftdatetime : insertsql:=insertsql+datetostr(adodataset1.fieldbyname(listbox1.items.strings[j]).AsDateTime) ;
ftfloat : insertsql:=insertsql+floattostr(adodataset1.fieldbyname(listbox1.Items.Strings[j]).AsFloat);
ftsmallint : insertsql:=insertsql+inttostr(adodataset1.fieldbyname(listbox1.Items.Strings[j]).AsInteger);
ftstring : insertsql:=insertsql+''''+adodataset1.fieldbyname(listbox1.items.strings[j]).asstring + '''';
ftbcd : insertsql:=insertsql+bcdtostr(adodataset1.fieldbyname(listbox1.Items.Strings[j]).AsBCD); //在unit中必须引用fmtbcd
else
showmessage('没有匹配的类型') ;
end;
主要的就是构建create table和insert into语句。
应该怎样插入呢?
功能 : 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执行
这几天我一直在考虑可否使用两个ADOConnection分别连接到源数据库和目标数据库,然后进行数据的导入/导出,到现在也没有太好的办法。谢谢各位。