如题

解决方案 »

  1.   

    应该不能直接用SQL语句操作。
      

  2.   

    使用两个ADOConnection分别连接两个异构数据库,怎样才能进行数据的导入/导出工作?
      

  3.   

    不行,
    只能循环用adoquery.insert;了
      

  4.   

    http://www.delphibbs.com/delphibbs/dispq.asp?lid=1691966 这里应该能够帮你
      

  5.   

    我想到了一种方法,使用两个ADODataset,
    ADODataset.Connection := ADOConnection
    然后在ADODataset1中执行SQL语句(select语句),
    ADODataSet1.SaveToFile(TempFileName);
    之后ADODataset2.LoadFromFile(TempFileName);各位看这种方法怎么样?
      

  6.   

    但ado连接sybase好象有问题,oracle ,sql server,access都没问题
      

  7.   

    To : navyxin(海军) 
        一个用来读表的结构和数据,一个用来创建表和插入数据  
        如何实现数据的插入呢?
        比如:A用来连接源数据库,B连接目标数据库。A用来读表的结构和数据,B用来创建表和插入数据。读取结构和数据以及创建表我都会,可是怎样插入数据呢?    望不吝赐教
      

  8.   

    sql.text:='insert 数据库名1..表1 select * from 数据库名2..表2';
    表1,表2结构相同
      

  9.   

    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语句。
      

  10.   

    刚才我没有表述清楚,A是ADOConnection1,B是ADOConnection2
    应该怎样插入呢?
      

  11.   

    如果你可以用BDE的BatchMove方法。如果用ADOConnection的话,本地的好做,直接用碧血剑说的方法,你曾经给我回过帖,就是你给我说的insert into 的方法。首先要得到她的字段名可以直接用ADOConnection.getFieldName的方法,然后select这些字段,插入目标表中(access<-->SQL Server 和access<-->access都实现了。)。如果是异地的,我现在也正在想这个问题,就是相连接局域网中的SQL Server服务器,把它上面的数据导入到本地的Access数据库中。或者把本地的Access数据库数据导到局域网中的SQL Server服务器中。希望一起探讨这个问题。
      

  12.   

    /*
     功能 :  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执行
      

  13.   

    真象上边各位所说,一边用ado,一边用odbc就可以了,我做的access<-->sql server,就是这样实现的
      

  14.   

    可以直接操作!你说的就是用SQL语句导数据吧,就是用简单的查询和添加,不过我觉得你要是用Delphi做的话应该很简单啊,查询出来就到给变量付值,然后就用添加语句添加就可以了啊
      

  15.   

    嗯,估计也只能用碧血剑的方法了。
    这几天我一直在考虑可否使用两个ADOConnection分别连接到源数据库和目标数据库,然后进行数据的导入/导出,到现在也没有太好的办法。谢谢各位。