⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 system.cpp

📁 邮 电 公 司 erp源码
💻 CPP
📖 第 1 页 / 共 5 页
字号:



//==========================================
//(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 + -