正在做一个把Excel中的数据追加到Access库中的小程序,已经可能字段名不相同,但数据类型符合要求.
  我的做法是先把Excel数据转换成ACCES临时表,再取出源表和目的表中的各字段,再手动匹配字段,如a.XM=b.姓名等,匹配完后,再将数据追加到Access库中来.
    前面的工作已经完成,但在追加时不知道要怎么样写SQL语句, 'INSERT INTO 表2 (SELECT * FROM 表1)' ,是否可以带字段条件(如FoxPro中的Field等)?
 请教如何实现,或是有更好的解决方法!!谢谢!!

解决方案 »

  1.   

    SQLStr:='INSERT INTO temp (SELECT kh as 考号 FROM TempS_050725154427)';
      ADOConnection1.Execute(SQLStr);
      Adoconnection1.Connected:=true;运行提示Insert 语句语法错误,不能这样写吗?请各位帮忙?!
     
      

  2.   

    SQLStr:='INSERT INTO temp(考号) (SELECT kh as 考号 FROM TempS_050725154427)';
      ADOConnection1.Execute(SQLStr);
      Adoconnection1.Connected:=true;我没验证过 你试试看 
    主要问题是源表和目的表的字段个数要一样
      

  3.   

    SQLStr:='INSERT INTO temp(字段1) (SELECT kh as 考号 FROM TempS_050725154427)'把temp中的字段数与查询出来的一致
      

  4.   

    谢谢hqhhh(枫叶)
    字段个数相同了,但还是这个错误提示,是不是别的地方有错??
      

  5.   

    那先看TempS_050725154427表中的数据有没有问题,要不看一下数据字段的类型是不是一样你可以把TempS_050725154427中的数据全部删除,只保留一条数据,看会不会出错,如果出错说明你的数据类型有问题,如果没错,则说明TempS_050725154427表中的其他数据有问题;!
    请楼主再试试
      

  6.   

    搞不懂了,把Temp表整个复制到Temp1,执行出来还是一样的问题,难道Access不支持多表查询?不会啊??
     贴上代码,再求各位帮助看看?!procedure TForm1.BBtImportClick(Sender: TObject);
    var
         SQLStr:string;
    begin
            try
              Adoconnection1.Connected:=false;
              ADOConnection1.ConnectionString:='Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\MyDoc\db1.mdb;'+'Persist Security Info=False';
              Adoconnection1.Connected:=true;          SQLStr:='Insert into temp(考号) (select 考号 from temp1)';         ADOConnection1.Execute(SQLStr);
             adoconnection1.Connected:=true;
           except
                  exit;
            end;end;
      

  7.   

    hqhhh(枫叶)老大,试了还是不行,是不是哪里有其它错误?
      

  8.   

    procedure TForm1.BBtImportClick(Sender: TObject);
    var
         SQLStr:string;
    begin
            try
              Adoconnection1.Connected:=false;
              ADOConnection1.ConnectionString:='Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\MyDoc\db1.mdb;'+'Persist Security Info=False';
              Adoconnection1.Connected:=true;ADOQuery1.Connection := Adoconnection1;
    with ADOQuery1 do
    begin
      Close;
      SQL.Clear;
      SQL.Add('Insert into temp(考号) (select 考号 from temp1)');
      ExceSQL;
    end;
    //          SQLStr:='Insert into temp(考号) (select 考号 from temp1)';
    //         ADOConnection1.Execute(SQLStr);
    //         adoconnection1.Connected:=true;
           except
                  exit;
            end;end;
      

  9.   

    hqhhh(枫叶)老大还是不行,执行 ExecSQL 时出现同样错误:Insert into 语法错误
    只有试'Insert into temp(考号) values(123456)' 才不错,不知道原因了??
      

  10.   

    Select a.*,b.* from a inner join b On a.xm=b.姓名 就可以得到你要的表了!
      

  11.   

    Insert into temp(考号,姓名) select kh as 考号,xm as 姓名 from tempS  搞定,我晕,多一个括号竟然出错!!谢谢各位,散分了!!!
      

  12.   

    可能是Access里insert into 语法不太一样
      

  13.   

    原来是括号,搞不懂了。
    从可读性来讲,这个括号有应该是清楚一些,偏偏这里不要括号。
    而同样在Access里如果用left join之类连接的话,不加括号还不行。如果连接的表比较多的话,要整一大堆括号才行。
    呵呵