急救,救济

nbwangtw 2004-04-16 01:58:54
我在ADOquery1BeforePost()中检验输入的学号是不是已经存在的学号,
如果已经存在则不输入数据库(ADOQuery1->Cancel()),但是总是出现异常说主键重复...多谢指教:代码如下:(数据库中sno是主码)
void __fastcall TF_stu_inf::ADOQuery1BeforePost(TDataSet *DataSet)
{
ADOQuery1->Close();
ADOQuery1->SQL->Clear();
ADOQuery1->SQL->Add("select * from student where sno=:T_sno");
ADOQuery1->Parameters->ParamByName("T_sno")->Value=MaskEdit1->Text;
ADOQuery1->Open();
if(ADOQuery1->RecordCount!=0)
{
ShowMessage("输入学号已存在,请检查输入信息");
ADOquery1->Cancel();
}}

...全文
266 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
comefirst 2004-04-23
  • 打赏
  • 举报
回复
ADOquery1->Cancel();

你这里只是对数据库的查询,没有修改,

怎么用Cancel取消操作呢?

Call Cancel to undo modifications made to one or more fields belonging to the active record. As long as those changes are not already posted, Cancel returns the record to its previous state, and sets the dataset state to dsBrowse.
lmxlj 2004-04-23
  • 打赏
  • 举报
回复
注意下,判断记录集的空不用记录数来判断,用记录集的头和尾同时为真来判断。
lmxlj 2004-04-22
  • 打赏
  • 举报
回复
void __fastcall TF_stu_inf::ADOQuery1BeforePost(TDataSet *DataSet)
{
ADOQuery1->Close();
ADOQuery1->SQL->Clear();
ADOQuery1->SQL->Add("select * from student where sno=:T_sno");
ADOQuery1->Parameters->ParamByName("T_sno")->Value=MaskEdit1->Text;
ADOQuery1->Open();
if(!(ADOQuery1->Bof && ADOQuery1->Eof))
{
ShowMessage("输入学号已存在,请检查输入信息");
ADOquery1->Cancel();
}}
junzhang66 2004-04-16
  • 打赏
  • 举报
回复
你的想法我明白,但你写得我不太明了!
ADOQuery1->Parameters->ParamByName("T_sno")->Value=StrToInt(MaskEdit1->Text)
另外你这样也达不到添加功能阿
Leevy 2004-04-16
  • 打赏
  • 举报
回复
ADOquery1->Cancel();

?????????????????????????

无效。
风斧 2004-04-16
  • 打赏
  • 举报
回复
我很菜,看不出问题来,但是你为什么不充分利用数据库的完整性规则,捕获异常呢。如果小系统还好办,如果表很多,这样写很麻烦的。我觉得这样的思路是foxpro的思路,不值得提倡。
我一直在用vfp,就是你这样做的,不过正打算鸟枪换步枪。

1,178

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder 数据库及相关技术
社区管理员
  • 数据库及相关技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