求救!!登录窗口连接数据库不成功

hatcathj 2009-08-12 11:48:36
做了一个简单的登录窗口,有身份验证功能,运行成功后,输入正确的用户名和口令(存在于数据库中的),出现提示:该用户名不存在。

代码如下.望各位高手不吝赐教,先谢谢了

ps:本人是菜鸟,这问题困扰我快一天了,恳请高手们帮帮我

m_nTimes++; //登录次数
//首先根据用户选择的是教务还是学生,确定查询哪个数据表
if(RadioGroup1->ItemIndex ==0)
{
//查询EduManager.db数据表
// 首先查询是否有该用户名
DataMod->EduManagQuery->SQL->Clear() ;
DataMod->EduManagQuery->Close() ;

AnsiString queryString= "select * from EduManager";
queryString +=" where EMName= ";
queryString +=" \' ";
queryString +=UserEdt->Text.c_str() ;
queryString +=" \' ";

try
{
DataMod->EduManagQuery->SQL->Add(queryString);
// DataMod->EduManagQuery->ExecSQL() ;
DataMod->EduManagQuery->Open() ;
DataMod->EduManagQuery->Active =true;
}
catch(EDBEngineError &E)
{
MessageBox(this,"不能查询数据表","错误",MB_OK);
ModalResult=mrAbort;
return;
}

//DataMod->EduManagQuery->First() ;
if(DataMod->EduManagQuery->RecordCount==0)
// !DataMod->EduManagQuery->IsEmpty()
{
//如果查询表中记录为0,表示没有该用户
if(m_nTimes==3)//如果已经出现三次错误,则显示该用户不合法
{
MessageBox(NULL,"您是不合法用户","连接数据库错误",MB_OK);
ModalResult=mrAbort;

Close();//关闭该对话框
}
else
{
//让用户重新输入用户名
MessageBox(NULL,"用户名不存在,请重新输入","登录数据库错误",MB_OK);
UserEdt->Text =""; //清空用户名输入框
PasswordEdt->Text ="";
UserEdt->SetFocus() ; //将光标移动到用户输入编辑框中
ModalResult=mrNone;
}
}
else //如果存在用户名,则判断口令是否正确
{
queryString += " and EPassword = ";
queryString +=" \' ";
queryString +=PasswordEdt->Text.c_str() ;
queryString +=" \' ";


try
{
DataMod->EduManagQuery->SQL->Clear();
DataMod->EduManagQuery->SQL->Add(queryString);
DataMod->EduManagQuery->Open() ;
//DataMod->EduManagQuery->ExecSQL() ;
DataMod->EduManagQuery->Active =true;
}
catch(EDBEngineError &E)
{
MessageBox(this,"不能查询数据库","错误",MB_OK);
ModalResult=mrAbort;
return;
}

//DataMod->EduManagQuery->First() ;
if( DataMod->EduManagQuery->RecordCount==0 ) //如果查询表中的记录为0,表示输入的口令不正确
//!DataMod->EduManagQuery->IsEmpty()
{
if(m_nTimes==3)
{
//如果已经出现三次错误,则显示该用户不合法,强行退出
MessageBox(NULL,"您不是合法用户","登录数据库错误",MB_OK);
ModalResult=mrAbort;

Close(); //关闭该对话框
}
else //让用户重新输入口令
{
MessageBox(NULL,"口令不正确,请重新输入","登录数据库错误",MB_OK);
PasswordEdt->Text ="";
ModalResult=mrNone;
}
DataMod->EduManagQuery->Close() ;
}
else
{
//找到记录,关闭数据表,并返回到主窗体中
DataMod->EduManagQuery->Close() ;
ModalResult=mrOk;
}
}
}

else
{
//学生登录,查询student表
DataMod->StudentQuery->SQL->Clear() ;
DataMod->StudentQuery->Close() ;


//首先查询是否有该用户名
AnsiString queryString="select * from student" ;
queryString += " where StudentNo= ";
queryString +=" \' ";
queryString +=UserEdt->Text ;
queryString +=" \' ";
try
{
DataMod->StudentQuery->SQL->Add(queryString);
//DataMod->StudentQuery->ExecSQL() ;
DataMod->EduManagQuery->Open() ;
DataMod->StudentQuery->Active =true;
}
catch(EDBEngineError &E)
{
MessageBox(this,"不能查询数据表","错误",MB_OK);
ModalResult=mrAbort;
return;
}

if(DataMod->StudentQuery->RecordCount ==0)//如果查询表中的记录为0,表明没有该用户
// !DataMod->EduManagQuery->IsEmpty()
{
if(m_nTimes==3)//如果输入错误次数已经超过三次,该用户为不合法用户
{
MessageBox(NULL,"您不是合法用户!","登录数据库错误",MB_OK);
ModalResult=mrAbort;

Close();//关闭该对话框
}
else //让用户重新输入用户名
{
MessageBox(NULL,"用户名不存在,请重新输入","登录数据库错误",MB_OK);
UserEdt->Text ="";
UserEdt->SetFocus() ;
PasswordEdt->Text ="";
ModalResult=mrNone;
}
}
else //用户名存在,判断口令是否正确
{
queryString +=" and SPassword = ";
queryString +=" \' ";
queryString +=PasswordEdt->Text ;
queryString +=" \' ";


try
{
DataMod->StudentQuery->SQL->Add(queryString);
//DataMod->StudentQuery->ExecSQL() ;
DataMod->EduManagQuery->Open() ;
DataMod->StudentQuery->Active =true;
}
catch(EDBEngineError &E)
{
MessageBox(this,"不能查询数据表","错误",MB_OK);
ModalResult=mrAbort;
return;
}


if(DataMod->StudentQuery->RecordCount ==0) //如果查询表中的记录为0,表示输入的口令不正确
// !DataMod->EduManagQuery->IsEmpty()

{
if(m_nTimes==3)
{
//如果已经出现三次错误,则显示该用户不合法,强行退出
MessageBox(NULL,"您不是合法用户","登录数据库错误",MB_OK);
ModalResult=mrAbort;

Close(); //关闭该对话框
}
else //让用户重新输入口令
{
MessageBox(NULL,"口令不正确,请重新输入","登录数据库错误",MB_OK);
PasswordEdt->Text ="";
ModalResult=mrNone;
}
DataMod->StudentQuery->Close() ;
}
else
{
//找到记录,关闭数据表,并返回到主窗体中
DataMod->StudentQuery->Close() ;
ModalResult=mrOk;
}

}
}
}


