?? 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 + -