📄 userdata.cpp
字号:
GetQueryWhereName(pQuery->SQL,szBuf);
QueryOneADOTable(pQuery,GetUserTableName(),szBuf,pszName[rc]);
}
}
//---------------------------------------------------------------------------
void __fastcall TUserForm::m_AddButClick(TObject *Sender)
{
TDataSet *pQuery;
USERDATA a;
int rc;
pQuery = m_TextDataSource->DataSet;
rc = (int)pQuery;
ZeroMemory(&a,sizeof(USERDATA));
while(rc){
rc=ReworkUser(this,&a,0);
if(rc){ //获取相同内容的其它记录(0=>无,1=>其它记录)
rc = !GetOtherUserOnTable(&a,-1);
if(rc)break;
}
else break;
}
if(rc)rc=SaveToHolderTable(&a,0); //保存到HolderData数据表
if(rc){
rc=AppendDataSet(pQuery);
if(rc){
SaveUserRecord(pQuery,&a);
//写入Blob字段内容
SetFieldBlobOnTable(pQuery,GetCarPhotoFieldName(),a.pPhoto);
}
if(rc)rc=PostDataSet(pQuery);
if(!rc)ShowTableError(0);
}
if(rc){//显示Grid的nIndex行内容
m_DelBut->Enabled=TRUE;
m_EditBut->Enabled=TRUE;
}
DeleteBlobData(a.pPhoto);
}
//保存到HolderData数据表(nMode==0 追加)
int SaveToHolderTable(USERDATA *t,int nMode)
{
HOLDERDATA a;
int rc,n;
TADOQuery *pQuery;
char szBuf[30];
//用OtherADOQuery元件查询一个表中记录
pQuery = (TADOQuery *)GetOtherQuery();
n = t->nHolderNo;
if(n>0) wsprintf(szBuf,"RECORDID=%d",n);
else szBuf[0]=0;
rc=QueryOneADOTable(pQuery,GetHolderTableName(),szBuf,NULL);
if(rc>=0){
UserDataToHolder(&a,t);
if(rc==0 || n==0) rc=AppendDataSet(pQuery);
else rc=EditDataSet(pQuery);
if(rc)SaveHolderRecord(pQuery,&a);
if(rc)rc=PostDataSet(pQuery);
if(rc)t->nHolderNo=GetRecordIDOnTable(pQuery);
else ShowTableError(nMode);
}
else rc=FALSE;
return(rc);
}
//转化UserData为HolderData
void *UserDataToHolder(HOLDERDATA *Dest,USERDATA *Sour)
{
ZeroMemory(Dest,sizeof(HOLDERDATA));
lstrcpyn(Dest->szHolderName,Sour->szCarTag,sizeof(Dest->szHolderName));
Dest->nHolderNo = Sour->nHolderNo;
Dest->nStatus = Sour->nStatus;
return(Dest);
}
//删除HolderData数据表(RecordID=t->HolderNo)记录
int DelCurRecordOnHolderTable(USERDATA *t)
{
char szBuf[30];
int rc;
TADOQuery *pQuery;
//用OtherADOQuery元件删除一个表中记录
wsprintf(szBuf,"RECORDID=%d",t->nHolderNo);
pQuery = (TADOQuery *)GetOtherQuery();
rc=EmptyOneADOTable(pQuery,GetHolderTableName(),szBuf);//删除表中数据
return(rc);
}
//获取相同内容的其它记录(0=>无,1=>其它记录)
int GetOtherUserOnTable(USERDATA *Sour,int nOld)
{
static char pszText[]="添加/修改的车主用户\n"
"其车牌号码:\"%s\"\n\n已经有重复!";
char szBuf[100];
int nRec,rc;
TADOQuery *pQuery;
rc=FALSE;
wsprintf(szBuf,"CARTAG=\'%s\'",Sour->szCarTag);
//用OtherADOQuery元件查询一个表中记录
pQuery = (TADOQuery *)GetOtherQuery();
nRec=QueryOneADOTable(pQuery,GetUserTableName(),szBuf,NULL);
if(nRec>0){
if(nOld<=0)rc=TRUE;//添加时,存在一个记录即为重复
else if(nRec>1)rc=TRUE;//修改时,存在二个记录即为重复
else {
SetCurTable(pQuery);
nRec=GetFieldInt("HOLDERNO");
if(nRec!=nOld)rc=TRUE;//修改时,记录号不一致
}
}
if(rc){
wsprintf(szBuf,pszText,Sour->szCarTag);
Application->MessageBox(szBuf,GetMainTitle(),
MB_OK|MB_ICONINFORMATION|MB_APPLMODAL);
}
return(rc);
}
void __fastcall TUserForm::m_DelButClick(TObject *Sender)
{
static char pszText[]="是否真的永久(不可恢复地)删除\n\n"
"编号为:\"%d\", 类型为:\"%s\"\n的当前车主用户?",
pszHolder[]= "当前车主用户已领用卡片!\n\n删除前, 请先注销其领用卡片。";
char szBuf[200],szStr[20];
TADOQuery *pQuery,*pOther;
USERDATA a;
int rc,n;
pQuery = (TADOQuery *)m_TextDataSource->DataSet;
rc = (int)pQuery;
if(rc){
ReadUserRecord(pQuery,&a);
GetUserTypeText(szStr,a.nUserType);
wsprintf(szBuf,pszText,a.nHolderNo,szStr);
rc= Application->MessageBox(szBuf,GetMainTitle(),
MB_YESNO|MB_ICONQUESTION|MB_DEFBUTTON2|MB_APPLMODAL);
if(rc==IDYES)rc=TRUE;
else rc=FALSE;
}
if(rc){//确认是否领用卡片
rc=!GetUserHoldFlag(&a);
if(rc==0)
Application->MessageBox(pszHolder,GetMainTitle(),
MB_OK|MB_ICONINFORMATION|MB_APPLMODAL);
}
if(rc){//删除当前记录
DelCurRecordOnHolderTable(&a);//在HolderTable表删除记录
rc=DelCurRecordOnTable(pQuery);//删除当前一条记录
}
if(rc){ //正确删除
n= GetAllRecNum(pQuery);//获取总记录数
if(n<=0)
{ m_DelBut->Enabled=FALSE; m_EditBut->Enabled=FALSE; }
}
}
//---------------------------------------------------------------------------
void __fastcall TUserForm::m_EditButClick(TObject *Sender)
{
TDataSet *pQuery;
USERDATA a;
int rc,nCount;
pQuery = m_TextDataSource->DataSet;
rc = (int)pQuery;
if(rc){
ReadUserRecord(pQuery,&a);
a.pPhoto = GetFieldBlobOnTable(pQuery,GetCarPhotoFieldName());
rc=a.nHolderNo; //持卡者编号必须>0
}
while(rc){
rc=ReworkUser(this,&a,1);
if(rc){ //获取相同内容的其它记录(0=>无,1=>其它记录)
rc = !GetOtherUserOnTable(&a,a.nHolderNo);
if(rc)break;
}
else break;
}
if(rc)rc=SaveToHolderTable(&a,1); //保存到HolderData数据表
if(rc){
rc=EditDataSet(pQuery);
if(rc){
SaveUserRecord(pQuery,&a);
//写入Blob字段内容
SetFieldBlobOnTable(pQuery,GetCarPhotoFieldName(),a.pPhoto);
}
if(rc)rc=PostDataSet(pQuery);
if(!rc)ShowTableError(1);
}
DeleteBlobData(a.pPhoto);
}
//---------------------------------------------------------------------------
void __fastcall TUserForm::m_TextDBGridDrawColumnCell(TObject *Sender,
const TRect &Rect, int DataCol, TColumn *Column,
TGridDrawState State)
{
TDataSet *pQuery;
USERDATA a;
char szBuf[30];
int n,nEmpty;
pQuery = m_TextDataSource->DataSet;
nEmpty = pQuery->IsEmpty();
if(nEmpty==0){//非空记录
if(DataCol==1){//用户类型
ReadUserRecord(pQuery,&a);
GetUserTypeText(szBuf,a.nUserType);
SetDBGridText(Sender,Rect,Column,szBuf);//设置DB格栅文字
}
else if(DataCol==2){//卡片编号
ReadUserRecord(pQuery,&a);
GetNumberText(szBuf,a.nCardNo);
SetDBGridText(Sender,Rect,Column,szBuf);//设置DB格栅文字
}
else if(DataCol==3){//状态
ReadUserRecord(pQuery,&a);
n = GetUserNormalFlag(&a); //获取是否正常状态
if(n)n=-1;else n=clSilver;
SetDBGridText(Sender,Rect,Column,GetUserStatusText(&a),n);//设置DB格栅文字
}
}
if(DataCol==3 && State.Contains(gdSelected)){//显示格栅
if(nEmpty==0){
a.pPhoto = GetFieldBlobOnTable(pQuery,GetCarPhotoFieldName());
ShowCurRecord(this,&a);
DeleteBlobData(a.pPhoto);
}
else ClearCurRecord(this);//清除当前停车记录
}
}
//显示当前记录
void ShowCurRecord(TUserForm *te,USERDATA *t)
{
char szBuf[30];
te->m_UserNamePanel->Caption=t->szUserName;
te->m_AddressPanel->Caption=t->szAddress;
te->m_CarTypePanel->Caption=t->szCarType;
te->m_CarTagPanel->Caption=t->szCarTag;
te->m_PhonePanel->Caption=t->szPhone;
te->m_CarColorPanel->Caption=t->szCarColor;
GetNumberText(szBuf,t->nHolderNo);
te->m_HolderNoPanel->Caption=szBuf;
GetUserTypeText(szBuf,t->nUserType);
te->m_UserTypePanel->Caption=szBuf;
GetDWORDDateText(szBuf,t->nBeginDate);
te->m_BeginDatePanel->Caption=szBuf;
GetDWORDDateText(szBuf,t->nEndDate);
te->m_EndDatePanel->Caption=szBuf;
if(t->nHolderNo!=0)
sprintf(szBuf,"%-9.2f",t->fMoney);
else szBuf[0]=0; //记录不存在
te->m_MoneyPanel->Caption=szBuf;
te->m_StatePanel->Caption=GetUserStatusText(t);
//显示车辆图片
ShowOneImage(te->m_CarImage,t->pPhoto);
}
//清除当前停车记录
void ClearCurRecord(TUserForm *te)
{
TControl *pControl;
int i;
char szBuf[10];
szBuf[0]=0;
for(i=0; i<100;i++){
pControl = (TControl *)GetChildComponent(te,i+100);//返回子元件
if(pControl !=NULL)
pControl->SetTextBuf(szBuf);
}
ShowOneImage(te->m_CarImage,NULL); //显示车辆图片
}
//---------------------------------------------------------------------------
void __fastcall TUserForm::m_TextDataSourceDataChange(TObject *Sender,
TField *Field)
{
TDataSet *pQuery;
int m,n;
char szBuf[50];
if(Field==NULL){//多个字段同时变化,即当前记录已变化
pQuery =m_TextDataSource->DataSet;
n= GetAllRecNum(pQuery);//获取总记录数
m=GetCurRecno(pQuery);//获取当前记录号
wsprintf(szBuf,"%d/%d",m,n);
m_RecNumPanel->Caption=szBuf;
}
}
//---------------------------------------------------------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -