Весь код.
var
sUser: string = '';
idUser: integer = -1;
isAdmin: boolean = False;
isCheckBox: boolean = False;
sHello: string;
Timer: TTimer;
/////////Переменные логов///////
sUserName: string;
sLastActionForm: string;
sEmpID: string;
sDeletedObekt: string;
sDeletedSistema : string;
sDeletedUsel : string;
sDeletedID: string;
sDeletedBirthDate: string;
{== Логи ===========================================================================================}
// Окрашивание строк в лога
procedure FrmLogs_TableGrid1_OnChange (Sender: string);
var
i,c,f,r: integer;
begin
c := FrmLogs.TableGrid1.RowCount - 1;
f := FrmLogs.TableGrid1.Columns.Count - 1;
for i := 0 to c do
begin
if FrmLogs.TableGrid1.Cells[3,i]='Вход'
THEN
for r := 0 to f do
FrmLogs.TableGrid1.Cell[r,i].Color := $0080FFFF; // закрашивание всей строки
///закрашивание ячеек
if FrmLogs.TableGrid1.Cells[3,i] = 'Добавил' then FrmLogs.TableGrid1.Cell[3,i].Color := $0080FF80;
if FrmLogs.TableGrid1.Cells[3,i] = 'Удалил' then FrmLogs.TableGrid1.Cell[3,i].Color := $008080FF;
if FrmLogs.TableGrid1.Cells[3,i] = 'Редактировал' then FrmLogs.TableGrid1.Cell[3,i].Color := clSilver;
end;
end;
////////////Логи входа////////////////////////////
procedure FrmLogs_Button1_OnClick (Sender: string; var Cancel: boolean); ///////Очистить лог входа////
var
i,c: integer;
begin
// запрашивает пароль, пароль: 123, если ввели не верно, действие кнопки отменяется (Cancel := True)
if InputBox ('Запрос', 'Введите пароль', '') = '123' then
begin
c := FrmLogs.TableGrid1.RowCount - 1; // count of records in TableGrid
for i :=0 to c do
SQLExecute('DELETE FROM logs WHERE id = ' + IntToStr(FrmLogs.TableGrid1.dbIndexToID(i)) );
FrmLogs.TableGrid1.dbUpdate;
end;
end;
procedure FormGlavn_OnClose (Sender: string; Action: string);
begin
SQLExecute('INSERT INTO logs (username, user, action, datetime) VALUES ('+ sUserName +',"'+sUser+'", "Выход", "'+ FormatDateTime('yyyy-MM-DD hh:mm:ss.000', now) +'"); ');
FrmLogs.TableGrid1.dbUpdate;
/// проверка на двойное открытие программы
if idUser <> -1 then SQLExecute('UPDATE users SET isOnline=0 WHERE id='+IntToStr(idUser) );
/// Создание резервной копии БД при закрытии
CopyFile('sqlite.db', 'Backup/backup '+ FormatDateTime('dd-mm-yyyy', now)+'.db'); // запись резервного файла БД при выходе
Timer.Free;
frmLogin.Close;
Exit;
end;
////////Логи редактирования БД/////////////////
procedure formIzm_bOK_OnAfterClick (Sender: string);
var
sCurrentDate: string;
sID: string;
sObekt: string;
sSistema: string;
sUsel: string;
sBirthDate: string;
sOperation: string;
begin
sEmpID := IntToStr(formIzm.bOK.dbGeneralTableID);
sCurrentDate := '"' + FormatDateTime('yyyy-MM-DD hh:nn:ss.000', now) + '"';
sObekt := '"'+formIzm.ComboBox1.Text+'"';
sSistema := '"'+formIzm.ComboBox3.Text+'"';
sUsel := '"'+formIzm.ComboBox7.Text+'"';
if formIzm.DateIZM.Checked then
sBirthDate := '"' + FormatDateTime('yyyy-MM-DD 00:00:00.000', formIzm.DateIZM.Date) + '"'
else sBirthDate := 'NULL';
if sLastActionForm = 'NewRecord' then sOperation := '"Добавил"';
if sLastActionForm = 'ShowRecord' then sOperation := '"Редактировал"';
SQLExecute ('INSERT INTO logs (username,user, datetime, action, id_emp, Obekt, Sistema, Usel, dateofbirth)' +
'VALUES ('+ sUserName +',"'+sUser+'",' +sCurrentDate+','+sOperation+','+sEmpID+','+sObekt+','+sSistema+','+sUsel+','+sBirthDate+')');
FrmLogs.TableGrid1.dbUpdate;
end;
procedure FormGlavn_bDelete_OnAfterClick (Sender: string);
var
sCurrentDate: string;
begin
sCurrentDate := '"' + FormatDateTime('yyyy-MM-DD hh:nn:ss.000', now) + '"';
SQLExecute ('INSERT INTO logs (username,user,datetime, action, id_emp, Obekt, Sistema, Usel, dateofbirth)' +
'VALUES ('+ sUserName +',"'+sUser+'",'+sCurrentDate+',"Удалил",'+'NULL'+',"'+sDeletedObekt+'","'+sDeletedSistema+'","'+sDeletedUsel+'",NULL)');
FrmLogs.TableGrid1.dbUpdate;
end;
{=============================================================================================}
////Изменение пароля пользователем
procedure frmChangePassword_OnShow (Sender: string; Action: string);
begin
frmChangePassword.edPassword.Clear;
frmChangePassword.edNewPassword.Clear;
frmChangePassword.edNewPassword2.Clear;
end;
procedure frmChangePassword_Button1_OnClick (Sender: string; var Cancel: boolean);
var
s: string;
begin
// SQL-запрос для проверки пользователя и пароля
s := VarToStr( SQLExecute('SELECT count(id) FROM users WHERE (login = ''' + sUser + ''') AND (password = ' + frmChangePassword.edPassword.sqlValue + ');') );
// если SQL-запрос найден логин и пароль
if (s <> '0') and (s<>'') then
begin
if frmChangePassword.edNewPassword.Text = frmChangePassword.edNewPassword2.Text then
begin
// изменить пароль
SQLExecute('UPDATE users SET password='+frmChangePassword.edNewPassword.sqlValue + ' WHERE login = ''' + sUser + '''');
ShowMessage('Пароль был изменен.');
frmChangePassword.Close;
end else ShowMessage('Разные пароли в текстовых полях "новый пароль" и "повторите новый пароль".');
end else ShowMessage('Неправильный пароль.');
end;
////////////////////////////////////////////////////////
// дубликат таблицы
procedure FormGlavn_TableGrid2_OnClick (Sender: string; var Cancel: boolean);
begin
if FormGlavn.TableGrid2.dbItemID <> -1 then
begin
FormGlavn.TableGrid1.dbFilter := 'id_TabOtkaz ='+FormGlavn.TableGrid2.sqlValue;
FormGlavn.TableGrid1.dbUpdate;
end else
begin
FormGlavn.TableGrid1.dbFilter := '';
FormGlavn.TableGrid1.dbUpdate;
end;
// отключенная кнопка пошаговые действия при не выделенной строке в таблице
///begin
////if FormGlavn.TableGrid2.SelectedRow = -1 then Cancel := True;
//////end;
end;
procedure formIzm_CheckBox1_OnKeyUp (Sender: string; var Key: Word; Shift, Alt, Ctrl: boolean);
begin
if (isCheckBox) and (formIzm.bOK.dbGeneralTableId>0) then
SQLExecute('UPDATE TabOtkaz SET StatusOtkaza = ' + formIzm.CheckBox1.sqlValue + ' WHERE id = '+IntToStr(formIzm.bOK.dbGeneralTableId));
end;
procedure formIzm_CheckBox1_OnMouseUp (Sender: string; MouseLeft, MouseRight, MouseMiddle: boolean; Shift, Alt, Ctrl: boolean; X, Y: Integer);
begin
if (isCheckBox) and (formIzm.bOK.dbGeneralTableId>0) then
SQLExecute('UPDATE TabOtkaz SET StatusOtkaza = ' + formIzm.CheckBox1.sqlValue + ' WHERE id = '+IntToStr(formIzm.bOK.dbGeneralTableId));
end;
procedure frmLogin_bLogin_OnClick (Sender: string; var Cancel: boolean);
var
s: string;
begin
// SQL-запрос на регистрацию пользователя и пароль
s := SQLExecute('SELECT count(id) FROM users WHERE (id = ''' + IntToStr(frmLogin.cbLogin.dbItemID) + ''') AND (password = ''' + frmLogin.edPassword.Text + ''');');
// SQL-запрос найден логин и пароль
if (s <> '0') and (s<>'') then
begin
sUser := frmLogin.cbLogin.Text; // запомнить имя пользователя
idUser := frmLogin.cbLogin.dbItemID; // запомнить идентификатор пользователя в базе
/////Регистрация двойного входа
if SQLExecute( 'SELECT isOnline FROM users WHERE id='+IntToStr(frmLogin.cbLogin.dbItemID) ) = '1' then
if mrNo = MessageDlg(('Пользователь уже в сети. Вы действительно хотите войти?'), mtInformation, mbYes+mbNo, 0) then FormGlavn.Close;
/////Логи входа/////
SQLExecute('INSERT INTO logs (username, user, action, datetime) VALUES ('+ sUserName +',"'+sUser+'", "Вход", "'+ FormatDateTime('yyyy-MM-DD hh:mm:ss.000', now) +'"); ');
FrmLogs.TableGrid1.dbUpdate;
///////////////////
// Administrator? Видно только для админа
if SQLExecute ('SELECT admin FROM users WHERE id = '+IntToStr(idUser)) = '1' then isAdmin := True;
FormGlavn.bUsers.Visible:=isAdmin;
FormGlavn.Button5.Visible:=isAdmin;
///FormGlavn.bDelete.Visible:=isAdmin;
FormGlavn.mniOptions.Visible := isAdmin;
formIzm.Button6.Visible:=isAdmin;
formIzm.Button5.Visible:=isAdmin;
formIzm.Button7.Visible:=isAdmin;
FormGlavn.Button1.Visible:=isAdmin;
FormGlavn.GroupBox6.Visible:=isAdmin;
// Can change CheckBox?
if SQLExecute ('SELECT CheckBox FROM users WHERE id = '+IntToStr(idUser)) = '1' then isCheckBox := True;
FormGlavn.Caption := 'User: ' + sUser;
frmLogin.Close; // Закрыть главную форму
SQLExecute('UPDATE users SET isOnline=1 WHERE id='+IntToStr(idUser) );
end else MessageDlg('Некорректный пароль', mtError, mbOk, 0); // сообщение если неверный пароль
end;
procedure SavePersonal_OnShow (Sender: string; Action: string);
begin
if Action = 'NewRecord' then SavePersonal.ComboBox1.dbItemID := idUser ;
end;
// мероприятия закрытия окна для входа
procedure frmLogin_OnClose (Sender: string; Action: string);
begin
// если пользователь не определен, и Пользователь закрывает окно входа в систему, закройте главную форму
if sUser='' then FormGlavn.Close;
end;
procedure formIzm_OnShow (Sender: string; Action: string);
begin
begin
if Action = 'NewRecord' then formIzm.cbUser.dbItemID := idUser ;
/////////логи редактирования бд////
sLastActionForm := Action;
sEmpID := IntToStr(formIzm.bOK.dbGeneralTableId);
end;
/////////Неактивная не своя запись//////////////////////////
begin
formIzm.DateIZM.Enabled := true;
formIzm.ComboBox1.Enabled := true;
formIzm.ComboBox3.Enabled := true;
formIzm.Edit1.Enabled := true;
formIzm.DBImage1.Enabled := true;
formIzm.bOK.Enabled := true;
formIzm.Memo1.Enabled := true;
formIzm.ComboBox4.Enabled := true;
formIzm.ComboBox5.Enabled := true;
formIzm.ComboBox7.Enabled := true;
formIzm.ComboBox2.Enabled := true;
formIzm.ComboBox6.Enabled := true;
formIzm.USTRsave.Enabled := true;
if (Action = 'ShowRecord') and (not isAdmin) then
begin
if formIzm.cbUser.dbItemID <> idUser then
begin
formIzm.DateIZM.Enabled := false;
formIzm.ComboBox1.Enabled := false;
formIzm.ComboBox3.Enabled := false;
formIzm.Edit1.Enabled := false;
formIzm.DBImage1.Enabled := false;
formIzm.bOK.Enabled := false;
formIzm.Memo1.Enabled := false;
formIzm.ComboBox4.Enabled := false;
formIzm.ComboBox5.Enabled := false;
formIzm.ComboBox7.Enabled := false;
formIzm.ComboBox2.Enabled := false;
formIzm.ComboBox6.Enabled := false;
formIzm.USTRsave.Enabled := false;
end;
end;
end;
end;
// защитить от удаления
procedure FormGlavn_bDelete_OnClick (Sender: string; var Cancel: boolean);
var
sIdUser: string;
begin
if isAdmin then Exit;
sIdUser:=SQLExecute('SELECT id_users FROM TabOtkaz WHERE id='+IntToStr(FormGlavn.TableGrid2.dbItemID));
if sIdUser<>IntToStr(idUser) then
begin
Cancel := True;
ShowMessage('У вас нет разрешения удалять записи, которые не принадлежат вам.');
end;
///////Логи изменения БД////
begin
sDeletedObekt := FormGlavn.TableGrid2.Cells[3, FormGlavn.TableGrid2.SelectedRow];
sDeletedSistema:= FormGlavn.TableGrid2.Cells[4, FormGlavn.TableGrid2.SelectedRow];
sDeletedUsel:= FormGlavn.TableGrid2.Cells[5, FormGlavn.TableGrid2.SelectedRow];
sDeletedID := IntToStr(FormGlavn.TableGrid2.dbItemID);
sDeletedBirthDate := SQLExecute ('SELECT dateofbirth FROM logs WHERE id = ' + IntToStr(FormGlavn.TableGrid2.dbItemID) );
end;
end;
// защитить от редактирования
procedure formIzm_bOK_OnClick (Sender: string; var Cancel: boolean);
begin
if isAdmin then Exit;
if idUser<>formIzm.cbUser.dbItemID then
begin
Cancel := True;
ShowMessage('У вас нет разрешения редактировать записи, которые не принадлежат вам.');
end;
// нажатие скрытой кнопки formIzm.Button12.Click;
end;
procedure FormGlavn_OnShow (Sender: string; Action: string);
begin
frmLogin.edPassword.PasswordChar := '*';
frmLogin.ShowModal; // Форма для входа
FormGlavn.mniAbout.OnClick := @MenuClickAbout;
///Дата в эдит на главной форме
begin
FormGlavn.Edit4.Text := FormatDateTime('DD-MM-yyyy', now);
end;
end;
procedure MenuClickAbout (Sender: string); // click in About menu item
begin
frmAbout.ShowModal;
end;
/////вывод фото на главную форму
procedure FormGlavn_TableGrid2_OnCellClick (Sender: string; ACol, ARow: Integer);
begin
zapolnenie();
begin
FormGlavn.DBImage1.Clear;
FormGlavn.DBImage1.LoadFromDatabase('TabOtkaz', 'ZapasFoto', FormGlavn.TableGrid2.dbItemID);
end;
end;
procedure FormGlavn_TableGrid2_OnKeyUp (Sender: string; var Key: Word; Shift, Alt, Ctrl: boolean);
begin
zapolnenie();
end;
procedure zapolnenie ();
var
idS : string;
begin
idS := inttostr(FormGlavn.TableGrid2.dbItemID) ;
FormGlavn.VneshProyavlOtkaza.Text := SQLExecute('SELECT Proyav_name FROM TabProyavlen WHERE id =(SELECT id_TabProyavlen FROM tabotkaz WHERE id = '+idS+')' ) ;
FormGlavn.LitsoObnaruj.Text := SQLExecute('SELECT Obnarug_name FROM TabObnarug WHERE id =(SELECT id_TabObnarug FROM tabotkaz WHERE id = '+idS+')' ) ;
FormGlavn.MetodUstraneniya.Text := SQLExecute('SELECT Metod_name FROM TabMetod WHERE id =(SELECT id_TabMetod FROM tabotkaz WHERE id = '+idS+')' ) ;
FormGlavn.UsloviyaObnaruj.Text := SQLExecute('SELECT Usl_name FROM TabUslovia WHERE id =(SELECT id_TabUslovia FROM tabotkaz WHERE id = '+idS+')' ) ;
FormGlavn.Komentarii.Text := SQLExecute('SELECT Primechanie FROM tabotkaz WHERE id = '+idS ) ;
FormGlavn.Edit3.Text := SQLExecute('SELECT OtcLico FROM tabotkaz WHERE id = '+idS ) ;
FormGlavn.Edit2.Text := SQLExecute('SELECT login FROM users WHERE id =(SELECT id_users FROM tabotkaz WHERE id = '+idS+')' ) ;
////FormGlavn.Edit2.Text := SQLExecute('SELECT city FROM City WHERE id =(SELECT id_City FROM tabotkaz WHERE id = '+idS+')' ) ;
///FormGlavn.DefektNomer.Text := SQLExecute('SELECT DEF№ FROM tabotkaz WHERE id = '+idS ) ;
////FormGlavn.Obekt.Text := SQLExecute('SELECT country FROM Country WHERE id =(SELECT id_Country FROM Region WHERE id = '+idS+')' ) ;
/////FormGlavn.Edit4.Text := SQLExecute('SELECT region FROM Region WHERE id =(SELECT id_Region FROM City WHERE id = '+idS+')' ) ;
end;
// открытие файла руководство пользователя
procedure FormGlavn_Button3_OnClick (Sender: string; var Cancel: boolean);
begin
OpenFile(ExtractFilePath(Application.ExeName) +'HelpR.chm');
end;
// Окрашивание строк в главной таблицы
procedure FormGlavn_TableGrid2_OnChange (Sender: string);
var
i,c,f,r: integer;
begin
c := FormGlavn.TableGrid2.RowCount - 1;
f := FormGlavn.TableGrid2.Columns.Count - 1;
for i := 0 to c do
begin
if FormGlavn.TableGrid2.Cells[0,i]='Нет'
THEN
for r := 0 to f do
FormGlavn.TableGrid2.Cell[r,i].Color := $008080FF; // закрашивание всей строки
end;
end;
procedure FormGlavn_TableGrid1_OnChange (Sender: string);
var
i,c,f,r: integer;
begin
c := FormGlavn.TableGrid1.RowCount - 1;
f := FormGlavn.TableGrid1.Columns.Count - 1;
for i := 0 to c do
begin
if FormGlavn.TableGrid1.Cells[4,i]='Отказ'
THEN
for r := 0 to f do
FormGlavn.TableGrid1.Cell[r,i].Color := $008080FF; // закрашивание всей строки
end;
end;
// Окрашивание строк в подчиненной таблицы
procedure formIzm_TableGrid1_OnChange (Sender: string);
var
i,c,f,r: integer;
begin
c := formIzm.TableGrid1.RowCount - 1;
f := formIzm.TableGrid1.Columns.Count - 1;
for i := 0 to c do
begin
if formIzm.TableGrid1.Cells[4,i]='Отказ'
THEN
for r := 0 to f do
formIzm.TableGrid1.Cell[r,i].Color := $008080FF; // закрашивание всей строки
end;
end;
// администрирование подчиненной таблицы
// защитить от редактирования подчиненной таблицы
procedure formIzm_Button2_OnClick (Sender: string; var Cancel: boolean);
var
sIdUser: string;
begin
if isAdmin then Exit;
sIdUser:=SQLExecute('SELECT id_users FROM TabDeystvPerson WHERE id='+IntToStr(formIzm.TableGrid1.dbItemID));
if sIdUser<>IntToStr(idUser) then
begin
Cancel := True;
ShowMessage('У вас нет разрешения редактировать записи, которые не принадлежат вам.');
end;
end;
// защитить от удаления подчиненной таблицы
procedure formIzm_Button3_OnClick (Sender: string; var Cancel: boolean);
var
sIdUser: string;
begin
if isAdmin then Exit;
sIdUser:=SQLExecute('SELECT id_users FROM TabDeystvPerson WHERE id='+IntToStr(formIzm.TableGrid1.dbItemID));
if sIdUser<>IntToStr(idUser) then
begin
Cancel := True;
ShowMessage('У вас нет разрешения удалять записи, которые не принадлежат вам.');
end;
end;
begin
// Начала проверьте, есть ли пользователь, администратор базы данных
// если нет, создать учетную запись администратора с именем пользователя admin и паролем admin
if SQLExecute('SELECT count(id) FROM users;') = '0' then
begin
SQLExecute('INSERT INTO users (login, password, admin) VALUES ("admin", "admin", 1);');
frmLogin.cbLogin.dbItemID:=1;
frmLogin.edPassword.Text := 'admin';
end;
frmLogin.Button1.Default := True;
formIzm.cbUser.Enabled:=false;
///лог входа
sUserName := '"'+GetUserName+'"';
////Ограничение ввыода в ГРИД
FormGlavn.TableGrid2.dbLimit := 1000;
end.
И если не сложно напишите пож в какой строке ошибка была. заранее спс.
Сегодня пробовал работать по сети. При входе не определяет компьютер но определяет пользователя. При удалении, редактировании или добавлении определяет компьютер но не определяет пользователя. Это косаемо логов. Подскажите пож в чем может быть дело. Заранее спс.