我在写一个数据从EXCEL导入SQL数据时碰到一个问题就是导几列是没问题。如下。
procedure Tfrm_inport.Button2Click(Sender: TObject);
var a,b,c,sql:string;
i:integer;
begin
    while not adoquery1.Eof do
    begin
        a:=adoquery1.fieldbyname('发送时间').AsString;
        b:=adoquery1.fieldbyname('接收手机').AsString;
        c:=adoquery1.fieldbyname('短信内容').AsString;
        if adoquery1.fieldbyname('接收手机').AsString='' then exit;
        sql:='insert into send_record values('''+a+''','''+b+''','''+c+''')';     
        adoquery2.Close;
        adoquery2.SQL.Clear;
        adoquery2.SQL.Add(sql);
        adoquery2.ExecSQL;
        adoquery1.Next;        
    end;
    showmessage('导入完毕');  但是如果这样,字段一多的话SQL会很长,会写死人,有没有更好的方法去写。最好举个例子,好像有人用TSTRINGS类去做类似的这样的功能。但小弟不知道怎么做,请前辈们指点一下吧。

解决方案 »

  1.   

    写个字段配置文件,把字段写在里面,程序循环去读,根据字段取数据,转换成SQL,不就OK了.过后只需维护修改那个配置文件.
      

  2.   

    你这里也没有看到和Excel相关的操作
    procedure Tfrm_inport.Button2Click(Sender: TObject);  
    begin 
        while not adoquery1.Eof do 
        begin 
            adoquery2.Close; 
            adoquery2.SQL.Text := ' insert into send_record values(:a,:b,:c)';
            adoquery2.parameters.parambyname('a').value := doquery1.fieldbyname('发送时间').AsString;
            adoquery2.parameters.parambyname('b').value := doquery1.fieldbyname('短信内容').AsString;
            adoquery2.parameters.parambyname('c').value := doquery1.fieldbyname('接收手机').AsString;
            adoquery2.ExecSQL; 
            adoquery1.Next;             
        end; 
    end;
      

  3.   


    var
      vFieldList := TStringList;
      vFields: string;
      i: integer;
    begin
      vFieldList := TStringlist.create;
      try
        vFieldList.LoadFromFile('a.txt');
        while not adoquery1.Eof do
        begin
          for i := 0 to vFieldList.count - 1 do
            if i < vFieldlist.count - 1
              vFields := vFields + QuotedStr(vFieldList.string[i]) + ','
            else
              vFields := vFields + QuotedStr(vFieldList.string[i]);
            sql:='insert into send_record values('+ vFields  + ')';   
            adoquery2.Close;
            adoquery2.SQL.Clear;
            adoquery2.SQL.Add(sql);
            adoquery2.ExecSQL;
            adoquery1.Next;       
        end;
      finally
        vFieldlist.free;
      end; 没有调试,你自己调试跟踪看看!
      

  4.   

    我是ADO连的EXCEL,上面的语句里 Query1是读EXCEL里的数据的。没写出来,Query2是执行插入动作的。
      

  5.   

    我说的就是这种方式,vFieldList.LoadFromFile('a.txt');这一局如何转成EXCEL里面的值啊。不是TXT。谢谢大哥啊。
      

  6.   

    最简单就是SAVETOFILE('A.XLS')就行了。用EXCEL打开,
    http://www.99net.net/study/program/delphi/1085477174.html