create  procedure procinsertKardTypeTable   --新增 卡的类型能 时间:2005-4-4
@KardTypeId          varchar(2) ,
@KardTypeName          varchar(50)
as
   begin
          begin  tran
          insert  KardTypeTable(KardTypeId,KardTypeName)
          values  (@KardTypeId,@KardTypeName)
          if      @@error<>0 or  @@rowcount<>1
          begin
          raiserror('操作不成功,也许是因为存在相同的卡类型编号',16,1)
          rollback tran
          return
          end
         
          if   @@error=0 
          commit tran
          else
          rollback tran
  endgoprocedure TKaTypeSetForm.Button1Click(Sender: TObject);
begin      ADOStoredProc1.Close;
      ADOStoredProc1.ProcedureName:='procinsertKardTypeTable';
      ADOStoredProc1.Parameters.Refresh;
      ADOStoredProc1.Parameters.ParamByName('@KardTypeId').Value:=trim(edit1.Text);
      ADOStoredProc1.Parameters.ParamByName('@KardTypeName').Value:=trim(edit2.Text);
      ADOStoredProc1.Prepared:=true;
     try
          ADOStoredProc1.ExecProc;
          showmessage('新增卡类型成功');
     except
          on E:exception do
          showmessage(E.Message);
   end;  end;     
我在  edit1 和 edit2  中 分别 输入 01 和 xx 
然后 单击  Button1  ,能把数据插入到表中我继续在      edit1 和 edit2  中 分别 输入 02 和 yy 出现下面的错误:
project gamesys.exe raised exception class eaccessviolation with messsage 
'access violation at address 753cda1 in module 'sqloledb.dll' read of 
address 00000018'. process stopped. use step or run to continue我真的不知道错在那里了?(注 KardTypeId 和 KardTypeName 没有任何限制)各位大哥,我是错在那里呢?盒子上的一位大哥说:ADOStoredProc1.ProcedureName改变了,那就是动态设置了,所以你得重新创建各个参数!可是我的  ADOStoredProc1.ProcedureName 没有改变啊?还有我也不知道怎么重新创建各个参数啊~谢谢 各位大哥!

解决方案 »

  1.   

    用 ADOStoredProc1.Parameters.CreateParamters 创建参数,然后对参数复值。如不会用请查看帮助文件,都有例子。
      

  2.   

    LZGUI 大哥,我创建的时候出现这样的错误:
    ADOStoredProc1.Close;
    ADOStoredProc1.ProcedureName:='procinsertKardTypeTable';
    ADOStoredProc1.Parameters.Refresh;
    ADOStoredProc1.Parameters.CreateParameter('@KardTypeId',ftstring,pdinput,2,nil);
    ADOStoredProc1.Parameters.CreateParameter('@KardTypeName',ftstring,pdinput,50,nil);
    ADOStoredProc1.Parameters.ParamByName('@KardTypeId').Value:=trim(edit1.Text);
    ADOStoredProc1.Parameters.ParamByName('@KardTypeName').Value:=trim(edit2.Text);编译时出现的错误是:
    incompatible types:'olevariant' and  'pointer'我应该怎样修改呢?谢谢!
      

  3.   

    LZGUI 大哥,还有个问题,向您请教:
    比如,我需要插入的数据是整型:
    是不是这样啊:
    ADOStoredProc1.Parameters.CreateParameter('@KardTypeId',ftinteger,pdinput,2,strtoint(edit1.text));还是:
    ADOStoredProc1.Parameters.CreateParameter('@KardTypeId',ftinteger,pdinput,2,edit1.text);请教 LZGUI 大哥 ,这里还需要 strtoint 吗?谢谢!