是不是对ADO组件操作方面的问题,我共用一个ADOConnection,但是ADOCommand没有共用,是不是可以共用,应该怎么操作,不共用又应该如何呢?
8 个解决方案
#1
说清楚一点。
#2
不是很明白;
#3
首先我有两个窗体,一个用来添加用户,一个用来添加项目,通过主菜单分别可以进入到这两个窗体;
如果通过菜单只进行添加用户,无论进行多少次添加都没有任何问题
同样如果通过菜单只进行添加项目也是
但是如果我先从菜单选择添加用户,对用户进行添加操作完毕后(到此都是正常的),再从菜单选择添加项目进入到添加项目窗体就会出现“对象已在集合中,无法追加”。同样,在我选择添加完项目后在添加用户也是出现该问题
不知各位清楚否,一定要帮忙给我看看
如果通过菜单只进行添加用户,无论进行多少次添加都没有任何问题
同样如果通过菜单只进行添加项目也是
但是如果我先从菜单选择添加用户,对用户进行添加操作完毕后(到此都是正常的),再从菜单选择添加项目进入到添加项目窗体就会出现“对象已在集合中,无法追加”。同样,在我选择添加完项目后在添加用户也是出现该问题
不知各位清楚否,一定要帮忙给我看看
#4
错误信息提示为:
Cannot perform this operation on a closed dataset
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();
}
}
{
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
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();
}
}
{
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();
}
}