如何在delphi中执行sql的osql脚本?
我想在程序中将表和存储过程添加到数据库中!

解决方案 »

  1.   

    你什么数据?
    如果是SQL server数据,你可以连接Master库,再执行建表和存储过程的脚本。
      

  2.   

    adoquery.close;
    adoquery.sql.clear;
    adoquery.sql.add(加在这里);
    adoquery.open;
      

  3.   

    var
    sSql:string
    begin
    sSql := 'select ..........';
    adoquery.close;
    adoquery.sql.clear;
    adoquery.sql.add(sSql);
    adoquery.open;
    end;
      

  4.   

    with ADOQuery1 do
    begin
        Close;
        SQL.Clear;
        SQL.LoadFromFile('yoursqlfile');
        ExecSQL;
    end;
      

  5.   

    我在创建数据库时用的是下面代码,创建成功了,但在delphi中要报错!
    大家看看!
    with ADOQuery1 do
    begin
        Close;
        SQL.Clear;
        SQL.ADD('Create datebase hhh');
        ExecSQL;
    end;
      

  6.   

    用查询分析器编辑你的存储过程(不是真编辑,打开即可),复制你的查询分析器中的SQL代码,粘贴在SQL.ADD语句中,注意换行,然后用ExecSQL;
      

  7.   

    IF EXISTS (SELECT name FROM master.dbo.sysdatabases WHERE name = N'tttt')
    DROP DATABASE [tttt]
    GOCREATE DATABASE [tttt]  ON (NAME = N'tttt_Data', FILENAME = N'd:\sql_data2\MSSQL\data\tttt_Data.MDF' , SIZE = 2, FILEGROWTH = 10%) LOG ON (NAME = N'tttt_Log', FILENAME = N'd:\sql_data2\MSSQL\data\tttt_Log.LDF' , SIZE = 1, FILEGROWTH = 10%), (NAME = N'www', FILENAME = N'e:\www_Log.LDF' , SIZE = 1, FILEGROWTH = 10%)
     COLLATE Chinese_PRC_CI_AS
    GOexec sp_dboption N'tttt', N'autoclose', N'false'
    GOexec sp_dboption N'tttt', N'bulkcopy', N'false'
    GOexec sp_dboption N'tttt', N'trunc. log', N'false'
    GOexec sp_dboption N'tttt', N'torn page detection', N'true'
    GOexec sp_dboption N'tttt', N'read only', N'false'
    GOexec sp_dboption N'tttt', N'dbo use', N'false'
    GOexec sp_dboption N'tttt', N'single', N'false'
    GOexec sp_dboption N'tttt', N'autoshrink', N'false'
    GOexec sp_dboption N'tttt', N'ANSI null default', N'false'
    GOexec sp_dboption N'tttt', N'recursive triggers', N'false'
    GOexec sp_dboption N'tttt', N'ANSI nulls', N'false'
    GOexec sp_dboption N'tttt', N'concat null yields null', N'false'
    GOexec sp_dboption N'tttt', N'cursor close on commit', N'false'
    GOexec sp_dboption N'tttt', N'default to local cursor', N'false'
    GOexec sp_dboption N'tttt', N'quoted identifier', N'false'
    GOexec sp_dboption N'tttt', N'ANSI warnings', N'false'
    GOexec sp_dboption N'tttt', N'auto create statistics', N'true'
    GOexec sp_dboption N'tttt', N'auto update statistics', N'true'
    GOif( ( (@@microsoftversion / power(2, 24) = 8) and (@@microsoftversion & 0xffff >= 724) ) or ( (@@microsoftversion / power(2, 24) = 7) and (@@microsoftversion & 0xffff >= 1082) ) )
    exec sp_dboption N'tttt', N'db chaining', N'false'
    GOuse [tttt]
    GO
    这是完整的创建数据库的SQL语句,在SQL中能运行,说明你的语句没错,在程序中运行,需要考虑登陆权限等。
    另,
    with ADOQuery1 do
    begin
        Close;
        SQL.Clear;
        SQL.ADD('Create datebase [hhh]');
        ExecSQL;
    end;
      

  8.   

    exec('osql -S. -Usa -P -ipath\aa.sql',1);
      

  9.   

    sorry
    ----
    winexec('osql -S. -Usa -P -ipath\aa.sql',1);
      

  10.   

    我是这样执行的osql脚本,但是要报错
    parameter object is improperly defind. Inconsistent or incomplete information was provided
    大家帮我看看
    with ADOQuery1 do
    begin
        Close;
        SQL.Clear;
        SQL.LoadFromFile('C:\333.sql');
        ExecSQL;
    end;
      

  11.   

    winexec('osql -S. -Usa -P -ipath\aa.sql',1);
      

  12.   

    同意 jinjazz(人雅的标记--落寞刺客) 的做法,
    你不可能连SQL Server客户引擎都不装吧,如果将了的话,
    就可以用osql来执行本地的SQL Server导出的建库的文件,而用TQuery来执行是受限制的,
    因为SQL Server导出的文件中,
    有很多在TQuery中无法执行,比如GO,如果你安装了SQL Server客户端,可以在CMD中运行osql,自己看看它的帮助,
    osql -S"servername" -U"username" -P"password" -i"C:\MyWorkZone\createdb.sql"
    -P参数后密码是明文的,
    如果你保存配置文件,要小心一点了。
      

  13.   

    这样一定可以我已经试过了:procedure TForm1.Button1Click(Sender: TObject);
    var
      SqlStr,Tmp:string;
      F:TextFile;
    begin
      assignfile(F,'d:\test.sql');
      reset(f);
      Repeat
        Readln(F,tmp);
        if tmp='GO' then
          begin
          adoconnection1.Execute(sqlstr);
          sqlstr:='';
          tmp:='';
          end;
        sqlstr:=sqlstr+tmp+chr(13)+chr(10);
      Until eof(F);
      closefile(F);