📄 datamodule.~cpp
字号:
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "DataModule.h" //数据模块窗体头文件
#include "Archives_Config.h" //数据库服务器配置窗体头文件
#include "Main.h" //考勤工资管理系统主窗体头文件
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TDM *DM;
//---------------------------------------------------------------------------
__fastcall TDM::TDM(TComponent* Owner)
: TDataModule(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TDM::DataModuleCreate(TObject *Sender)
{ /*****数据模块窗体创建事件*****/
TIniFile *ini; //申请一个TIniFile类对象
//打开INI文件,如果不存在则创建与应用程序同名,后缀名为.INI的ini配置文件
ini = new TIniFile(ExtractFilePath(ParamStr(0))+"Config.INI");
bool State;
State = ini->ReadBool("Database","Connection",false); //读取数据库连接是否成功标志,第一次读或者此项不存在时则返回默认值false赋State变量
if(!State){ //数据库没有连接成功
try{
F_Config = new TF_Config(Application); //动态创建数据库服务器配置窗体
F_Config->ShowModal(); //显示数据库服务器配置窗口
delete F_Config; //释放F_Config对象
F_Config = NULL; //编程技巧,以免重复释放时抛出异常
}
catch(Exception &exception){
delete F_Config; //释放F_Config对象
Application->ShowException(&exception); //弹出异常对话框
}
// F_Config->ShowModal(); //弹出数据库服务器配置窗口
}
char CString[100];
StrCopy(CString,"Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog="); //拷贝字符串到CString
AnsiString str,str1;
str = ini->ReadString("Database","Initial Catalog","WSalary"); //从配置文件读数据库名
StrCat(CString,str.c_str()); //追加从配置文件读入的数据库名字符串
str1 = ini->ReadString("Database","Data Source","FLYYCS\\YCS"); //从配置文件读数据库服务器名
delete ini; //释放ini对象
StrCat(CString,";Data Source="); //追加字符串到CString
StrCat(CString,str1.c_str()); //追加从配置文件读入的数据库服务器名字符串
DM->ADOConnection->Connected = false;
DM->ADOConnection->ConnectionString = CString; //数据库连接属性字符串赋新值
try{ //捕捉异常
DM->ADOConnection->Connected = true; //启动与数据库服务器的连接
DM->AQ_Atten->Active = true; //激活各个数据表与服务器的连接
DM->AQ_OTime->Active = true;
DM->AQ_Evec->Active = true;
DM->AQ_Leave->Active = true;
DM->AQ_Stat->Active = true;
DM->AQ_Salary->Active = true;
DM->AQ_SOther->Active = true;
DM->AQ_Employee->Active = true;
DM->AT_Employee->Active = true;
DM->AT_Type->Active = true;
DM->AT_Count->Active = true;
DM->AQ_WSet->Active = true;
}
catch(...){ //抛出异常
MessageBox(NULL,"与数据库服务器连接未成功,请重新配置,或者使用公文包模式","警告对话框",MB_ICONWARNING);
F_Main->StatusBar1->Panels->Items[3]->Text = "数据库连接未成功,请使用公文包模式工作"; //给第三个状态栏赋值
}
if(DM->ADOConnection->Connected) //数据库连接成功
F_Main->StatusBar1->Panels->Items[3]->Text = "数据库连接成功"; //给第三个状态栏赋值
TIniFile *iniW; //申请一个TIniFile类对象
//打开INI文件,如果不存在则创建与应用程序同名,后缀名为.INI的ini配置文件
iniW = new TIniFile(ExtractFilePath(ParamStr(0))+"Config.INI");
State = DM->ADOConnection->Connected; //取得数据库连接是否成功标志值
iniW->WriteBool("Database","Connection",State); //将数据库连接是否成功标志值写入配置文件
delete iniW; //释放iniW对象
iniW = NULL; //编程技巧,这样可以在下次不小心再delete ini一次时也不会抛出异常
}
//---------------------------------------------------------------------------
void __fastcall TDM::AQ_EvecCalcFields(TDataSet *DataSet)
{ /*****出差信息表出差时间时间字段OnCalcFields事件*****/
AQ_EvecEvection_Time->Value = Ceil(AQ_EvecEvection_TEnd->Value.operator -(AQ_EvecEvection_TStart->Value).Val); //自动计算出差时间,以天计算
}
//---------------------------------------------------------------------------
void __fastcall TDM::AQ_LeaveCalcFields(TDataSet *DataSet)
{ /*****请假信息表出差时间时间字段OnCalcFields事件*****/
AQ_LeaveLeave_Time->Value = Ceil(AQ_LeaveLeave_DEnd->Value.operator -(AQ_LeaveLeave_DStart->Value).Val); //自动计算请假时间
}
//---------------------------------------------------------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -