#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include <File.au3>
#include <SQLite.au3>
#include <Array.au3>
#include <GuiComboBox.au3>
#include <GuiListView.au3>
If Not FileExists(@ScriptDir & '/DB_DATA.db') Then
MsgBox(48, 'Ошибка !', 'Не найден файл базы данных !' & @CRLF & 'DB_DATA.db', 3)
Exit
EndIf
If Not FileExists(@ScriptDir & '/File_Nomer_zapisi.dat') Then
MsgBox(48, 'Ошибка !', 'Не найден файл базы данных !' & @CRLF & 'File_Nomer_zapisi.dat', 3)
Exit
EndIf
$IniFile = @ScriptDir & '/Users.ini'
If Not FileExists($IniFile) Then _FileCreate($IniFile)
#Region ### START Koda GUI section ### Form=d:\7 ДЕЛА\РАБ Техзадание на БД ЭУ3\Форма БД Заказчиков\form1.kxf
$Form1_1 = GUICreate("Form1", 618, 478, 866, 325)
$Button1 = GUICtrlCreateButton("Новая запись", 8, 8, 97, 49)
$Label1 = GUICtrlCreateLabel("Номер записи", 112, 24, 117, 20, $SS_CENTER)
GUICtrlSetFont(-1, 10, 800, 0, "MS Sans Serif")
GUICtrlSetBkColor(-1, 0xFFFFE1)
$Button2 = GUICtrlCreateButton("/\", 344, 8, 25, 25)
$Button3 = GUICtrlCreateButton("\/", 344, 32, 25, 25)
$Label2 = GUICtrlCreateLabel("Дата создания", 384, 24, 114, 20, $SS_CENTER)
GUICtrlSetFont(-1, 10, 800, 0, "MS Sans Serif")
GUICtrlSetBkColor(-1, 0xA6CAF0)
$Label3 = GUICtrlCreateLabel("", 504, 26, 99, 17, $SS_CENTER)
GUICtrlSetBkColor(-1, 0xFFFFFF)
$Label4 = GUICtrlCreateLabel("Пользователь", 8, 80, 111, 20)
GUICtrlSetFont(-1, 10, 800, 0, "MS Sans Serif")
GUICtrlSetBkColor(-1, 0xA6CAF0)
$Label5 = GUICtrlCreateLabel(" Должность", 328, 80, 88, 20, $SS_CENTER)
GUICtrlSetFont(-1, 10, 800, 0, "MS Sans Serif")
GUICtrlSetBkColor(-1, 0xA6CAF0)
$Label6 = GUICtrlCreateLabel("Название", 8, 128, 102, 20)
GUICtrlSetFont(-1, 10, 800, 0, "MS Sans Serif")
GUICtrlSetBkColor(-1, 0xFFFFE1)
$Label7 = GUICtrlCreateLabel("Модель", 8, 168, 100, 20)
GUICtrlSetFont(-1, 10, 800, 0, "MS Sans Serif")
GUICtrlSetBkColor(-1, 0xFFFFE1)
$Label8 = GUICtrlCreateLabel("Номер", 8, 208, 100, 20)
GUICtrlSetFont(-1, 10, 800, 0, "MS Sans Serif")
GUICtrlSetBkColor(-1, 0xFFFFE1)
$Label9 = GUICtrlCreateLabel(" Владелец", 8, 248, 97, 20)
GUICtrlSetFont(-1, 10, 800, 0, "MS Sans Serif")
GUICtrlSetBkColor(-1, 0xFFFFE1)
$Label10 = GUICtrlCreateLabel("Адрес владельца", 8, 288, 605, 20, $SS_CENTER)
GUICtrlSetFont(-1, 10, 800, 0, "MS Sans Serif")
GUICtrlSetBkColor(-1, 0xA6CAF0)
$Label11 = GUICtrlCreateLabel("Коментарий", 8, 352, 606, 20, $SS_CENTER)
GUICtrlSetFont(-1, 10, 800, 0, "MS Sans Serif")
GUICtrlSetBkColor(-1, 0xA6CAF0)
$Input2 = GUICtrlCreateCombo("", 128, 80, 165, 21) ;Пользователь
$Add_User = GUICtrlCreateButton('+', 294, 70, 20, 20)
$Dell_User = GUICtrlCreateButton('-', 294, 91, 20, 20)
$User_ini = IniReadSection($IniFile, 'Пользователь')
If IsArray($User_ini) Then
For $i = 1 To $User_ini[0][0]
GUICtrlSetData($Input2, $User_ini[$i][0], $User_ini[1][0])
Next
EndIf
$Input3 = GUICtrlCreateCombo("", 424, 80, 165, 21) ;должность
$Add_Post = GUICtrlCreateButton('+', 590, 70, 20, 20)
$Dell_Post = GUICtrlCreateButton('-', 590, 91, 20, 20)
$Post_ini = IniReadSection($IniFile, 'Должность')
If IsArray($Post_ini) Then
For $i = 1 To $Post_ini[0][0]
GUICtrlSetData($Input3, $Post_ini[$i][0], $Post_ini[1][0])
Next
EndIf
$Input1 = GUICtrlCreateInput("", 232, 24, 81, 21, BitOR($GUI_SS_DEFAULT_INPUT, $ES_CENTER)) ;Номер записи
$Input4 = GUICtrlCreateInput("", 112, 128, 473, 21) ;название
$Input5 = GUICtrlCreateInput("", 112, 168, 473, 21) ;модель
$Input6 = GUICtrlCreateInput("", 112, 208, 473, 21) ;Номер
$Input7 = GUICtrlCreateInput("", 112, 248, 473, 21) ;Владелец
$Input8 = GUICtrlCreateInput("", 8, 312, 603, 21) ;Адрес владельца
$Input9 = GUICtrlCreateInput("", 8, 376, 603, 21) ;Коментарий
$Button4 = GUICtrlCreateButton("П", 312, 22, 25, 25)
$Button5 = GUICtrlCreateButton("П", 584, 126, 25, 25)
$Button6 = GUICtrlCreateButton("П", 584, 166, 25, 25)
$Button9 = GUICtrlCreateButton("П", 584, 206, 25, 25)
$Button10 = GUICtrlCreateButton("П", 584, 246, 25, 25)
$Button7 = GUICtrlCreateButton("Сохранить", 256, 416, 105, 41)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
_SQLite_Startup() ; Загружаем "SQLite3.dll"
If @error > 0 Then Exit MsgBox(16, 'SQLite Ошибка', 'SQLite.dll Не может быть загружен!')
Global $dbn = _SQLite_Open('DB_DATA.db') ; Открываем БД
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $Button10 ; Поиск по владельцу
$Zapros = "SELECT * FROM TABLE_DATA WHERE ARG_Vladelec='" & GUICtrlRead($Input7) & "'"
$Text = 'Владелец ' & GUICtrlRead($Input7) & ' не найден !'
_Search($Zapros, $Text)
Case $Button9 ; Поиск по номеру
$Zapros = "SELECT * FROM TABLE_DATA WHERE ARG_Nomer='" & GUICtrlRead($Input6) & "'"
$Text = 'Номер ' & GUICtrlRead($Input6) & ' не найден !'
_Search($Zapros, $Text)
Case $Button6 ; Поиск по Модели
$Zapros = "SELECT * FROM TABLE_DATA WHERE ARG_Model='" & GUICtrlRead($Input5) & "'"
$Text = 'Модель ' & GUICtrlRead($Input5) & ' не найдена !'
_Search($Zapros, $Text)
Case $Button5 ; Поиск по Названию
$Zapros = "SELECT * FROM TABLE_DATA WHERE ARG_Naimenovanie='" & GUICtrlRead($Input4) & "'"
$Text = 'Название ' & GUICtrlRead($Input4) & ' не найдено !'
_Search($Zapros, $Text)
Case $Button4 ; Поиск по номеру записи
$Zapros = "SELECT * FROM TABLE_DATA WHERE ARG_Nomer_Zapisi='" & GUICtrlRead($Input1) & "'"
$Text = 'Номер ' & GUICtrlRead($Input1) & ' не найден!'
_Search($Zapros, $Text)
Case $Button2 ; Номер плюс
GUICtrlSetData($Input1, GUICtrlRead($Input1) + 1)
Case $Button3 ; Номер минус
If GUICtrlRead($Input1) - 1 > 0 Then GUICtrlSetData($Input1, GUICtrlRead($Input1) - 1)
Case $Button1 ;Новая запись
_NewRecord()
Case $Button7 ; Сохранить
_Save()
Case $GUI_EVENT_CLOSE
_Exit()
Case $Add_User ;Новый пользователь
_AddUser()
Case $Dell_User ; Удалить пользователя
$Del_User = GUICtrlRead($Input2)
If MsgBox(48 + 1, 'Внимание !', 'Вы уверены, что хотите удалить пользователя' & @CRLF & $Del_User & '?') = 1 Then
IniDelete($IniFile, 'Пользователь', $Del_User)
_GUICtrlComboBox_DeleteString($Input2, _GUICtrlComboBox_FindString($Input2, $Del_User))
EndIf
Case $Add_Post ;Добавить должность
_AddPost()
Case $Dell_Post ; Удалить должность
$Del_Post = GUICtrlRead($Input3)
If MsgBox(48 + 1, 'Внимание !', 'Вы уверены, что хотите удалить должность' & @CRLF & $Del_Post & '?') = 1 Then
IniDelete($IniFile, 'Должность', $Del_Post)
_GUICtrlComboBox_DeleteString($Input3, _GUICtrlComboBox_FindString($Input3, $Del_Post))
EndIf
EndSwitch
WEnd
Func _Save()
Local $aResult, $iRows, $iColumns
$iRval = _SQLite_GetTable2d($dbn, "SELECT * FROM TABLE_DATA WHERE ARG_Nomer_Zapisi='" & GUICtrlRead($Input1) & "'", $aResult, $iRows, $iColumns) ; возвращает двумерный массив в $aResult
If $iRval = $SQLITE_OK Then
If UBound($aResult) > 1 Then ;Обновление записи, если номер уже есть в базе
$TextZaprosa = "UPDATE TABLE_DATA SET ARG_User='" & GUICtrlRead($Input2) & "',ARG_Doljnost='" & GUICtrlRead($Input3) & "',ARG_Naimenovanie='" & GUICtrlRead($Input4) & "',ARG_Model='" & GUICtrlRead($Input5) & "',ARG_Nomer='" & GUICtrlRead($Input6) & "',ARG_Vladelec='" & GUICtrlRead($Input7) & "',ARG_Adres='" & GUICtrlRead($Input8) & "',ARG_Comments='" & GUICtrlRead($Input9) & "' WHERE ARG_Nomer_Zapisi=" & GUICtrlRead($Input1) & ";"
If Not _SQLite_Exec($dbn, $TextZaprosa) = $SQLITE_OK Then
MsgBox(16, 'SQLite Ошибка', _SQLite_ErrMsg())
_Exit()
EndIf
Else ;Сохранение записи в базу, если номер записи новый
If Not _SQLite_Exec($dbn, "INSERT INTO TABLE_DATA VALUES ('" & GUICtrlRead($Input1) & "','" & @MDAY & "','" & @MON & "','" & @YEAR & "','" & GUICtrlRead($Input2) & "','" & GUICtrlRead($Input3) & "','" & GUICtrlRead($Input4) & "','" & GUICtrlRead($Input5) & "','" & GUICtrlRead($Input6) & "','" & GUICtrlRead($Input7) & "','" & GUICtrlRead($Input8) & "','" & GUICtrlRead($Input9) & "');") = $SQLITE_OK Then
MsgBox(16, 'SQLite Ошибка', _SQLite_ErrMsg())
_Exit()
EndIf
EndIf
Else
MsgBox(16, "Ошибка SQLite: " & $iRval, _SQLite_ErrMsg())
EndIf
EndFunc ;==>_Save
Func _AddPost()
$NewPost = GUICtrlRead($Input3)
$SavePost = 1
; Проверка, что введенной должности нет в ини файле
$Post_ini = IniReadSection($IniFile, 'Должность')
If IsArray($Post_ini) Then
For $i = 1 To $Post_ini[0][0]
If $NewPost = $Post_ini[$i][0] Then
$SavePost = 0
ExitLoop
EndIf
Next
EndIf
If $SavePost Then
IniWrite($IniFile, 'Должность', $NewPost, '')
GUICtrlSetData($Input3, $NewPost, $NewPost)
Else
MsgBox(48, 'Ошибка !', 'Должность ' & $NewPost & @CRLF & 'уже существует !')
EndIf
EndFunc ;==>_AddPost
Func _Search($Zapros, $Text)
Local $aResult, $iRows, $iColumns
$iRval = _SQLite_GetTable2d($dbn, $Zapros, $aResult, $iRows, $iColumns) ; возвращает двумерный массив в $aResult
If $iRval = $SQLITE_OK Then
If UBound($aResult) = 2 Then
GUICtrlSetData($Label3, $aResult[1][1] & ' ' & _Month($aResult[1][2]) & ' ' & $aResult[1][3])
GUICtrlSetData($Input2, $aResult[1][4])
GUICtrlSetData($Input3, $aResult[1][5])
GUICtrlSetData($Input4, $aResult[1][6])
GUICtrlSetData($Input5, $aResult[1][7])
GUICtrlSetData($Input6, $aResult[1][8])
GUICtrlSetData($Input7, $aResult[1][9])
GUICtrlSetData($Input8, $aResult[1][10])
GUICtrlSetData($Input9, $aResult[1][11])
ElseIf UBound($aResult) > 2 Then
_Select($aResult, $Form1_1)
Else
MsgBox(16, "Ошибка поиска", $Text)
EndIf
Else
MsgBox(16, "Ошибка SQLite: " & $iRval, _SQLite_ErrMsg())
EndIf
EndFunc ;==>_Search
Func _AddUser()
$NewUser = GUICtrlRead($Input2)
$Save = 1
; Проверка, что введенного имени пользователя нет в ини файле
$User_ini = IniReadSection($IniFile, 'Пользователь')
If IsArray($User_ini) Then
For $i = 1 To $User_ini[0][0]
If $NewUser = $User_ini[$i][0] Then
$Save = 0
ExitLoop
EndIf
Next
EndIf
If $Save Then
IniWrite($IniFile, 'Пользователь', $NewUser, '')
GUICtrlSetData($Input2, $NewUser, $NewUser)
Else
MsgBox(48, 'Ошибка !', 'пользователь с именем ' & $NewUser & @CRLF & 'уже существует !')
EndIf
EndFunc ;==>_AddUser
Func _Select($Array, $hParent = 0)
Local $hSettings, $iGOEM_Opt
;Предотвращение проблем в случае если главный GUI использует режим событий
$iGOEM_Opt = Opt("GUIOnEventMode", 0)
$hSettings_GUI = GUICreate('Выбор позиции', 900, 300, -1, -1, -1, -1, $hParent)
$LV = GUICtrlCreateListView('Номер записи|Дата Создания|Пользователь|Должность|Название|Модель|Номер|Владелец|Адрес владельца|Коментарий', 5, 5, 890, 250, Default, BitOR($LVS_EX_CHECKBOXES, $LVS_EX_GRIDLINES))
For $i = 1 To UBound($Array) - 1
$LV_Item = _GUICtrlListView_AddItem($LV, $Array[$i][0], $i - 1)
_GUICtrlListView_AddSubItem($LV, $i - 1, $Array[$i][1] & ' ' & _Month($Array[$i][2]) & ' ' & $Array[$i][3], 1)
_GUICtrlListView_AddSubItem($LV, $i - 1, $Array[$i][4], 2)
_GUICtrlListView_AddSubItem($LV, $i - 1, $Array[$i][5], 3)
_GUICtrlListView_AddSubItem($LV, $i - 1, $Array[$i][6], 4)
_GUICtrlListView_AddSubItem($LV, $i - 1, $Array[$i][7], 5)
_GUICtrlListView_AddSubItem($LV, $i - 1, $Array[$i][8], 6)
_GUICtrlListView_AddSubItem($LV, $i - 1, $Array[$i][9], 7)
_GUICtrlListView_AddSubItem($LV, $i - 1, $Array[$i][10], 8)
_GUICtrlListView_AddSubItem($LV, $i - 1, $Array[$i][11], 9)
Next
$But_OK = GUICtrlCreateButton('Выбор', 20, 260, 150, 35)
GUISetState(@SW_DISABLE, $hParent)
GUISetState(@SW_SHOW, $hSettings_GUI)
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
ExitLoop
Case $But_OK
$Index = -1
For $i = 0 To _GUICtrlListView_GetItemCount($LV)
If _GUICtrlListView_GetItemChecked($LV, $i) Then
$Index = $i
ExitLoop
EndIf
Next
If $Index = -1 Then
MsgBox(48, 'Внимание !', 'Не выбрано ни одного пункта !', 3)
Else
GUICtrlSetData($Input1, $Array[$Index + 1][0])
GUICtrlSetData($Label3, $Array[$Index + 1][1] & ' ' & _Month($Array[$Index + 1][2]) & ' ' & $Array[$Index + 1][3])
GUICtrlSetData($Input2, $Array[$Index + 1][4])
GUICtrlSetData($Input3, $Array[$Index + 1][5])
GUICtrlSetData($Input4, $Array[$Index + 1][6])
GUICtrlSetData($Input5, $Array[$Index + 1][7])
GUICtrlSetData($Input6, $Array[$Index + 1][8])
GUICtrlSetData($Input7, $Array[$Index + 1][9])
GUICtrlSetData($Input8, $Array[$Index + 1][10])
GUICtrlSetData($Input9, $Array[$Index + 1][11])
ExitLoop
EndIf
EndSwitch
WEnd
Opt("GUIOnEventMode", $iGOEM_Opt)
GUISetState(@SW_ENABLE, $hParent)
GUIDelete($hSettings_GUI)
EndFunc ;==>_Select
Func _NewRecord()
Local $aResult, $iRows, $iColumns
$iRval = _SQLite_GetTable2d($dbn, "SELECT ARG_Nomer_Zapisi FROM TABLE_DATA;", $aResult, $iRows, $iColumns) ; возвращает двумерный массив в $aResult
If $iRval = $SQLITE_OK Then
Local $NewNumber = _ArrayMax($aResult, 1) + 1
GUICtrlSetData($Input1, $NewNumber)
;_ArrayDisplay($aResult)
Else
MsgBox(16, "Ошибка SQLite: " & $iRval, _SQLite_ErrMsg())
EndIf
Local $NewData = @MDAY & ' ' & _Month(@MON) & ' ' & @YEAR
GUICtrlSetData($Label3, $NewData)
EndFunc ;==>_NewRecord
Func _Month($Number)
Switch $Number
Case 1
Return 'Января'
Case 2
Return 'Февраля'
Case 3
Return 'Марта'
Case 4
Return 'Апреля'
Case 5
Return 'Мая'
Case 6
Return 'Июня'
Case 7
Return 'Июля'
Case 8
Return 'Августа'
Case 9
Return 'Сентября'
Case 10
Return 'Октября'
Case 11
Return 'Ноября'
Case 12
Return 'Декабря'
EndSwitch
EndFunc ;==>_Month
Func _Exit() ; Выход
_SQLite_Close()
_SQLite_Shutdown()
Exit
EndFunc ;==>_Exit