CREATE PROCEDURE  backups 
  @paths  varchar(255)
AS
  backup  database  ticket  to  disk= @paths with  init
GO
这个是我的存储过程。调用方式如下:
  if saved.Execute
    then
      path:=saved.FileName;
   dm.DATAM.adp.Close;
   dm.DATAM.adp.Parameters.ParamByName('@paths').Value:=''+path+'';
   dm.DATAM.adp.ExecProc;
结果报错:说什么我的存储过程HAS TOO MANY ARGUMENT SPECIFIED
如果我把存储过程里面的参数去掉 ,用一个死的路径,它就可以调用成功,为什么呢????

解决方案 »

  1.   

    你把ADP.ProcedureName里面的存储过程名称贴出来看看.
    另外dm.DATAM.adp.Parameters.ParamByName('@paths').Value:=''+path+'';
    改成dm.DATAM.adp.Parameters.ParamByName('@paths').Value:=path;
      

  2.   

    可能路径没转换成,如 c:\aa 要变成 c:\\aa我估计而已
      

  3.   

    把StoredProc1,重新建立一遍!
    delphi的bug!
    试试!
      

  4.   

    存储建错了,像这样
    CREATE PROCEDURE  backups 
      @paths  varchar(255)
    AS
      exec('backup  database  ticket  to  disk='+ @paths+' with  init')
    GO
      

  5.   

    还是不可以,那么时候可以在存储过程里面拼写一个固定目录,但是文件名称位当前的日期!
    DISK='C:\'+GETDATE()+'.BAK'
    这样好象不可以通过, 应该怎么写呢 ?
      

  6.   

    ParamCheck 置为True
    为参数 Parameters下面的@Paths设置正确的类型!
    或者 不要用varchar
      

  7.   

    create proc p_t
    as
     declare @path varchar(20)
     declare @rq varchar(10)
     select @rq=convert(varchar(20),getdate(),120)
     set @path='c:\'+@rq+'.bak'
     print 'backup database boss001 to disk='''+@path+''''
     exec('backup database boss001 to disk='''+@path+'''')
    go