另:由于老出现以上错误,我试图把把DataMod->StudentQuery->RecordCount ==0用!DataMod->EduManagQuery->IsEmpty()来代替,但这时又会出现下面的错误提示 :Project Project1.exe raised exception class EDBEngineError with message 'Invalid use of keyword'. Token:fromEduManager
line Numeber:1'.Process stopped.Use Step or Run to continue.
...全文
556 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
马大叔小舅舅 2010-03-09
  • 打赏
  • 举报
回复
必然是空格的问题,用上Trim()
flowercity 2009-12-23
  • 打赏
  • 举报
回复
你设置断点,然后看queryString的值就知道语法错误了
flowercity 2009-12-23
  • 打赏
  • 举报
回复
'" +Trim(Edit2->Text)+ "'

应该这样写才正确
dzkddwm 2009-11-16
  • 打赏
  • 举报
回复
设个断点,看看是在段提示的嘛...
再仔细检察一下SQL语句对不!
firemem 2009-11-15
  • 打赏
  • 举报
回复
AnsiString queryString= "select * from EduManager";
queryString +=" where EMName= ";
queryString +=" \' ";
queryString +=UserEdt->Text.c_str() ;
queryString +=" \' ";
这一句有错误
lly_oldf 2009-11-14
  • 打赏
  • 举报
回复
断点单步调试,主要看看判断用字符串的值,注意空格什么的~应该不是啥大问题
lovetsfuer 2009-11-14
  • 打赏
  • 举报
回复
你断点跟踪一下吧,是不是数据类型不对啊?
代码太长了,看不下去
熊宝儿 2009-11-03
  • 打赏
  • 举报
回复
我就是这个不太清楚,希望各个高手不吝赐教
EagleFew 2009-10-28
  • 打赏
  • 举报
回复
实在是没有耐心看
javaboy_2008 2009-10-27
  • 打赏
  • 举报
回复
ADOQuery1->Close();
ADOQuery1->SQL->Clear();
String s1;
s1="Select * from yh where Yname like'"+Trim(Edit1->Text)+"'" +
"and YPassword like'"+Trim(Edit2->Text)+"'";
ADOQuery1->SQL->Add(s1);
ADOQuery1->Open();
if(!ADOQuery1->IsEmpty() )
{
Form2->Show();//登陆成功,显示下一个窗口
Edit1->Clear();
Edit2->Clear();

}
else
ShowMessage("登录失败");


希望这段代码对你有用
javaboy_2008 2009-10-27
  • 打赏
  • 举报
回复
首先你要看你的用户名跟密码的字段类型
如果你定义的是char(10)形,
但是的用户名(比如 zeng)只有4位
后面少了6个空格
所以你要用 .Trim()函数还去除空格
你试试,不对再问
hatcathj 2009-08-12
  • 打赏
  • 举报
回复
在sql里面可以查询出来
hatcathj 2009-08-12
  • 打赏
  • 举报
回复
我用的paradox7
我不懂电脑 2009-08-12
  • 打赏
  • 举报
回复
首先用你的sql语句在查询分析器里查询一下看有无记录。
hatcathj 2009-08-12
  • 打赏
  • 举报
回复
修改了n多次
都是提示用户名不存在
请问 是不是因为没有返回查询结果啊 高手不吝赐教啊
CppFile 2009-08-12
  • 打赏
  • 举报
回复
没看到你上面的语句有提示“该用户名不存在”的啊?
hatcathj 2009-08-12
  • 打赏
  • 举报
回复
我这样查的 可以啊 select * from EduManager
where EMName="administrator0" and EPassword ="000000"
fairchild811 2009-08-12
  • 打赏
  • 举报
回复
能查你程序登录的记录?那应该没问题啊

1,178

社区成员

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

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