帮我看看为什么会出现这个错误?

时间:2023-01-10 11:53:13
单独进行添加用户或添加项目都没有问题,但是不能进行混和添加,即添加完用户后通过菜单再选择添加项目或是添加完项目后再添加用户就会出现“对象已在集合中,无法追加”,请各位指点,谢了!
是不是对ADO组件操作方面的问题,我共用一个ADOConnection,但是ADOCommand没有共用,是不是可以共用,应该怎么操作,不共用又应该如何呢?

8 个解决方案

#1


说清楚一点。

#2


不是很明白;

#3


首先我有两个窗体,一个用来添加用户,一个用来添加项目,通过主菜单分别可以进入到这两个窗体;

如果通过菜单只进行添加用户,无论进行多少次添加都没有任何问题
同样如果通过菜单只进行添加项目也是

但是如果我先从菜单选择添加用户,对用户进行添加操作完毕后(到此都是正常的),再从菜单选择添加项目进入到添加项目窗体就会出现“对象已在集合中,无法追加”。同样,在我选择添加完项目后在添加用户也是出现该问题

不知各位清楚否,一定要帮忙给我看看

#4


错误信息提示为:
Cannot perform this operation on a closed dataset

#5


代碼有問題!貼出來!關閉的數據集又訪問!

#6


好的,明天贴出来!发现对ADOCommand和ADODataSet存在一些不清楚的概念问题,有的用ADOCommand行,有的非用它才行,想必是没有理解清楚!

#7


呵呵,话的都不会说了

#8


void __fastcall Taddur::useryesClick(TObject *Sender)
{
  AnsiString username,psd,popedom,mail;
  int usergroup;

  username=usernametxt->Text;
  psd=passwordtxt->Text;
  usergroup=StrToInt(usergrouptxt->Items->Strings[usergrouptxt->ItemIndex]);
  popedom=popedomlist->Items->Strings[popedomlist->ItemIndex];
  mail=mailtxt->Text;

  //判断用户名和密码的合法性
  if((username.Length()<=10)&&(psd.Length()<=8)&&((mail=="")||mail.Pos("@")))
  {
   loginuser->lgConnection1->Connected=true;   
   introdataset->Close();
   introdataset->CommandText="select * from User_Info where UI_NAME=:username";
   introdataset->Parameters->ParamByName("username")->Value = usernametxt->Text;
   introdataset->Open();
   if(introdataset->RecordCount==0) //判断用户名的唯一性
   {
    //问题1:不知为何用ADODataSet就不行,用ADOCommand就行,是不是我对前面的操作有误 
    
    //aduserdataset->Close();
    //aduserdataset->CommandText = "insert into User_Info values('"+username+"','"
    //+psd+"','"+popedom+"','"+usergroup+"','"+mail+"')";
    //aduserdataset->Open();

    ADOCommand1->CommandText = "insert into User_Info values('"+username+"','"+psd
    +"','"+popedom+"','"+usergroup+"','"+mail+"')";
    ADOCommand1->Execute();

    //以下是为了将成功插入的信息显示出来
    introdataset->Close();
    introdataset->CommandText="select * from User_Info where UI_NAME=:username";
    introdataset->Parameters->ParamByName("username")->Value = usernametxt->Text;
    introdataset->Open();
    
    nametxt->Text="用户名:"+introdataset->FieldByName("UI_NAME")->AsString;
    psdtxt->Text="密码:"+introdataset->FieldByName("UI_PSD")->AsString;
    popetxt->Text="用户类型:"+introdataset->FieldByName("UPI_TYPE")->AsString;
    grouptxt->Text="用户组:"+introdataset->FieldByName("UI_GROUP")->AsString;
    emailtxt->Text="用户邮箱:"+introdataset->FieldByName("UI_MAIL")->AsString;

    //问题2:连续添加时存在当连续两次单击此按钮时,没有输入任何信息,但是由运行结果可 以看到,仍然再进行添加操作,而且好像还是以上次的输入在往里添加,因为会出现“该用户名已存在,要重新输入吗?如果选择NO,将退出添加操作”(下面代码中会出现)的对话框,虽然这种情况下无法输入到数据库中,但是这并不是我希望的结果,请问如何解决此问题

    //可连续添加多个用户
    useryes->Caption="继续";
    //清空原来填写信息
    usernametxt->Text="";
    passwordtxt->Text="";
    usergrouptxt->ItemIndex=0;
    popedomlist->ItemIndex=0;
    mailtxt->Text="";
    }
    else
     if(MessageDlg("该用户名已存在,要重新输入吗?如果选择NO,将退出添加操作!"
     ,mtConfirmation, TMsgDlgButtons() << mbYes << mbNo, 0) == mrYes)
       {
        usernametxt->Text="";
        usernametxt->SetFocus();
       }
     else
       Close();
   }
   else
    {
     if(MessageDlg("非法输入,要重新输入吗?如果选择NO,将退出添加操作!"
     ,mtConfirmation, TMsgDlgButtons() << mbYes << mbNo, 0) == mrYes)
     {
      if(username.Length()>10)
       {
        usernametxt->Text="";
        usernametxt->SetFocus();
       }
      if(psd.Length()>8)  passwordtxt->Text="";
      if(psd.Length()>8&&username.Length()<=10) passwordtxt->SetFocus();
      if(!mail.Pos("@")) mailtxt->Text="";
      if(!mail.Pos("@")&&username.Length()<=10&&psd.Length()<=8) 
         mailtxt->SetFocus();
     }
     else
      Close();
    }
}

