📄 fat.cpp
字号:
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Fat.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma link "RecBaseForm"
#pragma link "fpanel"
#pragma link "SDEdit"
#pragma link "SDComboBox"
#pragma resource "*.dfm"
TfrmFat *frmFat;
//---------------------------------------------------------------------------
__fastcall TfrmFat::TfrmFat(TComponent* Owner)
: TRecBaseForm(Owner,euSdFat,"")
{
InitTierLen();
m_FatUpperCode="";
m_FatLevel=0;
}
//---------------------------------------------------------------------------
void __fastcall TfrmFat::InitEditControl()
{
ClientGroup->AddComponent(2,false,false,true, FloatPanel1,FloatPanel1->Name);
ClientGroup->AddComponent(2,true,true,false, Panel1,Panel1->Name);
FillComboBox(scFatFacsCode,"select facsCode,facsName from sdfacs order By facsCode","facsName","facsCode");
FillComboBox(scFatFadmCode,"select fadmCode,fadmName from sdfadm order By fadmCode","fadmName","fadmCode");
}
//---------------------------------------------------------------------------
AnsiString __fastcall TfrmFat::GetFieldValue(int FieldIndex)
{
WideString S;
S = ReadFieldValue(comServer,FieldIndex);
return(S);
}
//---------------------------------------------------------------------------
void __fastcall TfrmFat::ClearControl(bool BringToNext)
{
if(!BringToNext)
{
labFatUpperCode->Caption="";
seFatItem->Text ="";
seFatName->Text ="";
scFatFacsCode->Text ="";
seFatPeriod->Text ="1";
scFatFacsCode->ItemIndex=-1;
scFatFadmCode->ItemIndex=-1;
scFatFadmCode->Text ="";
seFatValRate->Text ="0.00";
ckFatEnd->Checked =false;
}
}
//---------------------------------------------------------------------------
void __fastcall TfrmFat::GetDataFromComObject()
{
labFatUpperCode->Caption=GetFieldValue(fiFatUpperCode);
seFatItem->Text =GetFieldValue(fiFatItem);
seFatName->Text =GetFieldValue(fiFatName);
scFatFacsCode->LocateKey(GetFieldValue(fiFatFacsCode));
scFatFacsCode->Text =scFatFacsCode->ItemData[0];
seFatPeriod->Text =GetFieldValue(fiFatPeriod);
scFatFadmCode->LocateKey(GetFieldValue(fiFatFadmCode));
scFatFadmCode->Text =scFatFadmCode->ItemData[0];
seFatValRate->Text =GetFieldValue(fiFatValRate);
ckFatEnd->Checked =GetFieldValue(fiFatEnd)=="1";
}
//---------------------------------------------------------------------------
void __fastcall TfrmFat::SendDataToComObject()
{
AnsiString strLevel, strErr,strTemp;
int Level;
strLevel= tvFat->Selected->Level;
Level=strLevel.ToInt();
if(CurrentState==4)
Level++;
//输入的代码长度必须等于设定长度
strTemp=seFatItem->Text;
if (strTemp.Length() != TierLen[Level])
{
strErr="本级编码长度必须为: "+AnsiString(TierLen[Level]);
throw Exception(strErr.c_str());
}
if((labFatUpperCode->Caption+seFatItem->Text).Length()>18)
throw Exception("上级编码长度将超过18");
WriteFieldValue(comServer,fiFatUpperCode,m_FatUpperCode);
WriteFieldValue(comServer,fiFatLevel,AnsiString(m_FatLevel));
WriteFieldValue(comServer,fiFatItem,seFatItem->Text);
WriteFieldValue(comServer,fiFatName,seFatName->Text);
WriteFieldValue(comServer,fiFatFacsCode,scFatFacsCode->ItemData[1]);
if(seFatPeriod->Text.IsEmpty())
WriteFieldValue(comServer,fiFatPeriod,"1");
else
WriteFieldValue(comServer,fiFatPeriod,seFatPeriod->Text);
WriteFieldValue(comServer,fiFatFadmCode,scFatFadmCode->ItemData[1]);
WriteFieldValue(comServer,fiFatValRate,seFatValRate->Text);
WriteFieldValue(comServer,fiFatEnd,ckFatEnd->Checked ? "1":"0");
}
//---------------------------------------------------------------------------
void __fastcall TfrmFat::WaitUserInput()
{
seFatItem->SetFocus();
}
//---------------------------------------------------------------------------
void __fastcall TfrmFat::RefreshGridData(int mAction)
{
AnsiString tempText;
if (mAction == 0) //增加
{
if(tvFat->Selected)
{
tempText = "(" + GetFieldValue(fiFatCode) + ")" + GetFieldValue(fiFatName);
tvFat->Items->AddChild(tvFat->Selected,tempText);
tvFat->Selected->Expanded = true;
}
}
else if(mAction == 1) //修改
{
tvFat->Selected->Text = "(" + GetFieldValue(fiFatCode) + ")"
+ GetFieldValue(fiFatName);
}
else if(mAction == 2) //删除
{
tvFat->Items->Delete(tvFat->Selected);
}
}
//---------------------------------------------------------------------------
void __fastcall TfrmFat::FillGridWithData()
{
AnsiString tempText;
static TTreeNode* TempNode[7];
int mLevel;
tvFat->Items->Clear();
TempNode[0]=tvFat->Items->Add(NULL,"设备分类码");
comServer->MoveFirst();
while (comServer->Eof == 0)
{
mLevel = StrToInt(GetFieldValue(fiFatLevel));
if( (mLevel <= 0) || (mLevel > 7))
{
::MessageBox(Handle,"区域层级的级别不能大于7。","错误",MB_OK|MB_ICONSTOP);
comServer->MoveNext();
continue;
}
for(int i=0;i<8;i++)
{
if(TempNode[mLevel-1]->Text=="")
mLevel--;
}
tempText = "(" + GetFieldValue(fiFatCode) + ")" + GetFieldValue(fiFatName);
TempNode[mLevel] = tvFat->Items->AddChild(TempNode[mLevel-1],tempText);
comServer->MoveNext();
}
tvFat->Selected=TempNode[0];
TempNode[0]->Expand(false);
}
//---------------------------------------------------------------------------
void __fastcall TfrmFat::FormShow(TObject *Sender)
{
FillGridWithData();
comServer->MoveFirst();
labItemLength->Caption=AnsiString(TierLen[1]);
}
//---------------------------------------------------------------------------
void __fastcall TfrmFat::tvFatChange(TObject *Sender, TTreeNode *Node)
{
ClearControl(false);
AnsiString s;
if(Node == tvFat->Items->Item[0])
{
return;
}
s = Node->Text;
s = s.SubString(2,s.AnsiPos(")")-2);
comServer->LocateByKey(s);
if (comServer->Eof == 0)
{
GetDataFromComObject();
}
labItemLength->Caption=AnsiString(TierLen[tvFat->Selected->Level]);
}
//---------------------------------------------------------------------------
void __fastcall TfrmFat::muAddDetailClick(TObject *Sender)
{
AnsiString s;
if(ckFatEnd->Checked==true)
{
::MessageBox(Handle,"当前是末级,不能增加下一级.","操作错误",MB_OK|MB_ICONSTOP);
return;
}
else
{
m_FatLevel = tvFat->Selected->Level;
if(TierLen[m_FatLevel+1]==0)
throw Exception("设备分类码不能超过'"+AnsiString(m_FatLevel+1)+"'级");
labItemLength->Caption=AnsiString(TierLen[m_FatLevel+1]);
TRecBaseForm::muAddDetailClick(Sender);
if(m_FatLevel == 0)
{
m_FatUpperCode="";
labFatUpperCode->Caption = "";
}
else
{
s = tvFat->Selected->Text;
s = s.SubString(2,s.AnsiPos(")")-2);
labFatUpperCode->Caption=s;
m_FatUpperCode=s;
}
m_FatLevel++;
}
}
//---------------------------------------------------------------------------
void __fastcall TfrmFat::muEditDetailClick(TObject *Sender)
{
AnsiString s;
m_FatLevel = tvFat->Selected->Level;
if(tvFat->Selected->Level == 0)
{
::MessageBox(Handle,"当前是根节点,不能修改.","操作错误",MB_OK|MB_ICONSTOP);
return;
}
TRecBaseForm::muEditDetailClick(Sender);
s = tvFat->Selected->Parent->Text;
if (tvFat->Selected->Parent->Level == 0)
//当选择的节点的父节点是根节点时
s = "";
else
s = s.SubString(2,s.AnsiPos(")")-2);
m_FatUpperCode=s;
if(EnabledEnd(labFatUpperCode->Caption+seFatItem->Text)) //判断末级Enabled
ckFatEnd->Enabled=true;
else
ckFatEnd->Enabled=false;
}
//---------------------------------------------------------------------------
void __fastcall TfrmFat::muDeleteDetailClick(TObject *Sender)
{
if(tvFat->Selected->Level == 0)
{
::MessageBox(Handle,"当前是根节点,不能删除.","操作错误",MB_OK|MB_ICONSTOP);
return;
}
if(tvFat->Selected->HasChildren)
{
if(::MessageBox(Handle,"该分类码下包含有子分类码,\n本操作将会删除它的全部子分类码。",
"注意", MB_YESNO|MB_ICONQUESTION) == IDYES)
{
TRecBaseForm::muDeleteDetailClick(Sender);
//如果删除根节点下的所有分类节点
if (tvFat->Items->Count > 1)
{
comServer->Query();
FillGridWithData();
comServer->MoveFirst();
GetDataFromComObject();
}
else
ClearControl(false);
return;
}
}
else
{
TRecBaseForm::muDeleteDetailClick(Sender);
GetDataFromComObject();
}
}
//---------------------------------------------------------------------------
void __fastcall TfrmFat::muFirstClick(TObject *Sender)
{
TRecBaseForm::muFirstClick(Sender);
TreeViewLocation();
}
//---------------------------------------------------------------------------
void __fastcall TfrmFat::muPreviousClick(TObject *Sender)
{
TRecBaseForm::muPreviousClick(Sender);
TreeViewLocation();
}
//---------------------------------------------------------------------------
void __fastcall TfrmFat::muNextClick(TObject *Sender)
{
TRecBaseForm::muNextClick(Sender);
TreeViewLocation();
}
//---------------------------------------------------------------------------
void __fastcall TfrmFat::muLastClick(TObject *Sender)
{
TRecBaseForm::muLastClick(Sender);
TreeViewLocation();
}
//---------------------------------------------------------------------------
void __fastcall TfrmFat::TreeViewLocation()
{
AnsiString s,c;
s = GetFieldValue(fiFatCode);
for(int i = 1 ; i < tvFat->Items->Count ; i ++)
{
c = tvFat->Items->Item[i]->Text; //取关键字
c = c.SubString(2,c.AnsiPos(")")-2);
if(s == c)
{
tvFat->Selected = tvFat->Items->Item[i];
break;
}
}
}
//---------------------------------------------------------------------------
void __fastcall TfrmFat::InitTierLen()
{
//从参数表sdparameter中获取分类码各层字符长度,并存入数组
TComResultSet *pResultSet=NewResultSet();
AnsiString strSQL,strItem,strValue,TempAsRes;
strSQL="select moduleformname,modulecaption from sdmodule where moduleformname='"+this->Name+"'";
try
{
pResultSet->Close();
pResultSet->Open(strSQL,"");
TempAsRes=pResultSet->FieldByName("modulecaption");
pResultSet->Close();
pResultSet->Open("select parametercode from sdparameter where parametername='"+TempAsRes+"'","");
TempAsRes=pResultSet->FieldByName("parametercode");
strSQL=" select parameteritem,parametervalue from sdparameter ";
strSQL=strSQL+" where parametertype = 2 and parametercode like '"+TempAsRes+"%'";
pResultSet->Close();
pResultSet->Open(strSQL,"");
//clear the TierLen Array
for(int i=0;i<10;i++)
TierLen[i]=0;
pResultSet->MoveFirst();
while(!pResultSet->Eof)
{
strItem=pResultSet->FieldByName("parameteritem");
strValue=pResultSet->FieldByName("parametervalue");
if ((strItem.ToIntDef(0) != 0)&&(strValue.ToIntDef(0) != 0))
if ((strItem.ToInt()>0) && (strItem.ToInt()<18))
TierLen[strItem.ToInt()]=strValue.ToInt();
pResultSet->MoveNext();
}
pResultSet->Close();
}
__finally
{
delete pResultSet;
}
}
void __fastcall TfrmFat::muSaveClick(TObject *Sender)
{
AnsiString tempst;
tempst= labFatUpperCode->Caption+seFatItem->Text;
if(tempst.Length()>18)
{
::MessageBox(Handle,"上级编码长度将超过18.","操作错误",MB_OK|MB_ICONSTOP);
}
else
{
TRecBaseForm::muSaveClick(Sender);
}
}
//---------------------------------------------------------------------------
void __fastcall TfrmFat::RefreshUpdateData(int MsgSrc,int MsgType)
{
switch(MsgSrc)
{
case euSdFacs:
case euSdFadm:
default:
break;
}
try
{
StartWaitForm("正在刷新引用数据");
switch(MsgSrc)
{
case euSdFacs:
if(ShowUpdateMessage(MsgSrc,MsgType))
FillComboBox(scFatFacsCode,"select facsCode,facsName from sdfacs order By facsCode","facsName","facsCode");
break;
case euSdFadm:
if(ShowUpdateMessage(MsgSrc,MsgType))
FillComboBox(scFatFadmCode,"select fadmCode,fadmName from sdfadm order By fadmCode","fadmName","fadmCode");
break;
default:
break;
}
}
__finally
{
EndWaitForm();
}
}
//---------------------------------------------------------------------------
bool __fastcall TfrmFat::EnabledEnd( AnsiString Keycode)
{
//如果有下一级则End 为false
TComResultSet *TResultSet=NewResultSet();
AnsiString strSQL;
strSQL="select FatUpperCode from sdFat where FatUpperCode='"+Keycode+"'";
TResultSet->Close();
TResultSet->Open(strSQL,"");
if(TResultSet->RecordCount>0)
{
delete TResultSet;
return false;
}
else
{
delete TResultSet;
return true;
}
}
//---------------------------------------------------------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -