现在在一个文件夹下面有几个sql文件(数量不定),我想写程序按sql文件名字的顺序来依次执行,数据库为sqlserver,这样的代码在delphi中可以写吗?谢谢!

解决方案 »

  1.   

    执行一个外部的.sql文件可以这样:
    if FileExists(...) then 
    begin
      ADOQuery1.SQL.LoadFromFile(...);
      ADOQuery1.Open; // or ADOQuery1.Execsql;
    end;
      

  2.   

    用ADOQUERY容易出错,因为往往SQL文件里都包含了“GO”这个关键字
    直接用  ADOConnection.Execute('你要执行的SQL语句');就OK了,不过还是不能有"GO"
    这个词
    关注一下,呵呵
      

  3.   

    我的sql文件里面现在不得不使用go这个词,因为我是同步数据库的语句,语句比较多,很多文件里面的语句超过1000行,不知道有没有更加好的方法?谢谢
      

  4.   

    procedure TForm1.BtnInitDbClick(Sender: TObject);
    Var
      str:String;
    begin
      try
       MemSql.Lines.SaveToFile('C:\TEMP.sql') ;   str:='Osql -S '+Hostname+'\FLAGICCARD -U sa -P  -i C:\TEMP.sql';
       winexec(pchar(str),0);
       showmessage('数据库初始化成功!');
      except
       showmessage('失败!');
       //on E: Exception do showmessage((E.Message ));
      end;
    end;
      

  5.   

    请教 ‘ yhg_zl(原野) ‘:   我按照你的方法做了,文件生成以后,sql语句并没有执行
      

  6.   

    简单写个例子 
    遇到GO就清除,继续执行
    var 
     sqlList:TstringList;
     i:Integer;
    begin 
      adoquery.close;
      adoquery.sql.clear;  sqlList:=TstringList.create; 
      sqlList.loadfromfile('d:\hr.sql');
      for i:=0 to sqlList.Count-1 do
       begin
         if lowcase(sqlList.String[i])<>'go' then
           adoquery.sql.append(sqlList.String[i])
         else 
          begin
           adoquery.execsql;
           adoquery.close;
           adoquery.sql.clear;
          end; 
       end;
    end;