📄 userinfo.cpp
字号:
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "UserInfo.h"
#include "main.h"
#include "f_ceshi.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
__fastcall TUserInfo::TUserInfo()
{
ADOConnection1=NULL;
ADOQuery1=NULL;
ADOQuery2=NULL;
ADOQuery3=NULL;
ADOQuery4=NULL;
ADOQuery5=NULL;
}
//获取数据库信息
bool TUserInfo::GetDatabaseInfo(AnsiString _DBIP,AnsiString _DBNAME,AnsiString _DBUSERNAME,AnsiString _DBUSERPWD)
{
if(_DBNAME=="")
{
ShowMessage("找不到数据库,请检查数据库设置是否正确!");
return false;
}
if(_DBUSERNAME=="")
{
ShowMessage("数据库用户名错误!");
return false;
}
DBIP=_DBIP;
DBUSERNAME=_DBUSERNAME;
DBUSERPWD=_DBUSERPWD;
DBNAME=_DBNAME;
return true;
}
//打开数据库
bool TUserInfo::OpenDatabase()
{
CreateDbContrl();
ADOConnection1->LoginPrompt=false;
ADOConnection1->KeepConnection=false;
ADOConnection1->CommandTimeout=120;
ADOConnection1->ConnectionTimeout=120;
AnsiString LinkStr;
LinkStr = "Provider=SQLOLEDB.1;Persist Security Info=false;Packet Size=16384;User ID=";
LinkStr += DBUSERNAME; //数据库登录名
LinkStr += ";password=";
LinkStr += DBUSERPWD; //数据库登录密码
LinkStr += ";Initial Catalog=";
LinkStr += DBNAME; //数据库名称
LinkStr += ";Data Source=";
LinkStr += DBIP; //数据库所在机器IP(名称)
LinkStr += ";";
ADOConnection1->ConnectionString=LinkStr;
try
{
ADOConnection1->Connected=true;
}catch(...)
{
return false;
}
ADOQuery1->Connection=ADOConnection1;
ADOQuery2->Connection=ADOConnection1;
ADOQuery3->Connection=ADOConnection1;
ADOQuery4->Connection=ADOConnection1;
ADOQuery5->Connection=ADOConnection1;
return true;
}
//关闭数据库
void TUserInfo::CloseDB()
{
ADOConnection1->Close();
DelDbContrl();
}
//构造数据库控件
void TUserInfo::CreateDbContrl()
{
DelDbContrl();
ADOConnection1=new TADOConnection(NULL);
ADOQuery1=new TADOQuery(NULL);
ADOQuery2=new TADOQuery(NULL);
ADOQuery3=new TADOQuery(NULL);
ADOQuery4=new TADOQuery(NULL);
ADOQuery5=new TADOQuery(NULL);
}
//析构数据库控件
void TUserInfo::DelDbContrl()
{
if(ADOConnection1)
{
delete ADOConnection1;
ADOConnection1=NULL;
}
if(ADOQuery1)
{
delete ADOQuery1;
ADOQuery1=NULL;
}
if(ADOQuery2)
{
delete ADOQuery2;
ADOQuery2=NULL;
}
if(ADOQuery3)
{
delete ADOQuery3;
ADOQuery3=NULL;
}
if(ADOQuery4)
{
delete ADOQuery4;
ADOQuery4=NULL;
}
if(ADOQuery5)
{
delete ADOQuery5;
ADOQuery5=NULL;
}
}
//执行SQL语句
void TUserInfo::RunSQL(TADOQuery *ADOQuery,AnsiString strSQL,bool HaveReturn)
{
ADOQuery->Close();
ADOQuery->SQL->Clear();
ADOQuery->SQL->Add(strSQL);
try
{
if(HaveReturn)
ADOQuery->Open();
else ADOQuery->ExecSQL();
}
catch(Exception &E)
{
if(E.Message=="") MessageBox(Application->Handle,
"数据库操作失败![连接超时]或者[数据库结构错误]。","信息",
MB_OK|MB_ICONWARNING);
else MessageBox(Application->Handle,E.Message.c_str(),"信息",MB_OK|MB_ICONWARNING);
Application->Terminate();
}
return;
}
bool TUserInfo::RunSQLNoOver(TADOQuery *ADOQuery,AnsiString strSQL,bool HaveReturn)
{
ADOQuery->Close();
ADOQuery->SQL->Clear();
ADOQuery->SQL->Add(strSQL);
try
{
if(HaveReturn)
ADOQuery->Open();
else ADOQuery->ExecSQL();
}
catch(Exception &E)
{
if(E.Message=="") MessageBox(Application->Handle,
"数据库操作失败![连接超时]或者[数据库结构错误]。","信息",
MB_OK|MB_ICONWARNING);
else MessageBox(Application->Handle,E.Message.c_str(),"信息",MB_OK|MB_ICONWARNING);
return false;
}
return true;
}
//获得特定手机号的下一条灯谜
AnsiString TUserInfo::GetDmBySim(AnsiString sim)
{
//选出灯谜编号
AnsiString strDmid;
bool bNew=false;
AnsiString strSQL="select dmid from table_log where handset='"+sim+"'";
if(!RunSQLNoOver(ADOQuery3,strSQL,true)) return "ERROR";
strDmid=ADOQuery3->FieldByName("dmid")->AsString;
if(strDmid=="")
{
strSQL="select top 1 id from table_dm";
if(!RunSQLNoOver(ADOQuery3,strSQL,true)) return "ERROR";
strDmid=ADOQuery3->FieldByName("id")->AsString;
bNew=true;
}
else
{
int iTmp=StrToInt(strDmid);
iTmp++;
strDmid=IntToStr(iTmp);
strSQL="select top 1 id from table_dm where id="+strDmid;
if(!RunSQLNoOver(ADOQuery3,strSQL,true)) return "ERROR";
strDmid=ADOQuery3->FieldByName("id")->AsString;
if(strDmid=="")
{
strSQL="update table_log set breal=1 where handset='"+sim+"'";
if(!RunSQLNoOver(ADOQuery3,strSQL,false)) return "ERROR";
return "您已经猜完了今天的灯谜,请明天再继续,谢谢:)";
}
}
//处理
if(bNew)
{
strSQL="insert into table_log(handset,sendtime,dmid,answercount,grade) values( \
'"+sim+"', \
'"+DateToStr(Date())+" "+TimeToStr(Time())+"', \
"+strDmid+", \
0, \
0)";
iUserCountToday++;
}
else
{
strSQL="update table_log set dmid="+strDmid+",sendtime='"+DateToStr(Date())+" "+TimeToStr(Time())+"',answercount=0,breal=0 where handset='"+sim+"'";
}
if(!RunSQLNoOver(ADOQuery3,strSQL,false)) return "ERROR";
strSQL="select question from table_dm where id="+strDmid;
if(!RunSQLNoOver(ADOQuery3,strSQL,true)) return "ERROR";
return ADOQuery3->FieldByName("question")->AsString;
}
//添加一条猜灯谜信息
void TUserInfo::AddOneDm(AnsiString sim)
{
AnsiString strTmp=GetDmBySim(sim);
if(strTmp=="ERROR") return;
SendDate(sim,strTmp);
}
//获取所有答案
DynamicArray<AnsiString> TUserInfo::GetAllAnswer(AnsiString strAnswer)
{
DynamicArray<AnsiString>dArrayAnser;
AnsiString strTmp=strAnswer;
bool bHavSymb;
while(strTmp.Length()>0)
{
bHavSymb=false;
for(int i=0;i<strTmp.Length();i++)
{
if(strTmp.SubString(i+1,1)=="+")
{
bHavSymb=true;
dArrayAnser.Length++;
dArrayAnser[dArrayAnser.Length-1]=strTmp.SubString(1,i);
strTmp=strTmp.SubString(i+2,strTmp.Length()-(i+1));
break;
}
}
if((!bHavSymb)&&(strTmp.Trim()!=""))
{
dArrayAnser.Length++;
dArrayAnser[dArrayAnser.Length-1]=strTmp;
break;
}
}
return dArrayAnser;
}
//处理一条灯谜信息
void TUserInfo::UserAnswer(AnsiString sim,AnsiString sDate)
{
AnsiString strAnswer;
AnsiString strSQL="select a.answer from table_dm a,table_log b where a.id=b.dmid and \
b.handset='"+sim+"'";
if(!RunSQLNoOver(ADOQuery1,strSQL,true)) return;
if(ADOQuery1->RecordCount<1)
{
AnsiString strTmp=GetDmBySim(sim);
if(strTmp=="ERROR") return;
SendDate(sim,strTmp);
}
else
{
bool bReal=false;
DynamicArray<AnsiString>dArrayAnser;
dArrayAnser=GetAllAnswer(ADOQuery1->FieldByName("answer")->AsString);
for(int i=0;i<dArrayAnser.Length;i++)
{
strAnswer = dArrayAnser[i];
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -