Что нового

Напоминалка даты из Mysql

ulan44

Знающий
Сообщения
55
Репутация
8
Версия AutoIt: 3.3.8.1

Описание:
Хочу сделать напоминалку с выбором событий из Mysql.
Данные в Mysql выглядят следующем образом.

ФИО работника Дата рождения Дата устройства на работу
user_name day_birth day_job
Путин Владимир Владимирович 1982-07-17 2010-07-19
Медведьев Дмитрий Анатольевич 1986-03-04 2012-03-01

Есть так же код autoit3 который пока еще делаю и выводит пока все записи из базы "так задумано для тестов".

Код:
#include <File.au3>
#Include <Date.au3>
#include <array.au3>
#include "mysql.au3"

_MySQL_InitLibrary()
$MysqlConn = _MySQL_Init()

$connected = _MySQL_Real_Connect($MysqlConn, "ServerIP", "UserName", "Passwd", "NameBD")
If $connected = 0 Then Exit MsgBox(16, 'Connection Error', _MySQL_Error($MysqlConn))
   $charaster= "set character_set_results='cp1251'"
   $query = "SELECT DATE_FORMAT(users.day_job, '%d.%m.%Y'), users.user_name, users_groups.group_name, users_groups_post.post, filial.filial FROM users, users_groups, users_groups_post, filial where users.id_group=users_groups.id and users.id_post=users_groups_post.id and users.id_fil=filial.id"
_MySQL_Real_Query($MysqlConn, $charaster)
_MySQL_Real_Query($MysqlConn, $query)

   $res = _MySQL_Store_Result($MysqlConn)
	  $fields = _MySQL_Num_Fields($res)
		 $rows = _MySQL_Num_Rows($res)
		 
Dim $array[$rows][$fields]
For $k = 1 To $rows
	$mysqlrow = _MySQL_Fetch_Row($res,$fields)
	  	$lenthsStruct = _MySQL_Fetch_Lengths($res)
		For $i = 1 To $fields
		$length = DllStructGetData($lenthsStruct, 1, $i)
		$fieldPtr = DllStructGetData($mysqlrow, 1, $i)
		$data = DllStructGetData(DllStructCreate("char[" & $length & "]", $fieldPtr), 1)
		$array[$k - 1][$i - 1] = $data
	Next
 Next
_ArrayDisplay($array)
 For $i =1 to $rows
	  ConsoleWrite($array[$rows] & @CRLF)
	  Next


Примечания:
Почему именно Mysql? Потому, что через web форму люди работают с базой данных, вносят данные и корректируют их.

Что хочется видеть в идеале.
Чтоб запускали exe файл и висел в трее, он выводил данные о сегодняшних именинников (в принципе делается в запросе к бд могу сам сделать этот запрос),
далее по checkbox выводил данные о стаже работников (тоже делается через запросы могу сам сделать), далее была кнопочка скопировать данные из этой формы вывода,
ну и чтоб был простой и интуитивно понятный интерфейс.

Кому нужны библиотеки для работы с mysql могу выслать на мыло. На форуме ограничение на 200kb.
 

XpycT

Скриптер
Сообщения
380
Репутация
133
ulan44
ulan44 сказал(а):
Вот мой вариант твоего скрипта
Код:
#include <Array.au3>

$sServerIP = "localhost"
$sNameBD   = "aif_db_1"
$sUserName = "aif_user"
$sPasswd   = "123456789"

Global Const $iCursorLocation_adUseClient = 3, $iCursorType_adOpenStatic = 3

$oDBConn = ObjCreate("ADODB.Connection")
$oDBRSet = ObjCreate("ADODB.RecordSet")
$sDBConnStr = "DRIVER={MySQL ODBC 5.1 Driver};SERVER=" & $sServerIP & ";DATABASE=" & $sNameBD & ";"
$sDBConnStr &= "UID=" & $sUserName & ";PWD=" & $sPasswd & ";PORT=3306"

$oDBConn.Open($sDBConnStr)
If Not $oDBConn.State Then Exit 99 + 0 * MsgBox(0 + 48, "DB Error", "Can't Connect To Database!")
$oDBConn.CursorLocation = $iCursorLocation_adUseClient

; Query
$sQ = "SELECT DATE_FORMAT(users.day_job, '%d.%m.%Y'), users.user_name, users_groups.group_name, users_groups_post.post, filial.filial FROM users, users_groups, users_groups_post, filial WHERE users.id_group=users_groups.id and users.id_post=users_groups_post.id and users.id_fil=filial.id"

$oDBRSet.Open($sQ, $oDBConn, $iCursorType_adOpenStatic)
ConsoleWrite("$oDBRSet.RecordCount = " & $oDBRSet.RecordCount & @CR)

$aResults = $oDBRSet.GetRows

$oDBRSet.Close
$oDBConn.Close

_ArrayDisplay($aResults)
For $r = 0 To UBound($aResults, 1) - 1
    ConsoleWrite($aResults[$r][0] & " | " & $aResults[$r][1] & " | " & $aResults[$r][2] & " | " & $aResults[$r][3] & " | " & $aResults[$r][4] & @CR)
Next


А вот насчет всего остального, не совсем понял что требуеться.
 
Автор
U

ulan44

Знающий
Сообщения
55
Репутация
8
Если вкратце то простая напоминала в виде обыкновенной форточки.
То есть человек запустил исполняемый файл, выходит простая форма окошка в которой выведено сообщение, что
сегодня день рождение у Васи Пупкина завтра день рождение у Пети Весечкина после завтра еще у кого-нибудь.

