我将建立库和表以及触发器的SQL语名都存在了一个.SQL文本文件中,我如何在Delphi中一次执行它呀。执行本文件的目的是为了执行数据库的初始化,我在SQL查询分析器中可以正常执行,但在AdoQuery中执行却出问题,哪个大哥哥知道,告诉我一下好吗。

解决方案 »

  1.   

    只能用 shellexecute 之類, 直接調用isql.exe 或者 osql.exe 執行對應的腳本!!
      

  2.   

    用isql.exe调用脚本处理
    isql -S abc -U sa -P  -d test -i D:\temp\Update.sql参数说明如下:
    -S :服务器名称;
    -U :用户名;
    -P :密码;
    -d :数据库名称;
    -i :sql脚本路径;
      

  3.   

    xhh_88(三友) 給出的 isql 使用, 應該大概就是了!就我知道, 在delphi中創建 SQLSERVER 的庫, 這種方式最簡單快速了!
    要不然, 你每個 go 之前, 都要分開執行一次
      

  4.   

    “我将建立库和表以及触发器的SQL语名都存在了一个.SQL文本文件中,我如何在Delphi中一次执行它呀。”既然做成了文件,那就把文件修改成一个建立存储过程的文件,在delphi中用存储过程一次执行。
      

  5.   

    用isql.exe调用脚本处理 应该是isqlw.exe
    那运行的机器上要安装“isqlw.exe”
    直接在数据服务器上isqlw.exe运行不好吗?用存储过程要好些。或者动态转载到ADOQuery,EeecSQL
      

  6.   

    不同意aiirii(ari-爱的眼睛)的意见:在delphi中創建 SQLSERVER 的庫, 這種方式最簡單快速了!
    我的意见是修改数据库最好是用建模工具进行更改。都有记录啊
      

  7.   

    我上面的脚本需要在装有sql server客户端的机器执行,如果你不希望装客户端,那可以这样
    osql -S abc -U sa -P  -d test -i D:\temp\Update.sql只要将oslq.exe文件放在脚本文件附加就可以了.
      

  8.   

    TO:readersm68(地主) 
    你可能理解错误,大家只所以需要这样执行,是因为这部分工作希望是用户来执行,而用户怎么会弄建模工具之类的东东.
      

  9.   

    脚本里不要含有drop语句,不然你会死的很惨的
      

  10.   

    谢了各位大哥,我脚本里有GO,也有DROP,创建数据库和表和触发器的所有语句都有了。
      

  11.   

    try    //从文件中读取初始化信息
                ts:=Tstringlist.Create;
                ts.loadfromfile('aa.sql');
              except
                showmessage(1,'文件加载失败,请联系技术人员!');
              end;
              try
               for i:=0 to ts.Count-1 do
               begin
                 if ts[i]<>'GO' then
                  ADOQuery1.SQL.Add(ts[i])
                  else//sqlserver生成的脚本中包含go就运行
                  begin
                  ADOQuery1.ExecSQL;
                 // Label1.Caption:='完成操作:'+inttostr(i)+'行';
                  update;
                  adoquery1.SQL.Clear; 
                 end;
                end;
              except
               showmessage(1,'数据初始化失败,请联系技术人员!');
              end;