#1


说清楚一点。

#2


不是很明白;

#3


首先我有两个窗体,一个用来添加用户,一个用来添加项目,通过主菜单分别可以进入到这两个窗体;

如果通过菜单只进行添加用户,无论进行多少次添加都没有任何问题
同样如果通过菜单只进行添加项目也是

但是如果我先从菜单选择添加用户,对用户进行添加操作完毕后(到此都是正常的),再从菜单选择添加项目进入到添加项目窗体就会出现“对象已在集合中,无法追加”。同样,在我选择添加完项目后在添加用户也是出现该问题

不知各位清楚否,一定要帮忙给我看看

#4


错误信息提示为:
Cannot perform this operation on a closed dataset

#5


代碼有問題!貼出來!關閉的數據集又訪問!

#6


好的,明天贴出来!发现对ADOCommand和ADODataSet存在一些不清楚的概念问题,有的用ADOCommand行,有的非用它才行,想必是没有理解清楚!

#7


呵呵,话的都不会说了

#8


void __fastcall Taddur::useryesClick(TObject *Sender)
{
  AnsiString username,psd,popedom,mail;
  int usergroup;

  username=usernametxt->Text;
  psd=passwordtxt->Text;
  usergroup=StrToInt(usergrouptxt->Items->Strings[usergrouptxt->ItemIndex]);
  popedom=popedomlist->Items->Strings[popedomlist->ItemIndex];
  mail=mailtxt->Text;

  //判断用户名和密码的合法性
  if((username.Length()<=10)&&(psd.Length()<=8)&&((mail=="")||mail.Pos("@")))
  {
   loginuser->lgConnection1->Connected=true;   
   introdataset->Close();
   introdataset->CommandText="select * from User_Info where UI_NAME=:username";
   introdataset->Parameters->ParamByName("username")->Value = usernametxt->Text;
   introdataset->Open();
   if(introdataset->RecordCount==0) //判断用户名的唯一性
   {
    //问题1:不知为何用ADODataSet就不行,用ADOCommand就行,是不是我对前面的操作有误 
    
    //aduserdataset->Close();
    //aduserdataset->CommandText = "insert into User_Info values('"+username+"','"
    //+psd+"','"+popedom+"','"+usergroup+"','"+mail+"')";
    //aduserdataset->Open();

    ADOCommand1->CommandText = "insert into User_Info values('"+username+"','"+psd
    +"','"+popedom+"','"+usergroup+"','"+mail+"')";
    ADOCommand1->Execute();

    //以下是为了将成功插入的信息显示出来
    introdataset->Close();
    introdataset->CommandText="select * from User_Info where UI_NAME=:username";
    introdataset->Parameters->ParamByName("username")->Value = usernametxt->Text;
    introdataset->Open();
    
    nametxt->Text="用户名:"+introdataset->FieldByName("UI_NAME")->AsString;
    psdtxt->Text="密码:"+introdataset->FieldByName("UI_PSD")->AsString;
    popetxt->Text="用户类型:"+introdataset->FieldByName("UPI_TYPE")->AsString;
    grouptxt->Text="用户组:"+introdataset->FieldByName("UI_GROUP")->AsString;
    emailtxt->Text="用户邮箱:"+introdataset->FieldByName("UI_MAIL")->AsString;

    //问题2:连续添加时存在当连续两次单击此按钮时,没有输入任何信息,但是由运行结果可 以看到,仍然再进行添加操作,而且好像还是以上次的输入在往里添加,因为会出现“该用户名已存在,要重新输入吗?如果选择NO,将退出添加操作”(下面代码中会出现)的对话框,虽然这种情况下无法输入到数据库中,但是这并不是我希望的结果,请问如何解决此问题

    //可连续添加多个用户
    useryes->Caption="继续";
    //清空原来填写信息
    usernametxt->Text="";
    passwordtxt->Text="";
    usergrouptxt->ItemIndex=0;
    popedomlist->ItemIndex=0;
    mailtxt->Text="";
    }
    else
     if(MessageDlg("该用户名已存在,要重新输入吗?如果选择NO,将退出添加操作!"
     ,mtConfirmation, TMsgDlgButtons() << mbYes << mbNo, 0) == mrYes)
       {
        usernametxt->Text="";
        usernametxt->SetFocus();
       }
     else
       Close();
   }
   else
    {
     if(MessageDlg("非法输入,要重新输入吗?如果选择NO,将退出添加操作!"
     ,mtConfirmation, TMsgDlgButtons() << mbYes << mbNo, 0) == mrYes)
     {
      if(username.Length()>10)
       {
        usernametxt->Text="";
        usernametxt->SetFocus();
       }
      if(psd.Length()>8)  passwordtxt->Text="";
      if(psd.Length()>8&&username.Length()<=10) passwordtxt->SetFocus();
      if(!mail.Pos("@")) mailtxt->Text="";
      if(!mail.Pos("@")&&username.Length()<=10&&psd.Length()<=8) 
         mailtxt->SetFocus();
     }
     else
      Close();
    }
}