Запрос к базе данных я могу и сам составить надо только формы форточки в которую выводилась запись о днях рождениях на несколько дней в перед (достаточно текущая дата и на 1,2 дня в перед).
Это что к первой задаче.

Вторая задача.
Так же нужна форточка для расчета стажа с логическими выражениями ( < > = ) и обыкновенная форма поиска по ФИО в базе данных с выводом стажа на текущий день.
 

XpycT

Скриптер
Сообщения
380
Репутация
133
ulan44
Вот для деней рождения, писал на скорую руку
Код:
#include <Array.au3>
#include <Date.au3>
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <ListViewConstants.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>

$sServerIP = "localhost"
$sNameBD   = "aif_db_1"
$sUserName = "aif_user"
$sPasswd   = "123456789"

Global $aResults

Global Const $iCursorLocation_adUseClient = 3, $iCursorType_adOpenStatic = 3

$oDBConn = ObjCreate("ADODB.Connection")
$oDBRSet = ObjCreate("ADODB.RecordSet")
$sDBConnStr = "DRIVER={MySQL ODBC 5.1 Driver};SERVER=" & $sServerIP & ";DATABASE=" & $sNameBD & ";"
$sDBConnStr &= "UID=" & $sUserName & ";PWD=" & $sPasswd & ";PORT=3306"

$oDBConn.Open($sDBConnStr)
If Not $oDBConn.State Then Exit 99 + 0 * MsgBox(0 + 48, "DB Error", "Can't Connect To Database!")
$oDBConn.CursorLocation = $iCursorLocation_adUseClient

; Query
$sQ = "SELECT users.user_name, DATE_FORMAT(users.day_birth, '%Y/%m/%d') FROM users"

$oDBRSet.Open($sQ, $oDBConn, $iCursorType_adOpenStatic)

$aResults = $oDBRSet.GetRows
; _ArrayDisplay($aResults)

$oDBRSet.Close
$oDBConn.Close

Dim $sTDDate = @YEAR & "/" & @MON & "/" & @MDAY
Dim $sTMDate = _DateAdd("D", 1, $sTDDate)
Dim $sATDate = _DateAdd("D", 1, $sTMDate)

Dim $GroupStyle = BitOR($GUI_SS_DEFAULT_GROUP, $BS_CENTER, $BS_FLAT)
Dim $ListViewStyle = BitOR($GUI_SS_DEFAULT_LISTVIEW, $LVS_SMALLICON, $LVS_NOCOLUMNHEADER, $LVS_NOSORTHEADER, $LVS_SORTASCENDING)

$hGUI = GUICreate("", 875, 505, -1, -1)

GUICtrlCreateLabel("День Рождения", 0, 0, 875, 35, BitOR($SS_CENTER,$SS_CENTERIMAGE))
GUICtrlSetFont(-1, 24, 800, 0, "MS Sans Serif")
GUICtrlSetColor(-1, 0x000000)

GUICtrlCreateGroup("Сегодня (" & _DateTimeFormat($sTDDate, 2) & ")", 5, 45, 280, 455, $GroupStyle)
GUICtrlSetFont(-1, 10, 800, 0, "MS Sans Serif")
GUICtrlSetColor(-1, 0x000000)
$TDList = GUICtrlCreateListView("", 10, 65, 270, 430, $ListViewStyle) ; Список Сегодня ДР
GUICtrlCreateGroup("", -99, -99, 1, 1)

GUICtrlCreateGroup("Завтра (" & _DateTimeFormat($sTMDate, 2) & ")", 295, 45, 280, 455, $GroupStyle)
GUICtrlSetFont(-1, 10, 800, 0, "MS Sans Serif")
GUICtrlSetColor(-1, 0x000000)
$TMList = GUICtrlCreateListView("", 300, 65, 270, 430, $ListViewStyle) ; Список Завтра ДР
GUICtrlCreateGroup("", -99, -99, 1, 1)

GUICtrlCreateGroup("После Завтра (" & _DateTimeFormat($sATDate, 2) & ")", 585, 45, 285, 455, $GroupStyle)
GUICtrlSetFont(-1, 10, 800, 0, "MS Sans Serif")
GUICtrlSetColor(-1, 0x000000)
$ATList = GUICtrlCreateListView("", 590, 65, 270, 430, $ListViewStyle) ; Список После Завтра ДР
GUICtrlCreateGroup("", -99, -99, 1, 1)

For $r = 0 To UBound($aResults, 1) - 1
    $sDateBDay = StringLeft($sTDDate, 4) & StringTrimLeft($aResults[$r][1], 4)
    $iDateDiff = _DateDiff("D", $sTDDate, $sDateBDay)

    If $iDateDiff = 0 Then
        GUICtrlCreateListViewItem($aResults[$r][0], $TDList)
        ContinueLoop
    EndIf

    $sDateBDay = StringLeft($sTMDate, 4) & StringTrimLeft($aResults[$r][1], 4)
    $iDateDiff = _DateDiff("D", $sTMDate, $sDateBDay)

    If $iDateDiff = 0 Then
        GUICtrlCreateListViewItem($aResults[$r][0], $TMList)
        ContinueLoop
    EndIf

    $sDateBDay = StringLeft($sATDate, 4) & StringTrimLeft($aResults[$r][1], 4)
    $iDateDiff = _DateDiff("D", $sATDate, $sDateBDay)

    If $iDateDiff = 0 Then
        GUICtrlCreateListViewItem($aResults[$r][0], $ATList)
        ContinueLoop
    EndIf
Next

GUISetState(@SW_SHOW)

While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit
	EndSwitch
WEnd
 
Автор
U

ulan44

Знающий
Сообщения
55
Репутация
8
Спасибо.
Работает.
Остался вопрос со стажем 8)
 
Верх