我用TADOstoredPro 执行一存储过程(SQL Server的),把这一段代码写在一个单击事件中,就是根据文件框输入的内容增加一记录,填好记录后第一次记录,单击后执行正确,再填写,再单击,然后提示 
   Access violation at Address 753D024E.Read of Address 00000018
这是怎么一回事呀?我该怎样觖决。

解决方案 »

  1.   

    试了,在添加完参数后,执行ExecProc()时出现错误。第一次没问题,第二次就出现问题。
      

  2.   

    谢谢,请帮忙看看
    if( EtBookID->Text.IsEmpty() || EtBookCName->Text.IsEmpty())
      {
         ShowMessage("ÇëÊäÈëͼÊé±êʶºÍͼÊéÃû³Æ");
         EtBookID->SetFocus();  //½¹µãÖØж¨Î»µ½¹ÜÀíÔ±ÐÕÃûÊäÈë¿ò
         return;
      }
      else
      {
        try
        {     //Ìí¼ÓͼÊéÖÖÀà
         bool ExistBook;
         Integer IsExits;
         AnsiString BookID, BookName, strSQL1, strSQL2, strSQL3;
         BookID = EtBookID->Text.Trim();
         BookName = EtBookCName->Text.Trim();     DM->ADOSP->ProcedureName = "AddBookCate";     DM->ADOSP->Parameters->Refresh();
         DM->ADOSP->Parameters->ParamByName("@BookCN")->Direction = pdInput;
         DM->ADOSP->Parameters->ParamByName("@BookCN")->DataType = ftString;
         DM->ADOSP->Parameters->ParamByName("@BookCN")->Value = BookID;     DM->ADOSP->Parameters->ParamByName("@BookCName")->Direction = pdInput;
         DM->ADOSP->Parameters->ParamByName("@BookCName")->DataType = ftString;
         DM->ADOSP->Parameters->ParamByName("@BookCName")->Value = BookName;     DM->ADOSP->Parameters->ParamByName("@Error")->Direction = pdReturnValue;
         DM->ADOSP->Parameters->ParamByName("@Error")->DataType = ftInteger;
         DM->ADOSP->Prepared = true;     DM->ADOSP->ExecProc();     IsExits = DM->ADOSP->Parameters->ParamByName("@Error")->Value;     if(IsExits == 1)
         {
         ShowMessage("ͼÊéÀà±ðÒÑ´æÔÚ£¬ÇëÖØÐÂÊäÈë");
         EtBookID->Text="";
         EtBookCName->Text="";
         DM->ADOBookCate->SQL->Clear();
         //DM->ADOBookCate->SQL->Add("Select * from Book_Category");
         DM->ADOBookCate->SQL->Add("Exec FindBookCate");
         DM->ADOBookCate->ExecSQL();
         DM->ADOBookCate->Active = true;
         }
         else
         {
           ShowMessage("ͼÊéÀà±ðÌí¼Ó³É¹¦!");
           EtBookID->Text = "";
           EtBookCName->Text = "";
           DM->ADOBookCate->SQL->Clear();
         // DM->ADOBookCate->SQL->Add("Select * from Book_Category");
          DM->ADOBookCate->SQL->Add("Exec FindBookCate");
          DM->ADOBookCate->ExecSQL();
          DM->ADOBookCate->Active = true;
         }
        }
        catch(...)
        {
         ShowMessage("Êý¾Ý¿âÁ¬½Ó´íÎó");
         EtBookID->Text="";
         EtBookCName->Text="";
        }