Дипломная работа: Автоматизация приема заявок на ремонт и модернизацию ПК в АО НПО "Турботехника"

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам
133
Приложение Е. Часть программного кода разработанного продукта
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include <tchar.h>
#include <Midas.hpp>
#include <Datasnap.DSIntf.hpp>
//---------------------------------------------------------------------------
USEFORM("udmServer.cpp", dmServer); /* TDataModule: File Type */
USEFORM("udssmRemoteData.cpp", dssmRemoteData); /* TDSServerModule: File Type */
USEFORM("ufMain.cpp", fMain);
//---------------------------------------------------------------------------
WINAPI _tWinMain(HINSTANCE, HINSTANCE, LPTSTR, int)
{
try
{
RegisterMidasLib(DllGetClassObject);
Application->Initialize();
Application->MainFormOnTaskBar = true;
Application->CreateForm(__classid(TfMain), &fMain);
Application->CreateForm(__classid(TdmServer), &dmServer);
Application->Run();
}
catch (Exception &exception)
{
Application->ShowException(&exception);
}
catch (...)
{
try
{
throw Exception("");
}
catch (Exception &exception)
{
Application->ShowException(&exception);
}
}
return 0;
}
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
#pragma hdrstop
#include "uConnectionInfo.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
//---------------------------------------------------------------------------
134
#pragma hdrstop
#include "udmServer.h"
#include "udssmRemoteData.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TdmServer *dmServer;
//---------------------------------------------------------------------------
__fastcall TdmServer::TdmServer(TComponent* Owner)
: TDataModule(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TdmServer::DSServerClassGetClass(TDSServerClass *DSServerClass,
TPersistentClass &PersistentClass)
{
// Определяем серверный класс
PersistentClass = __classid(TdssmRemoteData);
}
//---------------------------------------------------------------------------
void __fastcall TdmServer::DSAuthenticationManagerUserAuthenticate(TObject *Sender,
const UnicodeString Protocol, const UnicodeString Context, const
UnicodeString User,
const UnicodeString Password, bool &valid, TStrings *UserRoles)
{
// valid - флаг, определяющий, разрешить пользователю вход на сервер или
запретить;
// в нашем случае он определяется исходя из того, найден ли пользователь в БД
// по логину и паролю или нет.
valid = false;
// Блокировка пользователя;
bool Blocked = false;
// Тип пользователя;
int UserTypeKey;
// Код пользователя;
int UserKey = GetUserKey (User, Password, Blocked, UserTypeKey);
// Определяем, "впускать ли пользователя в систему, или нет"
valid = UserKey > 0;
// Если блокировка установлена, то выбрасываем исключение;
if (Blocked == true) throw new Exception ("Вход в систему невозможен. Ваш аккаунт
заблокирован.");
// Если валидация не установлена, то выбрасываем исключение;
if (valid == false) throw new Exception ("Неверная пара логин/пароль.");
// Если все проверки пройдены, ищем соответствующий элемент списка,
// который связан идентификатором текущего потока (ThreadId);
TConnectionInfo *CI = ConnectionList->GetConnectionKey (GetCurrentThreadId());
// Записываем "код пользователя";
CI->UserKey = UserKey;
// Записываем "тип пользователя";
135
CI->UserTypeKey = UserTypeKey;
}
//---------------------------------------------------------------------------
TADOTable* __fastcall TdmServer::GetTable (UnicodeString TableName)
{
// Создаем объект;
TADOTable* Result = new TADOTable (NULL);
try
{
// Для созданного объекта определяем соединение с базой данных;
Result->Connection = adoConnection;
// Указываем имя таблицы;
Result->TableName = TableName;
// Открываем набор;
Result->Open ();
// Возвращаем результат;
return Result;
}
catch (...)
{
//
// В случае ошибки:
// Разрушаем объект
Result->Free ();
// Передаем ошибку в главный обработчик;
throw;
}
}
//---------------------------------------------------------------------------
TADOQuery* __fastcall TdmServer::GetQuery (UnicodeString SQL)
{
// Создаем объект;
TADOQuery* Result = new TADOQuery (NULL);
try
{
// Для созданного объекта определяем соединение с базой данных;
Result->Connection = adoConnection;
// Определяем запрос SQL;
Result->SQL->Text = SQL;
TStringList *L = new TStringList ();
try
{
//
if (FileExists(ExtractFilePath(Application->ExeName) +
"\\SelectHistory.txt"))
{
L->LoadFromFile(ExtractFilePath(Application->ExeName) +
"\\SelectHistory.txt");
}
L->Add("[" + DateTimeToStr(Now ()) + "]");
L->Add(SQL);
136
L->SaveToFile(ExtractFilePath(Application->ExeName) +
"\\SelectHistory.txt");
}
catch (...)
{
}
// Открываем набор;
Result->Open ();
return Result;
}
catch (...)
{
// В случае ошибки:
// Разрушаем объект
Result->Free ();
// Передаем ошибку в главный обработчик;
throw;
}
}
//---------------------------------------------------------------------------
int __fastcall TdmServer::ExecQuery (UnicodeString SQL)
{
// Создаем объект;
TADOQuery* Result = new TADOQuery (NULL);
try
{
// Для созданного объекта определяем соединение с базой данных;
Result->Connection = adoConnection;
// Определяем запрос SQL;
Result->SQL->Text = SQL;
// Возвращаем результат выполнения запроса;
int Value = Result->ExecSQL();
// Освобождаем память;
Result->Free ();
//
return Value;
}
catch (...)
{
// В случае ошибки:
// Разрушаем объект
Result->Free ();
// Передаем ошибку в главный обработчик;
throw;
}
}
//---------------------------------------------------------------------------
int __fastcall TdmServer::GetUserKey (UnicodeString Login, UnicodeString Password, bool
&Blocked, int &UserType)
{
// Создаем объект;
137
// Производим поис по логину без учета регистра символов;
TADOQuery *T = GetQuery ("select * from [user] where Login = " + QuotedStr
(Login));
try
{
// проверяем, найдена ли строка, удовлетворяющая условию;
if (T->RecordCount > 0)
{
// Проверяем пароль (уже с учетом регистра символов)
if (T->FieldByName("Password")->AsString == Password)
{
// Провера логина и пароля прошла успешно;
// Возвращаем тип пользователя
UserType = T->FieldByName("ID_User_type")->AsInteger;
// Возвращаем значение блокировки пользователя;
Blocked = T->FieldByName("Block")->AsBoolean;
// Возвращаем код пользователя;
int UserKey = T->FieldByName("ID")->AsInteger;
// Освобождаем память ("Сотри его из memory")
T->Free ();
// Возвращаем код пользователя
return UserKey;
}
}
}
catch (...)
{
//
// В случае ошибки:
// Разрушаем объект
T->Free ();
// Передаем ошибку в главный обработчик;
throw;
}
return 0;
}
//---------------------------------------------------------------------------
UnicodeString __fastcall TdmServer::GetDataBaseName ()
{
// Загрузка имени файла базы данных из настроек (Settings.ini)
UnicodeString Result = FSettings->ReadString(c_Settings_Section_DB, "Initial File
Name", "");
// Извлекаем из этого имени Path.
// И если Path пусто, то добавляем к этому имени путь приложения;
if (ExtractFilePath(Result) == "")
{
Result = ExtractFilePath(Application->ExeName) + Result;
}
return Result;
}
void __fastcall TdmServer::DataModuleCreate(TObject *Sender)
Источник: https://baza.diplomsite.ru/previewfile/1930