📄 system.cpp
字号:
//==========================================
//(TsdTable)系统表结构
//==========================================
void __fastcall TsdTable::SetTableName(AnsiString value)
{
if(value.IsEmpty()==true)
throw Exception("系统表名不能为空");
if(value.Length()>20)
throw Exception("系统表名称长度不能超过20");\
if(CurStatus==2||CurStatus==4)
{
m_Query->Close();
m_Query->SQL->Clear();
m_Query->SQL->Add("select * from sdTable where TableName='"+value+"'");
m_Query->Open();
if(m_Query->RecordCount>0)
{
m_Query->Close();
throw Exception("系统表名已存在");
}
m_Query->Close();
}
m_TableName = value;
}
void __fastcall TsdTable::SetTableClassID(AnsiString value)
{
m_TableClassID = value;
}
void __fastcall TsdTable::SetTableDesc(AnsiString value)
{
m_TableDesc = value;
}
void __fastcall TsdTable::SetTableSysFlag(int value)
{
m_TableSysFlag = value;
}
void __fastcall TsdTable::SetTableMDate(AnsiString value)
{
m_TableMDate = value;
}
TsdTable::TsdTable(TDataComm *DC)
:TsdHead(DC)
{
try
{
m_sdField=NULL;
QueryString="select * from sdTable ";
FilterString="";
OrderString="tableclassid,tablename";
EmptyValue(0);
EmptyValue(1);
}
catch(...)
{
throw Exception("初始化出错");
}
}
TsdTable::TsdTable()
:TsdHead()
{
try
{
m_sdField=NULL;
QueryString="select * from sdTable ";
FilterString="";
OrderString="tableclassid,tablename";
EmptyValue(0);
EmptyValue(1);
}
catch(...)
{
throw Exception("初始化出错");
}
}
TsdTable::~TsdTable()
{
try{
for(int i=0;i<this->Count;i++)
{
this->LocateByIndex(i);
this->AssignValue();
delete m_sdField;
}
}
catch(...)
{
throw Exception("析构函数出错");
}
}
AnsiString TsdTable::GetFieldValue(euTable sdFieldName)
{
switch(sdFieldName)
{
case fiTableName:
return TableName;
case fiTableClassID:
return TableClassID;
case fiTableDesc:
return TableDesc;
case fiTableSysFlag:
return TableSysFlag;
case fiTableMDate:
return TableMDate;
default:
throw Exception("当前字段未定义成可取值");
}
}
void TsdTable::SetFieldValue(euTable sdFieldName, AnsiString Value)
{
switch(sdFieldName)
{
case fiTableName:
TableName=Value;
break;
case fiTableClassID:
TableClassID=Value;
break;
case fiTableDesc:
TableDesc=Value;
break;
case fiTableSysFlag:
TableSysFlag=Value.ToInt();
break;
case fiTableMDate:
TableMDate=Value;
break;
default:
throw Exception("当前字段未定义成可赋值");
}
}
void TsdTable::Update()
{
AnsiString s;
if(CurStatus==0||CurStatus==1)
throw Exception("当前表不是编辑状态,不能进行存盘操作!");
if(m_TableName.IsEmpty()==true)
throw Exception("表名不能为空!");
if(m_TableClassID.IsEmpty()==true)
throw Exception("表类别不能为空!");
if(ItemCount<=0)
throw Exception("没有定义明细字段");
m_StoredProc->Close();
switch(CurStatus)
{
case 2:
case 4:
m_StoredProc->ProcedureName="sdTable_Insert";
m_StoredProc->Parameters->Clear();
m_StoredProc->Parameters->CreateParameter("@TableName",ftString,pdInput,30,m_TableName);
m_StoredProc->Parameters->CreateParameter("@TableClassID",ftString,pdInput,18,m_TableClassID);
m_StoredProc->Parameters->CreateParameter("@TableDesc",ftString,pdInput,255,m_TableDesc);
m_StoredProc->Parameters->CreateParameter("@TableSysFlag",ftSmallint,pdInput,10,m_TableSysFlag);
m_StoredProc->Parameters->CreateParameter("@TableMDate",ftString,pdOutput,40,m_TableMDate);
m_StoredProc->ExecProc();
m_TableMDate=m_StoredProc->Parameters->ParamValues["@TableMDate"];
for(int i=0;i<ItemCount;i++)
{
LocateItemByIndex(i);
m_sdField->Update();
}
break;
case 3:
m_StoredProc->ProcedureName="sdTable_Update";
m_StoredProc->Parameters->Clear();
m_StoredProc->Parameters->CreateParameter("@W_TableName",ftString,pdInput,30,b_TableName);
m_StoredProc->Parameters->CreateParameter("@TableName",ftString,pdInput,30,m_TableName);
m_StoredProc->Parameters->CreateParameter("@TableClassID",ftString,pdInput,18,m_TableClassID);
m_StoredProc->Parameters->CreateParameter("@TableDesc",ftString,pdInput,255,m_TableDesc);
m_StoredProc->Parameters->CreateParameter("@TableSysFlag",ftSmallint,pdInput,10,m_TableSysFlag);
m_StoredProc->Parameters->CreateParameter("@TableMDate",ftString,pdOutput,40,m_TableMDate);
m_StoredProc->ExecProc();
m_TableMDate=m_StoredProc->Parameters->ParamValues["@TableMDate"];
break;
case 5:
case 6:
for(int i=0;i<ItemCount;i++)
{
LocateItemByIndex(i);
if(m_sdField->CurStatus==2 || m_sdField->CurStatus==3)
m_sdField->Update();
}
s=m_sdField->GetOldFieldValue(fiFieldName);
break;
}
TsdTable *p=new TsdTable();
if(CurStatus==2)
{
SetActionID(1);
p->Assign(this);
AddRecord((void *)p,p->TableName);
}
else
{
SetActionID(1);
p->Assign(this);
ChangeRecord((void *)p,p->TableName,this->b_TableName);
s=m_sdField->GetOldFieldValue(fiFieldName);
}
}
void TsdTable::Delete()
{
if(CurStatus!=1)
throw Exception("当前状态不能进行删除操作!");
if(m_TableName.IsEmpty()==true)
throw Exception("当前没有记录可以删除!");
m_StoredProc->ProcedureName="sdTable_Delete";
m_StoredProc->Parameters->Clear();
m_StoredProc->Parameters->CreateParameter("@W_TableName",ftString,pdInput,30,b_TableName);
m_StoredProc->ExecProc();
delete m_sdField;
DeleteRecord(this->b_TableName);
}
void TsdTable::NewDetail()
{
m_sdField=new TsdField(DataComm);
m_sdField->sdParent=this;
}
void TsdTable::DeleteDetail()
{
delete m_sdField;
}
void TsdTable::AddItem()
{
m_sdField->AddNew();
if(CurStatus!=2)
SetActionID(5);
}
void TsdTable::InsertItem()
{
}
void TsdTable::EditItem()
{
if(CurStatus==1)
{
m_sdField->Edit();
SetActionID(6);
}
}
void TsdTable::DeleteItem()
{
if(CurStatus==2 || CurStatus==5)
m_sdField->DeleteRecord(m_sdField->Key);
else
m_sdField->Delete();
}
void TsdTable::RemoveItem()
{
if(CurStatus==2 || CurStatus==5)
m_sdField->RemoveRecord(m_sdField->Index);
else
m_sdField->Delete();
}
void TsdTable::ClearItem()
{
int iCount;
if(CurStatus==2)
m_sdField->ClearRecord();
else
{
iCount=m_sdField->Count;
for(int i=0;i<iCount;i++)
{
m_sdField->LocateByIndex(0);
m_sdField->Delete();
}
}
}
void TsdTable::CancelItem()
{
m_sdField->Cancel();
}
void TsdTable::AddToObject()
{
AnsiString s;
TsdField *p=new TsdField();
p->Assign(m_sdField);
if(m_sdField->FindKey(m_sdField->GetOldFieldValue(fiFieldName)))
m_sdField->ChangeRecord((void *)p,p->GetFieldValue(fiFieldName),m_sdField->GetOldFieldValue(fiFieldName));
else
m_sdField->AddRecord((void *)p,p->GetFieldValue(fiFieldName));
}
bool TsdTable::LocateItemByIndex(int Index)
{
return m_sdField->LocateByIndex(Index);
}
bool TsdTable::LocateItemByKey(AnsiString Key)
{
return m_sdField->LocateByKey(Key);
}
void TsdTable::BackupValue()
{
b_sdField=m_sdField;
b_TableName=m_TableName;
b_TableClassID=m_TableClassID;
b_TableDesc=m_TableClassID;
b_TableSysFlag=m_TableSysFlag;
b_TableMDate=m_TableMDate;
}
void TsdTable::RestoreValue()
{
m_sdField=b_sdField;
m_TableName=b_TableName;
m_TableClassID=b_TableClassID;
m_TableDesc=b_TableDesc;
m_TableSysFlag=b_TableSysFlag;
m_TableMDate=b_TableMDate;
}
void TsdTable::EmptyValue(int Index)
{
switch(Index)
{
case 0:
m_TableName="";
m_TableClassID="";
m_TableDesc="";
m_TableSysFlag=0;
m_TableMDate="";
break;
case 1:
b_TableName="";
b_TableClassID="";
b_TableDesc="";
b_TableSysFlag=0;
b_TableMDate="";
break;
}
}
void TsdTable::BatchLetValue()
{
m_TableName=m_Query->FieldValues["TableName"];
m_TableClassID=m_Query->FieldValues["TableClassID"];
m_TableDesc=m_Query->FieldValues["TableDesc"];
m_TableSysFlag=m_Query->FieldValues["TableSysFlag"];
m_TableMDate=m_Query->FieldValues["TableMDate"];
BackupValue();
}
void TsdTable::Assign(TsdTable *p)
{
this->SetActionID(p->CurStatus);
this->m_sdField=p->m_sdField;
this->m_TableName=p->m_TableName;
this->m_TableClassID=p->m_TableClassID;
this->m_TableDesc=p->m_TableDesc;
this->m_TableSysFlag=p->m_TableSysFlag;
this->m_TableMDate=p->m_TableMDate;
if(this->CurStatus==3)
{
this->b_sdField=p->b_sdField;
this->b_TableName=p->b_TableName;
this->b_TableClassID=p->b_TableClassID;
this->b_TableDesc=p->b_TableDesc;
this->b_TableSysFlag=p->b_TableSysFlag;
this->b_TableMDate=p->b_TableMDate;
}
else
this->BackupValue();
}
void TsdTable::AssignValue()
{
TsdTable *p=(TsdTable *)Records(CurRecNo);
Assign(p);
}
int TsdTable::Query()
{
AnsiString m_SqlStr;
m_SqlStr=QueryString;
if(FilterString.IsEmpty()==false)
m_SqlStr=m_SqlStr+" where "+FilterString;
if(OrderString.IsEmpty()==false)
m_SqlStr=m_SqlStr+" Order by "+OrderString;
m_Query->Close();
m_Query->SQL->Clear();
m_Query->SQL->Add(m_SqlStr);
m_Query->Open();
for(int i=0;i<this->Count;i++)
{
this->LocateByIndex(i);
this->AssignValue();
delete m_sdField;
}
ClearRecord();
if(m_Query->RecordCount>0)
{
m_Query->First();
while(!m_Query->Eof)
{
BatchLetValue();
NewDetail();
m_sdField->FilterString=" FieldTableName='"+m_TableName+"'";
m_sdField->OrderString=" FieldNo ";
m_sdField->Query();
TsdTable *p=new TsdTable();
SetActionID(1);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -