📄 depmanage.~cpp
字号:
//--------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "DepManage.h"
//--------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TfmDepManage *fmDepManage;
//-------------------------------------------------------------------
__fastcall TfmDepManage::TfmDepManage(TComponent* Owner)
: TForm(Owner)
{
szCodeTable="组织机构编码表";
szFieldName="单位编号";
nBits=12; // 采用12为编码
for(int i=0;i<TreeView1->Items->Count;i++)
{
if(TreeView1->Items->Item[i]->Data)
delete (TList*)(TreeView1->Items->Item[i]->Data);
}
// 初始化机构树
while(TreeView1->Items->Count>0)
{
TreeView1->Items->Item[0]->DeleteChildren();
TreeView1->Items->Item[0]->Delete();
}
// 从数据库中读取机构层级关系并显示在树控件中
Query1->SQL->Clear();
Query1->SQL->Add("select * from 组织机构编码表 order by absIndex");
Query1->Open();
Query1->First();
while(!Query1->Eof)
{
AnsiString szCode = Query1->FieldByName("类别号")->AsString;
AnsiString szCode1 = Query1->FieldByName("单位编号")->AsString;
AnsiString szName = Query1->FieldByName("类别")->AsString;
int ItemLevel = Query1->FieldByName("ItemLevel")->AsInteger;
int ParentIndex = Query1->FieldByName("ParentIndex")->AsInteger;
// 父结点
if(ItemLevel==0)
{
TEdit* edCode=new TEdit(this);
TEdit* edCode1=new TEdit(this);
edCode->Text=szCode;
edCode1->Text=szCode1;
TList* MyList ;
MyList = new TList ;
MyList->Add(edCode) ;
MyList->Add(edCode1) ;
TreeView1->Items->AddObject(NULL,szName,MyList);
}
// 子结点
else
{
TTreeNode* pNode = TreeView1->Items->Item[ParentIndex];
TEdit* edCode=new TEdit(this);
TEdit* edCode1=new TEdit(this);
edCode->Text=szCode;
edCode1->Text=szCode1;
TList* MyList ;
MyList = new TList ;
MyList->Add(edCode) ;
MyList->Add(edCode1) ;
TreeView1->Items->AddChildObject(pNode,szName,MyList);
}
Query1->Next();
}
}
//-------------------------------------------------------------------
// 保存机构信息
void __fastcall TfmDepManage::btSaveClick(TObject *Sender)
{
AnsiString sql;
// 开始事务
Query1->SQL->Clear();
Query1->SQL->Add("begin tran");
Query1->ExecSQL();
try
{
// 保存原有的信息到临时表,然后先删除原有信息,重新生成
Query1->SQL->Clear();
Query1->SQL->Add("select * into zzjgtemp from 组织机构编码表");
Query1->SQL->Add("go");
Query1->SQL->Add("delete from 组织机构编码表");
Query1->ExecSQL();
// 重新生成机构编码
for(int i=0;i<TreeView1->Items->Count;i++)
{
sql="insert into 组织机构编码表(类别,单位名称,";
sql += " AbsIndex, ItemIndex, ItemLevel, ParentIndex, 类别号,";
sql += " 单位编号) values('";
sql += TreeView1->Items->Item[i]->Text;
sql += "','";
sql += TreeView1->Items->Item[i]->Text;
sql += "',";
sql += IntToStr(i);
sql += ",";
sql += IntToStr(TreeView1->Items->Item[i]->Index);
sql += ",";
sql += IntToStr(TreeView1->Items->Item[i]->Level);
sql += ",";
if(TreeView1->Items->Item[i]->Level>0)
sql += IntToStr(TreeView1->Items->
Item[i]->Parent->AbsoluteIndex);
else
sql +="-1";
sql += ",'";
sql += ((TEdit*)((TList*)(TreeView1->Items->Item[i]->Data)
)->Items[0])->Text.Trim() + "','";
sql += ((TEdit*)((TList*)(TreeView1->Items->Item[i]->Data)
)->Items[1])->Text.Trim() ;
sql += "')";
Query1->SQL->Clear();
Query1->SQL->Add(sql);
Query1->ExecSQL();
}
// 保存成功,从临时表中恢复机构的其他相关信息,如地址/电话等
Query1->SQL->Clear();
sql = "update 组织机构编码表 set 拼音编码=b.拼音编码, 单位地址=b.单位地址,";
sql += " 单位电话号码=b.单位电话号码, 开户银行=b.开户银行, 帐号=b.帐号,";
sql += " 开户全称=b.开户全称 from 组织机构编码表 as a, zzjgtemp as b";
sql += " where a.单位编号=b.单位编号";
Query1->SQL->Add(sql);
Query1->ExecSQL();
// 删除临时表
Query1->SQL->Clear();
Query1->SQL->Add("drop table zzjgtemp");
Query1->ExecSQL();
// 提交事务
Query1->SQL->Clear();
Query1->SQL->Add("commit");
Query1->ExecSQL();
}
catch(...)
{
Application->MessageBox("保存失败,编码重复或位数超长。","提示",MB_OK) ;
Query1->SQL->Clear();
Query1->SQL->Add("rollback");
Query1->ExecSQL();
}
}
//-------------------------------------------------------------------
void __fastcall TfmDepManage::TreeView1GetSelectedIndex(TObject *Sender,
TTreeNode *Node)
{
try
{
TTreeNode* pNode = TreeView1->Selected;
if(!pNode)
return;
TEdit* edCode;
edCode=((TEdit*)((TList*)(pNode->Data))->Items[0]) ;
edLevelCode->Text=edCode->Text;
edName->Text=pNode->Text;
AnsiString szbh = edCode->Text.Trim();
while(pNode->Parent)
{
pNode=pNode->Parent;
edCode=((TEdit*)((TList*)(pNode->Data))->Items[0]) ;
szbh=edCode->Text.Trim()+szbh;
}
edLastCode->Text=szbh;
}
catch(...)
{}
}
//-------------------------------------------------------------------
void __fastcall TfmDepManage::btModClick(TObject *Sender)
{
// 修改现有机构信息
if(edLevelCode->Text.Trim().Length()==0||edName->Text.Trim().Length()==0)
return;
TTreeNode* pNode = TreeView1->Selected;
pNode->Text=edName->Text;
TEdit* edOldCode;
TEdit* edNewCode = new TEdit(this);
TEdit* edNewCode1 = new TEdit(this);
edNewCode->Text = edLevelCode->Text;
edNewCode1->Text = edLastCode->Text;
TList* MyList ;
MyList = (TList*)(pNode->Data);
delete MyList;
MyList = new TList ;
MyList->Add(edNewCode) ;
MyList->Add(edNewCode1) ;
pNode->Data = MyList ;
TTreeNode* pTempNode = pNode;
AnsiString szbh=((TEdit*)((TList*)(pTempNode->Data))
->Items[0])->Text.Trim();
// 重新编号
while(pTempNode->Parent)
{
pTempNode=pTempNode->Parent;
szbh=((TEdit*)((TList*)(pTempNode->Data))
->Items[0])->Text.Trim()+szbh;
}
edNewCode1->Text = szbh ;
if( szbh.Length()>nBits )
{
pNode->Delete();
ShowMessage("编码超长,已被删除!");
}
}
//-------------------------------------------------------------------
// 增加一个平级类机构
void __fastcall TfmDepManage::btAddEqlClick(TObject *Sender)
{
if(edLevelCode->Text.Trim().Length()==0||edName->Text.Trim().Length()
==0)
return;
TTreeNode* pNode = TreeView1->Selected;
TEdit* edCode=new TEdit(this);
edCode->Text=edLevelCode->Text;
TEdit* edCode1=new TEdit(this);
edCode1->Text=edLastCode->Text;
TList* MyList ;
MyList = new TList ;
MyList->Add(edCode) ;
MyList->Add(edCode1) ;
pNode=TreeView1->Items->AddObject(pNode,edName->Text,MyList);
TTreeNode* pTempNode = pNode;
AnsiString szbh = ((TEdit*)((TList*)(pTempNode->Data))
->Items[0])->Text.Trim();
while(pTempNode->Parent)
{
pTempNode=pTempNode->Parent;
szbh=((TEdit*)((TList*)(pTempNode->Data))->Items[0])
->Text.Trim()+szbh;
}
edCode1->Text= szbh ;
if( szbh.Length()>nBits )
{
pNode->Delete();
ShowMessage("编码超长,已被删除!");
}
}
//-------------------------------------------------------------------
// 增加子类机构
void __fastcall TfmDepManage::btAddSubClick(TObject *Sender)
{
if(edLevelCode->Text.Trim().Length()==0||edName->Text.Trim().Length()
==0)
return;
TTreeNode* pNode = TreeView1->Selected;
TEdit* edCode=new TEdit(this);
edCode->Text=edLevelCode->Text;
TEdit* edCode1=new TEdit(this);
edCode1->Text=edLastCode->Text;
TList* MyList ;
MyList = new TList ;
MyList->Add(edCode) ;
MyList->Add(edCode1) ;
pNode = TreeView1->Items->AddChildObject(pNode,edName->Text,MyList);
TTreeNode* pTempNode = pNode;
AnsiString szbh = ((TEdit*)((TList*)(pTempNode->Data))->Items[0])
->Text.Trim();
while(pTempNode->Parent)
{
pTempNode=pTempNode->Parent;
szbh=((TEdit*)((TList*)(pTempNode->Data))->Items[0])
->Text.Trim()+szbh;
}
edCode1->Text=szbh ;
if( szbh.Length()>nBits )
{
pNode->Delete();
ShowMessage("编码超长,已被删除!");
}
}
//-------------------------------------------------------------------
// 增加基础类机构
void __fastcall TfmDepManage::btAddBasClick(TObject *Sender)
{
if(edLevelCode->Text.Trim().Length()==0||edName->Text.Trim().Length()==0)
return;
TEdit* edCode=new TEdit(this);
edCode->Text=edLevelCode->Text;
TEdit* edCode1=new TEdit(this);
edCode1->Text=edLastCode->Text;
TList* MyList = new TList ;
MyList->Add(edCode);
MyList->Add(edCode1);
TTreeNode* pNode = TreeView1->Items->
AddObject(NULL,edName->Text,MyList);
TTreeNode* pTempNode = pNode;
AnsiString szbh = ((TEdit*)((TList*)(pTempNode->Data))
->Items[0])->Text.Trim() ;
while(pTempNode->Parent)
{
pTempNode=pTempNode->Parent;
szbh = ((TEdit*)((TList*)(pTempNode->Data))->Items[0])
->Text.Trim() ;
}
edCode1->Text=szbh ;
if( szbh.Length()>nBits )
{
pNode->Delete();
ShowMessage("编码超长,已被删除!");
}
}
//-------------------------------------------------------------------
// 删除结点(机构)
void __fastcall TfmDepManage::btDelClick(TObject *Sender)
{
TTreeNode* pNode = TreeView1->Selected ;
TList* MyList ;
MyList = (TList*)(pNode->Data) ;
delete MyList ;
pNode->DeleteChildren() ;
pNode->Delete() ;
}
//--------------------------------------------------------------------
void __fastcall TfmDepManage::FormClose(TObject *Sender, TCloseAction &Action)
{
for(int i=0;i<TreeView1->Items->Count;i++)
{
if(TreeView1->Items->Item[i]->Data)
delete (TList*)(TreeView1->Items->Item[i]->Data);
}
// 删除窗体并回收空间
Action = caFree;
}
//--------------------------------------------------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -