存储过程如下:
CREATE PROCEDURE blgxjtotal
@id int,
@amount int
as
update badnesstemp1 set proamount = @amount where id = @id
GO
源代码如下:
adoquery1.First;
  while not adoquery1.Eof do
    begin
      ADOStoredProc1.close;
      ADOStoredProc1.ProcedureName := 'blgxjtotal;1';
      ADOStoredProc1.Parameters.Refresh ;
      ADOStoredProc1.Parameters.ParamByName('@id').Value := adoquery1.Fields[0].AsInteger;
        ADOStoredProc1.Parameters.ParamByName('@amount').Value := adoquery1.Fields[1].AsInteger;
      ADOStoredProc1.prepared:=true;
      ADOStoredProc1.ExecProc;
      adoquery1.Next;
    end;
 提示:access violation ………… in module 'sqloledb.dll',请教各位达人,代码哪里出错呢?

解决方案 »

  1.   

    我没有细看代码,不过这个问题既然提示sqloledb.dll有错,那应该是你的sqlserver本身有问题,升级试试看。
    另外,在dll中创建ADO控件前需要加入CoInitia...这条语句,在Unit ActiveX里。
      

  2.   

    按照 mdac , 在随delphi 的安装盘,或可从微软的网站下载如还不行,安装 sql server 的客户端
      

  3.   

    执行第一条记录的时候可以,到第二条就不行了;另外我已经装了sql server 的客户端
      

  4.   

    ADOStoredProc1所更改的表不能是adoquery1中正在打开的表?
    另外:建议楼主不要使用默认的名字adoquery1,ADOStoredProc1等
      

  5.   

    ADOStoredProc1.Close;
    ADOStoredProc1.Parameters.Clear;
    ADOStoredProc1.ProcedureName:='blgxjtotal;1';
    ADOStoredProc1.Parameters.CreateParameter
    ('@id',ftstring,pdinput,参数长度,adoquery1.Fields[0].AsInteger);ADOStoredProc1.Parameters.CreateParameter
    ('@amount',ftinteger,pdinput,参数长度,adoquery1.Fields);
    ADOStoredProc1.Open;看这样行不行啊...
      

  6.   

    不要使用ADOStoredProc调用存储过程以上可以使用adoquery1.First;
      while not adoquery1.Eof do
        beginwith TADOQuery.Create(Self) do
    try
      Connection:=ADO数据连接;
      SQL.Add('EXEC blgxjtotal'+adoquery1.Fields[0].AsString+','+adoquery1.Fields[1].AsString);
      ExecSQL;
    finally
      Close;
      Free;
    end;adoquery1.Next;
        end;
      

  7.   

    'EXEC blgxjtotal'
    应该为
    'EXEC blgxjtotal '
    多加一个空格