C++Builder 程序员博客
8 Aug
问题1:
在插入新数据时,如果数据表中原来有和相同的数据,就用一个对话框提示,信息的数据重复!
问题2:
在信息查询时,如果没有满足查询条件的记录,就有一个对话框提示,没有查到相应信息!
问题3:
在信息查询时,如果有5条满足条件的记录,就用一个对话框提示,满足条件的信息有5条!
SQL2000数据库。假设数据表的名称为工号表,字段为:工号。
每个问题20分。麻烦各位帮忙!谢谢!!
问题1用1楼的方式效率比较低,可靠性差,其增加了代码的复杂度,应该是对不可重复的数据字段建立唯一索引,直接执行插入sql语句,遇到重复记录时会报错,程序直接拦截错误并判断错误类型,如果是记录重复则显式
问题2/3其实是一回事,就是检查返回结果的记录数,如果是只检查满足条件的记录数(不要记录的数据),可以用select count(*) from 工号表 where 工号=?
楼上的兄弟,以你的看法以下的代码有什么错误?麻烦你帮我修改一下!!谢谢!!
void __fastcall TForm2::Button1Click(TObject *Sender)
{
ADOQuery1->Close();
ADOQuery1->SQL->Clear();
//ADOQuery1->SQL->Add("insert into 员工信息表 () values ()");
ADOQuery1->SQL->Add("insert into 员工信息表 (民族,性别,部门,办公室,学历,政治面貌,职位,职称,婚姻,开户银行,姓名,工号,年龄,籍贯,住宅电话,手机,办公室电话,家庭住址,身份证号,毕业学校,银行卡号,奖金,工资) values (:minzu,:xingbie,:bumen,:bangongshi,:xueli,:zhengzhimianmao,:zhiwei,:zhicheng,:hunyin,:kaihuyinhang,:xingming,:gonghao,:nianling,:jiguan,:zhuzhai,:shouji,:bangongshidianhua,:jiatingzhuzhi,:shenfenzhenghao,:biyexuexiao,:yinhangkahao,:jiangjin,:gongzi)");
ADOQuery1->Parameters->ParamByName("xingming")->Value=Edit1->Text;
ADOQuery1->Parameters->ParamByName("gonghao")->Value=Edit2->Text;
ADOQuery1->Parameters->ParamByName("nianling")->Value=Edit3->Text;
ADOQuery1->Parameters->ParamByName("jiguan")->Value=Edit5->Text;
ADOQuery1->Parameters->ParamByName("zhuzhai")->Value=Edit6->Text;
ADOQuery1->Parameters->ParamByName("shouji")->Value=Edit7->Text;
ADOQuery1->Parameters->ParamByName("bangongshidianhua")->Value=Edit8->Text;
ADOQuery1->Parameters->ParamByName("jiatingzhuzhi")->Value=Edit9->Text;
ADOQuery1->Parameters->ParamByName("shenfenzhenghao")->Value=Edit10->Text;
ADOQuery1->Parameters->ParamByName("biyexuexiao")->Value=Edit11->Text;
ADOQuery1->Parameters->ParamByName("yinhangkahao")->Value=Edit12->Text;
ADOQuery1->Parameters->ParamByName("minzu")->Value=ComboBox1->Text;
ADOQuery1->Parameters->ParamByName("xingbie")->Value=ComboBox2->Text;
ADOQuery1->Parameters->ParamByName("bumen")->Value=ComboBox3->Text;
ADOQuery1->Parameters->ParamByName("bangongshi")->Value=ComboBox4->Text;
ADOQuery1->Parameters->ParamByName("xueli")->Value=ComboBox5->Text;
ADOQuery1->Parameters->ParamByName("zhengzhimianmao")->Value=ComboBox6->Text;
ADOQuery1->Parameters->ParamByName("zhiwei")->Value=ComboBox7->Text;
ADOQuery1->Parameters->ParamByName("zhicheng")->Value=ComboBox8->Text;
ADOQuery1->Parameters->ParamByName("hunyin")->Value=ComboBox9->Text;
ADOQuery1->Parameters->ParamByName("kaihuyinhang")->Value=ComboBox10->Text;
ADOQuery1->Parameters->ParamByName("jiangjin")->Value=Edit4->Text;
ADOQuery1->Parameters->ParamByName("gongzi")->Value=Edit13->Text;
ADOQuery1->ExecSQL();
if(ADOQuery1->RecordCount>0)
{
Application->MessageBoxA("信息已经存在","提示");
}
//if(ADOQuery1->RecordCount>0)
//{
// MessageBox(0,"已经存在!","提示",MB_OK);
//}
Application->MessageBoxA("信息添加成功!","提示");
//ShowMessage("信息添加成功!");
//ADOQuery1->Open();
}
这个代码调试没有错误,但是一用来操作,就提示错误!
什么时候沦落到改错的地步了,哎!
Inser和select能一样吗?既然你已经插入了,记录肯定有了,你还查个屁。
楼上的兄弟,我把我的意思重新说一下吧!
我是想,在插入前做检验,如果重复了,就提示信息已存在。如果不重复,就执行插入,并提示插入成功!
不是早已经告诉你了吗????????????????????????????
void __fastcall TForm2::Button1Click(TObject *Sender) { ADOQuery->Close(); ADOQuery->SQL->Clear() ; ADOQuery->SQL->Add("select 工号 from 工号表 where 工号 = :gonghao"); ADOQuery->Parameters->ParamByName("gonghao")->Value = Edit1->Text;//Edit中的数据为要录入或查询的 ADOQuery->Open() ; if(ADOQuery->RecordCount==0) { MessageBox(0,"不存在!","提示",MB_OK); ADOQuery1-> Close(); return; } ADOQuery1-> Close(); ADOQuery1-> SQL-> Clear(); //ADOQuery1-> SQL-> Add("insert into 员工信息表 () values ()"); ADOQuery1-> SQL-> Add("insert into 员工信息表 (民族,性别,部门,办公室,学历,政治面貌,职位,职称,婚姻,开户银行,姓名,工号,年龄,籍贯,住宅电话,手机,办公室电话,家庭住址,身份证号,毕业学校,银行卡号,奖金,工资) values (:minzu,:xingbie,:bumen,:bangongshi,:xueli,:zhengzhimianmao,:zhiwei,:zhicheng,:hunyin,:kaihuyinhang,:xingming,:gonghao,:nianling,:jiguan,:zhuzhai,:shouji,:bangongshidianhua,:jiatingzhuzhi,:shenfenzhenghao,:biyexuexiao,:yinhangkahao,:jiangjin,:gongzi)"); ADOQuery1-> Parameters-> ParamByName("xingming")-> Value=Edit1-> Text; ADOQuery1-> Parameters-> ParamByName("gonghao")-> Value=Edit2-> Text; ADOQuery1-> Parameters-> ParamByName("nianling")-> Value=Edit3-> Text; ADOQuery1-> Parameters-> ParamByName("jiguan")-> Value=Edit5-> Text; ADOQuery1-> Parameters-> ParamByName("zhuzhai")-> Value=Edit6-> Text; ADOQuery1-> Parameters-> ParamByName("shouji")-> Value=Edit7-> Text; ADOQuery1-> Parameters-> ParamByName("bangongshidianhua")-> Value=Edit8-> Text; ADOQuery1-> Parameters-> ParamByName("jiatingzhuzhi")-> Value=Edit9-> Text; ADOQuery1-> Parameters-> ParamByName("shenfenzhenghao")-> Value=Edit10-> Text; ADOQuery1-> Parameters-> ParamByName("biyexuexiao")-> Value=Edit11-> Text; ADOQuery1-> Parameters-> ParamByName("yinhangkahao")-> Value=Edit12-> Text; ADOQuery1-> Parameters-> ParamByName("minzu")-> Value=ComboBox1-> Text; ADOQuery1-> Parameters-> ParamByName("xingbie")-> Value=ComboBox2-> Text; ADOQuery1-> Parameters-> ParamByName("bumen")-> Value=ComboBox3-> Text; ADOQuery1-> Parameters-> ParamByName("bangongshi")-> Value=ComboBox4-> Text; ADOQuery1-> Parameters-> ParamByName("xueli")-> Value=ComboBox5-> Text; ADOQuery1-> Parameters-> ParamByName("zhengzhimianmao")->Value=ComboBox6->Text; ADOQuery1-> Parameters-> ParamByName("zhiwei")-> Value=ComboBox7-> Text; ADOQuery1-> Parameters-> ParamByName("zhicheng")-> Value=ComboBox8-> Text; ADOQuery1-> Parameters-> ParamByName("hunyin")-> Value=ComboBox9-> Text; ADOQuery1-> Parameters-> ParamByName("kaihuyinhang")-> Value=ComboBox10-> Text; ADOQuery1-> Parameters-> ParamByName("jiangjin")-> Value=Edit4-> Text; ADOQuery1-> Parameters-> ParamByName("gongzi")-> Value=Edit13-> Text; ADOQuery1-> ExecSQL(); }
注意顺序!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
在任何时候ADOQuery1->ExecSQL();都应该放在try……catch语句中,并且在catch语句中检查可能出现的错误,其中包括非重复索引冲突,但由于不同的数据库,甚至不同的数据库引擎可能报错的错误号不一样,所以自己要调试一下才晓得
6楼的兄弟,我说的是如果,记录已经存在那么提示,记录已经存在,不是让它检索提示不存在!!
要俺老命
if(ADOQuery->RecordCount>0)
{
MessageBox(0,"存在!","提示",MB_OK);
ADOQuery1-> Close();
return;
}
RecordCount仅仅用于查询结果返回的记录数,不能作为ExecSQL影响的记录数,ExecSQL本身就有返回值
算了,还是再看看资料后再编程吧,如果在学习过程中这个样子尚且让人恼火,如果是在工作中,可以预见这个项目是多么的糟糕
呵呵,直接DBGr控件吧
上面答案已经很明确了,问题一的解决方法有两个,1是先查询一下,看要插入的数据是不是存在,存在的话就提示,不存在的话就插入。2是插入的时候用try catch 来捕捉错误,如果是主键重复就提示错误。
问题二、三就就直接判断查询的结果记录数就行了,根据返回的记录数来做相应提示。
该回复于2008-07-10 02:40:17被版主删除