成功之后100分相送!问题是这样的:
我想在程序一启动就得到在SQL SERVER的数据库目录,已经有朋友告诉我了得到该目录的存储过程,那么,我想启动时检查有没有得到该目录的存储过程在,如果在了就不用建了,直接执行,如果没有在,则新建一个该存储过程。请问高手求你们,帮帮忙了!!!(我用的是DATA MODUL,该DM中有一个ADOCONNECTION,有人说用ADOCONNECTION。GETPROCEDURENAME(),可是我不知道怎么用,请给我个具体的代码吧!)

解决方案 »

  1.   

    忘了说了,我是用TADOQUERY的,不过TStoredProc 的也行,不过我没用过,你们教教我。
      

  2.   

    说明:以下例子是一个存储过程的代码,首先判断是否存在着这个存储过程,如果存在,则删除,然后再重新创建这个存储过程。
    稍加修改就可以符合你的要求了。if exists (select * from sysobjects where id = object_id('dbo.OW_Get_ProducePlan') and sysstat & 0xf = 4)
    drop procedure dbo.OW_Get_ProducePlan
    GOcreate procedure OW_Get_ProducePlan
           @OperatorID   varchar(8),
           @Password     varbinary(16),as
    begin
      select * from ProducePlan where ProducePlanID=@n_ProducePlanID  return 0
    endGO
      

  3.   

    这位大哥,你能不能帮我写成DELPHI的格式?我对存储过程不熟悉,可以吗?谢谢你了
      

  4.   

    你使用ADOStoredProc1进行调用,把GO去掉
      

  5.   

    我代码已经有了,就是不会在DELPHI中调用,把数据库目录得到,我用的是ADOQUERY:AddZTQuery.sql.clear;
      AddZTQuery.sql.add('IF EXISTS (SELECT name FROM sysobjects  WHERE name = ''p1'' AND type = ''P'') '+
                         'DROP PROCEDURE p1'+
                         'GO'+
                         'create proc p1 as '+
                         'select @DefaultPath=[filename] '+
                         'from master.dbo.sysdatabases '+
                         'where lower(name)=''master''');  AddZTQuery.ExecSQL;  AddZTQuery.Close;
      AddZTQuery.SQL.Clear;
      AddZTQuery.SQL.Add('use master');
      AddZTQuery.SQL.Add('exec p1 s');
      AddZTQuery.ExecSQL;
      showmessage(AddZTQuery.Parameters.ParamValues['@DefaultPath'].value);说GO附近有语法错误,但在SQL SERVER的查询分析器中都好的。
      

  6.   

    谢谢上面这位提醒我,我现在把代码写成如下:AddZTQuery.sql.clear;
      AddZTQuery.sql.add('IF EXISTS (SELECT name FROM sysobjects  WHERE name = ''p1'' AND type = ''P'') DROP PROCEDURE p1');
      AddZTQuery.ExecSQL;  AddZTQuery.SQL.Clear;
      AddZTQuery.SQL.Add('create procedure p1 as declare @DefaultPath varchar select @DefaultPath=[filename] from master.dbo.sysdatabases where lower(name)=''master''');
      AddZTQuery.ExecSQL;  AddZTQuery.Close;
      AddZTQuery.SQL.Clear;
      AddZTQuery.SQL.Add('use master');
      AddZTQuery.SQL.Add('exec p1 s');
      AddZTQuery.ExecSQL;
      showmessage(AddZTQuery.Parameters.ParamValues['@DefaultPath'].value);但是,提示说,@DEFAULTPATH没有找到,怎么回事?谢谢!