delphi7+sql2000,运行后按按钮出现,参数找不到的出错报告窗体内adoconnection,adoquery,datasource,button1
由于需要初始化加上一行sql语句,所以只能用query调用存储过程。
我的存储过程如下CREATE PROCEDURE sp_textcopy ( 
  @srvname    varchar (30), 
  @login      varchar (30), 
  @password    varchar (30), 
  @dbname      varchar (30), 
  @tbname      varchar (30), 
  @colname    varchar (30), 
  @filename    varchar (30), 
  @whereclause varchar (40), 
  @direction  char(1)) 
AS 
DECLARE @exec_str varchar (255) 
SELECT @exec_str = 
        'textcopy /S ' + @srvname + 
        ' /U ' + @login + 
        ' /P ' + @password + 
        ' /D ' + @dbname + 
        ' /T ' + @tbname + 
        ' /C ' + @colname + 
        ' /W "' + @whereclause + 
        '" /F ' + @filename + 
        ' /' + @direction 
EXEC master..xp_cmdshell @exec_str GO
代码如下:procedure TForm1.Button1Click(Sender: TObject);
var
str1:string;
str2:string;
begin
 with adoquery1 do
 begin
 Close;
 sql.clear;
 str1:='insert tb_d_HT_Contracttemplete values(1,0x)';
 str2:='exec sp_textcopy(''srvname'',''login'',''password'',''dbname'',''tbname'',''colname'',''filename'',''whereclause'',''direction'')';
 sql.Add(str1);
 sql.Add(str2);
 Parameters.ParamByName('srvname').Value:='coscoqdit-dp\coscoqd';
 Parameters.ParamByName('login').Value:='US_HT';
 Parameters.ParamByName('password').Value:='ht';
 Parameters.ParamByName('dbname').Value:='SMIS';
 Parameters.ParamByName('tbname').Value:='contracttemplete';
 Parameters.ParamByName('colname').Value:='contracttemplete';
 Parameters.ParamByName('filename').Value:='c:\12.doc';
 Parameters.ParamByName('whereclause').Value:='where contracttype=1';
 Parameters.ParamByName('direction').Value:='I';
 Open;
 end;
end;
点击按纽后,提示参数没找到。请各位大哥帮我看看,存储过程没问题,代码哪里错了?

解决方案 »

  1.   

    加上后,还是一样,提示参数srvname没找到,前面加上//后,就提示参数login没找到。怎么回事?
      

  2.   

    QUERY 是有问题,我遇见过,有时候要先编译才有用,你最好用COMMAND等,自己加入参数比较保险
      

  3.   

    human_2(风一帆)  那是说我的代码没有问题吗?我只验证过存储过程,在查询分析器内实现功能。
    可command我不很熟悉,有没有大哥能给个例子的。
      

  4.   

    可能你要用ADOQuery手动加参数了。使用Parameters对象手动加到ADOQuery中
      

  5.   

    手动估计是不行了,因为有些参数的value在运行过程中要改变的。
    还有没有其他的办法?
      

  6.   

    用Query参数前面需要加“:”
    exec pr_textcopy :svrname,...
      

  7.   

    回复人: meteorlg() ( ) 信誉:100 你的方法是对的
    不过执行时,中文提示信息变为“无法从SQL语句导出参数信息,准备命令前请设置参数信息”
      

  8.   

    改用ADOStoredProc1,把'insert tb_d_HT_Contracttemplete values(1,0x)加入到存储过程中
      

  9.   

    不会吧,真的没其他的办法了吗?比如query和storedprocl一起用,先用query初始化,再用storedprocl调用,不知道可行不?
      

  10.   

    你应该知道怎么在SQL2000的查询分析器中写你想来的SQL吧那么你只要让QUERY 中的SQL 和它一样
    就可以了,,,这意味着你要以SQL的语法在QUERY中去声响SQL的参数;