рдЬрдмреНрдмрд╛рд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдирд┐рдЧрд░рд╛рдиреА рдкреНрд░рдгрд╛рд▓реА



рдХреБрдЫ рдШрдЯрдирд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рддреБрд░рдВрдд рд╕реВрдЪрд┐рдд рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рд╕рд┐рд╕реНрдЯрдо рдкреНрд░рд╢рд╛рд╕рдХреЛрдВ рдХреЛ рд╕реЗрд╡рд╛рдУрдВ рдФрд░ рд╕рд░реНрд╡рд░реЛрдВ рдХреА рдЦрд░рд╛рдмреА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд▓реНрдж рд╕реЗ рдЬрд▓реНрдж рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рд╕рдВрдпрдВрддреНрд░ рдореЗрдВ рддрдХрдиреАрдХреА рдХрд░реНрдорд┐рдпреЛрдВ - рддрдХрдиреАрдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдЦрд░рд╛рдмреА рдФрд░ рд╡рд┐рдЪрд▓рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ, рдЖрдкрд╛рддрдХрд╛рд▓реАрди рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╕реЗрд╡рд╛рдУрдВ - рдШрдЯрдирд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВред рдПрд╕рдПрдордПрд╕ рджреНрд╡рд╛рд░рд╛ рд╕реВрдЪрд┐рдд рдХрд░рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рд╕реНрдкрд╖реНрдЯ рддрд░реАрдХрд╛ рд╣реИред рдПрд╕рдПрдордПрд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЕрдзрд┐рд╕реВрдЪрдирд╛ рдХреЗ рд▓рд┐рдП, рд╡рд┐рд╢реЗрд╖ рдЗрдВрдЯрд░рдиреЗрдЯ рд╕реЗрд╡рд╛рдПрдВ рд╣реИрдВ рдЬреЛ рдХрд┐рд╕реА рджрд┐рдП рдЧрдП рд╕рдореВрд╣ рдХреЛ рд╕рдВрджреЗрд╢ рднреЗрдЬрддреА рд╣реИрдВред рдЖрдк рдЬреАрдПрд╕рдПрдо рдореЙрдбрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдкрдиреЗ рдЖрдк рдХреЛ рдореЗрд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдмрдЪрд╛ рд╕рдХрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдЗрд╕ рдкрджреНрдзрддрд┐ рдХреЗ рдХрдИ рдиреБрдХрд╕рд╛рди рд╣реИрдВ: рдЖрдкрдХреЛ рдПрдХ рд╕реАрд░рд┐рдпрд▓ рдкреЛрд░реНрдЯ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдФрд░ рдЗрд╕рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХ рдореЙрдбреЗрдо рдХреЗ рд╕рд╛рде, рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреНрд░рдордмрджреНрдз рд░реВрдк рд╕реЗ рд╣реЛрддреА рд╣реИ; рд░реВрд╕реА рдореЗрдВ рд╕рдВрджреЗрд╢ рднреЗрдЬрдирд╛ рдЗрддрдирд╛ рд╕рд░рд▓ рдирд╣реАрдВ рд╣реИ; рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдкреНрд░рд╛рдкреНрддрдХрд░реНрддрд╛рдУрдВ рдХреЛ рднреЗрдЬрдиреЗ рдХреА рдЧрддрд┐ рдХрд╛рдлреА рддреЗрдЬ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреА рд╣реИ; рд╡рд┐рддрд░рдг рдирд┐рдпрдВрддреНрд░рдг рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓; рдЗрд╕ рдмрд╛рдд рдХреА рдХреЛрдИ рдЧрд╛рд░рдВрдЯреА рдирд╣реАрдВ рд╣реИ рдХрд┐ рдореЛрдмрд╛рдЗрд▓ рдСрдкрд░реЗрдЯрд░ рд╕рд┐рдо рдХрд╛рд░реНрдб рдХреЛ рдмреНрд▓реЙрдХ рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ рдЕрдЧрд░ рд╡рд╣ рд╕реНрдкреИрдо рдореЗрд▓рд┐рдВрдЧ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рддрд╛ рд╣реИред рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдореЗрд▓рд┐рдВрдЧ рд╕реЗрд╡рд╛рдПрдВ рдХрдо рд╕реЗ рдХрдо рдХреБрдЫ рдЧрд╛рд░рдВрдЯреА рджреЗрддреА рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╡реЗ рдХреБрдЫ рдкреИрд╕реЗ рдЦрд░реНрдЪ рдХрд░рддреЗ рд╣реИрдВред

рдпрджрд┐ рдЖрдк рд╕рдВрджреЗрд╢ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдЗрдВрдЯрд░рдиреЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рднреЗрдЬрдиреЗ рдХреА рд▓рд╛рдЧрдд рдкрд░ рдмрд╣реБрдд рдмрдЪрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдПрдХ рдИрдореЗрд▓ рд╕рдВрджреЗрд╢ рд░рдЪрдирд╛ рдФрд░ рднреЗрдЬрдирд╛ рдЖрд╕рд╛рди рд╣реИред рд▓реЗрдХрд┐рди рдИрдореЗрд▓ рдПрдХ рдСрдкрд░реЗрд╢рдирд▓ рдЪреИрдирд▓ рдирд╣реАрдВ рд╣реИред рдпрд╣ рдкрддрд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдкрддрд╛ рднреЗрдЬрдиреЗ рд╡рд╛рд▓рд╛ рдХрд┐рддрдиреА рдЬрд▓реНрджреА рд╕рдВрджреЗрд╢ рдкрдврд╝реЗрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдирдпрд╛ рд╕рдВрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рд╣реЛрдиреЗ рдкрд░ рд╕рднреА рдИрдореЗрд▓ рдХреНрд▓рд╛рдЗрдВрдЯ рдЖрдкрдХреЛ рд╕реВрдЪрд┐рдд рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред рдореЛрдмрд╛рдЗрд▓ рдбрд┐рд╡рд╛рдЗрд╕ рдкрд░ рдИрдореЗрд▓ рдХреНрд▓рд╛рдЗрдВрдЯ рд╣рдореЗрд╢рд╛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рд╣рдореЗрд╢рд╛ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред

рдПрдХ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд▓рдЧ рдорд╛рдорд▓рд╛ рдЗрдВрд╕реНрдЯреЗрдВрдЯ рдореИрд╕реЗрдЬрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо (ICQ, XMPP) рд╣реИред XMPP рдХреЛ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рджреА рдЬрд╛рддреА рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЦреБрд▓рд╛ рд╣реЛрддрд╛ рд╣реИред рдФрд░ рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рдХрд┐ рдпрд╣ рдПрдХ рдкреВрд░реНрдг рдиреЗрдЯрд╡рд░реНрдХ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рд╣реИ, рдирд┐рдореНрди рд╡рд┐рдХрд▓реНрдк "рдмреЙрдХреНрд╕ рд╕реЗ рдмрд╛рд╣рд░" рдЙрдкрд▓рдмреНрдз рд╣реИрдВ:

рдпрджрд┐ рд╡рд╛рдВрдЫрд┐рдд рд╣реИ, рддреЛ рд╕реВрдЪреА рдЬрд╛рд░реА рд░рдЦреА рдЬрд╛ рд╕рдХрддреА рд╣реИред

рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ, рдПрдХ рдХрд╛рд░реНрдпрдХреНрд░рдо рд╡рд┐рдХрд╕рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдЬреЛ рддрдХрдиреАрдХреА рдЙрдкрдХрд░рдгреЛрдВ рдХреА рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реВрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИред рдЙрдкрдХрд░рдг рд░реИрдХ рдПрдХ рддрд░рд╣ рдХрд╛ рдкреНрд░реЛрдЧреНрд░рд╛рдо рд╣реИ рдЬреЛ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЛ рд╕рдВрджреЗрд╢ (рдФрд░ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рд╕рд╣рд┐рдд) рд▓рд┐рдЦрддрд╛ рд╣реИред рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдкреИрд░рд╛рдбреЙрдХреНрд╕ рдкреНрд░рд╛рд░реВрдк рд╣реИ, рдФрд░ рдбреЗрдЯрд╛ рдПрдиреНрдХреЛрдбрд┐рдВрдЧ Win-1251 рд╣реИред рдпрд╣ рдПрдХ рд╕рд╛рдВрддреНрд╡рдирд╛ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХреЗ рдкрдХреНрд╖ рдореЗрдВ рдЪрд┐рддреНрд░рдордп рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рдЫреЛрдбрд╝рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдкрд╛рда рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ рдкреИрд░рд╛рдореАрдЯрд░ рд╕реЗрдЯ рдХрд░реЗрдВред рд╕рдорд╛рдзрд╛рди рдЙрдкрдХрд░рдг рдХреНрдпреВрдЯреА рд╣реИред

рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛: рдХрдИ рддрдХрдиреАрдХреА рд╕реНрдерд╛рдкрдирд╛рдУрдВ рд╕реЗ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдПрдХрддреНрд░рд┐рдд рдХрд░рдирд╛, рдЬреИрдмрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рдВрджреЗрд╢ рднреЗрдЬрдирд╛, рдЬреИрдмрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рд╛рдорд╛рдиреНрдп рдЪреИрдЯ рдХрд░рдирд╛ред

рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдФрд░ рдмрд╛рддрдЪреАрдд рддрдВрддреНрд░


рдХрд╛рд░реНрдпрдХреНрд░рдо, рдЬрд┐рд╕реЗ рдЕрдВрддрд┐рдо рдЙрдкрдХрд░рдг рдкрд░ рд░рдЦрд╛ рдЧрдпрд╛ рд╣реИ, рд╕рд╢рд░реНрдд рд░реВрдк рд╕реЗ "рдЧреНрд░рд╛рд╣рдХ" рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдХреНрд▓рд╛рдЗрдВрдЯ рд╕реЗ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдкреНрд░реЛрдЧреНрд░рд╛рдо "рд╕рд░реНрд╡рд░" рд╣реИред рдбреЗрдЯрд╛ рд╡рд┐рдирд┐рдордп рдкреНрд░рд╕рд╛рд░рдг рдпреВрдбреАрдкреА рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╕реНрд╡реАрдХреГрдд рдЖрдВрдХрдбрд╝реЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рд╕рд░реНрд╡рд░ рдЕрдкрдиреА рд╕рдВрдкрд░реНрдХ рд╕реВрдЪреА рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдЬреИрдмрд░ рдЦрд╛рддреЗ рдореЗрдВ рднреЗрдЬрддрд╛ рд╣реИред

рдЧреНрд░рд╛рд╣рдХ


рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рдорд╛рдкрджрдВрдбреЛрдВ

рдкреИрд░рд╛рдореАрдЯрд░ рдиреЗ рдЬреЛрдВрд╕ рдореЗрдВ рд╕реНрдЯреЛрд░ рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред рдХрд╛рдо рдХреЗ рд▓рд┐рдП, 4 рдЬреА рдХреНрдпреВрдЯреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рдореЗрдВ рдЕрднреА рддрдХ рдЬреЛрдВрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдХреНрдпреВрдЯреА (рдХреНрдпреВрдЯреА-рдЬреЛрди) рдХреЗ рд▓рд┐рдП рддреАрд╕рд░реЗ рдкрдХреНрд╖ рдХреЗ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

Database.json рдХреНрд▓рд╛рдЗрдВрдЯ рд╕реЗрдЯрд┐рдВрдЧ рдлрд╝рд╛рдЗрд▓
{ "LogFileName":"c://manlog.log", "ConnectionString":"Driver={Microsoft Paradox Driver (*.db )};DriverID=282;FIL=Paradox 4.x;DBQ=c:\\;ReadOnly=1", "CNCName":"CNC_01", "RefreshPeriod":"2000" } 


рдкрдврд╝рдирд╛ рдкреИрд░рд╛рдореАрдЯрд░:
  QFile configFile("./config/database.json"); configFile.open(QIODevice::ReadOnly | QIODevice::Text); QTextStream dbFileIn(&configFile); QString jsonData = dbFileIn.readAll(); configFile.close(); bool ok = false; QVariantMap result = QtJson::parse(jsonData, ok).toMap(); if(ok) { foreach(QVariant key, result.keys()) { if(key.toString().toLower()=="connectionstring") connecionString = result.value(key.toString()).toString(); if(key.toString().toLower()=="logfilename") logFileName = result.value(key.toString()).toString(); if(key.toString().toLower()=="refreshperiod") refreshPeriod = result.value(key.toString()).toString().toInt(); if(key.toString().toLower()=="cncname") cncName = result.value(key.toString()).toString(); } } 


PARADOX рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рдХрдиреЗрдХреНрд╢рди

рдХреНрдпреВрдЯреА рд╕реЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП QODBC рд╣реИ ред PARADOX рддрдХ рдкрд╣реБрдВрдЪ рдХреЗ рд▓рд┐рдП рдХрдиреЗрдХреНрд╢рди рд╕реНрдЯреНрд░рд┐рдВрдЧ:
 "Driver={Microsoft Paradox Driver (*.db )};DriverID=282;FIL=Paradox 4.x;DBQ=c:\\;ReadOnly=1" 

рдЬрд╣рд╛рдВ DBQ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд▓рд┐рдП рд░рд╛рд╕реНрддрд╛ рд╣реИред
рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд┐рдВрджреБ: "* .db" рд╕реЗ рдкрд╣рд▓реЗ ") рдХреЗ рдмрд╛рдж рдХрдиреЗрдХреНрд╢рди рд▓рд╛рдЗрди рдореЗрдВ" "рдПрдХ рд╕реНрдерд╛рди рд╣реИ!

рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЗ рдЖрдЧреЗ рдПрдХ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдХрдиреЗрдХреНрд╢рди рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдХреНрдпреЛрдВрдХрд┐ рд╕рд┐рд╕реНрдЯрдо рд╕реНрд░реЛрддреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдбреЗрдЯрд╛ рд╕реНрд░реЛрдд рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рдПрдХ рд▓рдВрдмрд╛ рдФрд░ рдЕрд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИред рд╡реИрд╕реЗ рднреА рдпрд╣ рдЕрдЪреНрдЫрд╛ рд╣реИ рдЬрдм рд╕рднреА рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдПрдХ рд╣реА рд╕реНрдерд╛рди рдкрд░ рд╣реЛрдВред

рд░реИрдХ рдкрд░ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдореИрдирд▓реЙрдЧ рдЯреЗрдмрд▓ рдХреЗ рд▓рд┐рдП рд▓реЙрдЧ рд▓рд┐рдЦрддрд╛ рд╣реИред
рдХреНрд╖реЗрддреНрд░ рдХрд╛ рдирд╛рдордЯрд╛рдЗрдкрдирд┐рдпреБрдХреНрддрд┐
рдбреЗрдЯрд╛рддрд┐рдерд┐рд▓реЙрдЧ рдореЗрдВ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдХреА рддрд╛рд░реАрдЦ
рд╕рдордпрджрд┐рдирд╛рдВрдХ рд╕рдордпрд▓реЙрдЧрд┐рдВрдЧ рдЯрд╛рдЗрдо
Mesvarcharрд╕рдВрджреЗрд╢

рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕реНрддрдВрднреЛрдВ рдореЗрдВ рдореБрдЭрд╕реЗ рдЧрд▓рддреА рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИред рдФрд░ рдЙрдирдореЗрдВ рдХреНрдпреВрдЯреА рднреА рдЧрд▓рдд рд╣реИ, рдЗрд╕рд▓рд┐рдП рдПрд╕рдХреНрдпреВрдПрд▓ рдХреНрд╡реЗрд░реА рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рддреЗ рд╕рдордп, рдореБрдЭреЗ рдЯреНрд░рд┐рдХ рдХрд░рдиреА рдереА: рд╕рдордп рдХреЛ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдореЗрдВ рдмрджрд▓рдирд╛, рдХреНрдпреЛрдВрдХрд┐ рдЯреЗрдЯрдЯрд╛рдЗрдо () рдХреА рддрд░рд╣ рдПрдХ рдлрд╝реАрд▓реНрдб рд▓реЗрдирд╛ рд╕рдВрднрд╡ рдирд╣реАрдВ рдерд╛ред

 SELECT data, format(ManLog.Time,'hh:mm:ss'), mes from ManLog 


рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рдЬреБрдбрд╝рдиреЗ рдХреА рд╕рдорд╕реНрдпрд╛рдПрдВ рдЦрддреНрдо рдирд╣реАрдВ рд╣реБрдИрдВред рдЬреИрд╕рд╛ рдХрд┐ рдбреЗрдЯрд╛рдмреЗрд╕ рдлрд╝рд╛рдЗрд▓ рдХреЛ рджреЗрдЦрдХрд░ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд╡рд╣рд╛рдВ рдХрд╛ рдбреЗрдЯрд╛ рдЬреАрдд -1251 рдореЗрдВ рдПрдиреНрдХреЛрдбреЗрдб рд╣реИред рдореБрдЭреЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХреЛрдбреЗрдХреНрд╕, рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рд░реВрдкрд╛рдВрддрд░рдг, рдмреАрдбреАрдИ рдореЗрдВ рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ, рд░рдЬрд┐рд╕реНрдЯреНрд░реА рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХрд╛ рдЕрдиреБрднрд╡ рдерд╛ред рдпрд╣ рд╕рдм рдЕрд▓рдЧ-рдЕрд▓рдЧ рдУрдПрд╕ рдкрд░ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рдЬреНрдЮрд╛рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХреМрди рд╕рд╛ рдУрдПрд╕ рд░реИрдХ рдкрд░ рдЦрдбрд╝рд╛ рд╣реЛрдЧрд╛, рдФрд░ рдпрд╣ рдПрдХ рдмрд╛рд░ рдлрд┐рд░ рдФрджреНрдпреЛрдЧрд┐рдХ рдЙрдкрдХрд░рдгреЛрдВ рдХреЗ рдУрдПрд╕ рдХреЗ рд╕рд╛рде рд╣рд╕реНрддрдХреНрд╖реЗрдк рдХрд░рдиреЗ рдХреЗ рд▓рд╛рдпрдХ рдирд╣реАрдВ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдореЗрд╕ рдХреНрд╖реЗрддреНрд░ рд╕реЗ рдбреЗрдЯрд╛ рдХреЛ рджреНрд╡рд┐рдЖрдзрд╛рд░реА рд░реВрдк рдореЗрдВ рд▓реЗрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛:
  QSqlQuery query; query.exec("SELECT data, format(ManLog.Time,'hh:mm:ss'), mes from ManLog"); ... QByteArray msg = query.value(2).toByteArray(); // ! 

рдбреЗрдЯрд╛ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рдкрдврд╝рд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рдЕрдм рдЗрд╕реЗ рддреНрд░реБрдЯрд┐ рдХреЛрдб рдХреЗ рд╕рд╛рде рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рд▓реЗрдХрд┐рди рд╣рдореЗрдВ рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдореЗрдВ рдмрд╛рдЗрдирд░реА рдлреЙрд░реНрдо рдореЗрдВ рддреНрд░реБрдЯрд┐ рдХреЛрдб рднреА рдЪрд╛рд╣рд┐рдП, рдЬрд┐рд╕рдореЗрдВ рд╡реЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рд╣реИрдВред рдЖрдк рддреНрд░реБрдЯрд┐ рдХреЛрдб рдХреЛ json рдореЗрдВ рдкрдВрдЬреАрдХреГрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЬрдм json рдлрд╛рдЗрд▓ рдкрдврд╝рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдлрд┐рд░ рд╕реЗ рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП, рд╕рдордЭрд╛рдиреЗ рдХрд╛ рд╕рдордп рдирд╣реАрдВ рд╣реИ , рдПрдХ рдЖрдИрдПрдирдЖрдИ рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдВ рдФрд░ рдПрдХ рдиреЛрдЯрдкреИрдб рдХреЗ рд╕рд╛рде рд╡рд┐рдВрдбреЛрдЬ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдбреНрд░рд╛рдЗрд╡ рдХрд░реЗрдВ:

рддреНрд░реБрдЯрд┐ рд╕реВрдЪреА рдлрд╝рд╛рдЗрд▓

errorlist.ini - рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреА рд╕реВрдЪреА рдХреЗ рд╕рд╛рде рдлрд╛рдЗрд▓ рдХрд░реЗрдВ
     -  .. 

рдореИрдВ рдмрд╛рдЗрдирд░реА рд╕рд░рдгрд┐рдпреЛрдВ рдХреА рд╕реВрдЪреА рдореЗрдВ рдбреЗрдЯрд╛ рдкрдврд╝рддрд╛ рд╣реВрдВ:
  QFile fileIni("./config/errorlist.ini"); fileIni.open(QFile::ReadOnly); QByteArray errorRaw = fileIni.readAll(); fileIni.close(); errorRaw = errorRaw.replace('\n', ""); QList<QByteArray> errorAllList = errorRaw.split('\r'); for(int i=0;i<errorAllList.count();i++) { if(errorAllList.at(i).count()>0) { errorList << errorAllList.at(i); } } 


рдлрд┐рд░ рд╣рдо рдкрд╣рд▓реЗ рд╕реЗ рдкрдврд╝реА рдЧрдИ рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдЙрдиреНрд╣реЗрдВ рдлрд┐рд░ рд╕реЗ рдиреЗрдЯрд╡рд░реНрдХ рдкрд░ рди рднреЗрдЬрд╛ рдЬрд╛рдПред рд╣рдо рд░рд┐рдлреНрд░реЗрд╢рдкрд┐рд░рд┐рдпреЛрдб рдЕрд╡рдзрд┐ рдХреЗ рд╕рд╛рде рдЯрд╛рдЗрдорд░ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдПрдХ рдбреЗрдЯрд╛ рдкреБрдирдГ рдЕрдиреБрд░реЛрдз рдХрд░рддреЗ рд╣реИрдВ ред рдпрджрд┐ рдХреЛрдИ рдирдпрд╛ рдбреЗрдЯрд╛ рд╣реИ - рдЗрд╕реЗ UDP рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдиреЗрдЯрд╡рд░реНрдХ рдкрд░ рднреЗрдЬреЗрдВред

рдХрд┐рд╕реА рдиреЗрдЯрд╡рд░реНрдХ рдкрд░ рдбреЗрдЯрд╛ рднреЗрдЬрдирд╛

QDataStream рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдбреЗрдЯрд╛ рдХреЛ рдХреНрд░рдордмрджреНрдз рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдорд╢реАрди рдХрд╛ рдирд╛рдо, рджрд┐рдирд╛рдВрдХ, рд╕рдордп, рд╕рдВрдХреЗрдд рднреЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИ - рдЪрд╛рд╣реЗ рд░реЗрдЦрд╛ рдПрдХ рддреНрд░реБрдЯрд┐ рд╣реЛ, рдФрд░ рд╕рдВрджреЗрд╢ рджреНрд╡рд┐рдЖрдзрд╛рд░реА рд░реВрдк рдореЗрдВ рд╣реАред

рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░реЗрдВ рдХрд┐ рдХреНрдпрд╛ рд▓рд╛рдЗрди рдореЗрдВ рдХреЛрдИ рддреНрд░реБрдЯрд┐ рд╣реИ
  QString errText="ok"; foreach(QByteArray err, errorList) { if(msg.contains(err)) { errText = "ERROR"; } } 


рд╣рдо рдХреНрд░рдордмрджреНрдз рдХрд░реЗрдВ, рднреЗрдЬреЗрдВ:
  QByteArray datagram; QDataStream out( &datagram, QIODevice::ReadWrite ); out.setVersion(QDataStream::Qt_4_0); out << cncName; out << query->value(0).toDate(); //date out << logTime;//time out << errText; out << msg;//bytearray udpSocket->writeDatagram(datagram, QHostAddress::Broadcast, 45000); 


рд╕рд░реНрд╡рд░ рд╕рд╛рдЗрдб



рдЗрд╕рдореЗрдВ рджреЛ рднрд╛рдЧ рд╣реЛрддреЗ рд╣реИрдВ: UDP рд╕рдВрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдФрд░ рдЙрдиреНрд╣реЗрдВ xmpp рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рднреЗрдЬрдирд╛ред

UDP рдкреИрдХреЗрдЯ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ

рдмрдВрджрд░рдЧрд╛рд╣ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реБрдирдХрд░:
  udpSocket = new QUdpSocket(this); connect(udpSocket, SIGNAL(readyRead()), this, SLOT(onReadyRead())); udpSocket->bind(45000); 

рдпрджрд┐ рдкреНрд░рд╛рдкреНрдд рд░рд┐рдХреЙрд░реНрдб рдореЗрдВ "рддреНрд░реБрдЯрд┐" рдХрд╛ рд╕рдВрдХреЗрдд рд╣реИ, рддреЛ рд╣рдо рдкреНрд░рд╛рдкреНрдд рд╕рдВрджреЗрд╢ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдПрдХ рд╕рдВрдХреЗрдд рдХрд╛ рдЙрддреНрд╕рд░реНрдЬрди рдХрд░рддреЗ рд╣реИрдВред
 void CncReceiver::onReadyRead() { QByteArray buffer; ... buffer.resize(udpSocket->pendingDatagramSize()); udpSocket->readDatagram(buffer.data(), buffer.size()); QDataStream in( &buffer, QIODevice::ReadWrite ); in.setVersion(QDataStream::Qt_4_0); in >> cncName; in >> date; in >> time; in >> errText; in >> msg; ... if(errText!="ok") emit needSendToAll(msg, cncName, date, time); } 

рдпрд╣ рд╕рдВрдХреЗрдд рдПрдХ рд╡рд░реНрдЧ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдЬреЛ рд╕рдВрджреЗрд╢ рднреЗрдЬ рд╕рдХрддрд╛ рд╣реИред рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЬреЗрдмрд░ рдореЗрдВред рд╕рд╛рджреГрд╢реНрдп рд╕реЗ, рдЖрдк рдореЗрд▓ рдпрд╛ рдПрд╕рдПрдордПрд╕ рджреНрд╡рд╛рд░рд╛ рднреЗрдЬ рд╕рдХрддреЗ рд╣реИрдВред

рдЬреИрдмрд░ рдХреЛ рд╕рдВрджреЗрд╢ рднреЗрдЬреЗрдВ

рд╕рдВрджреЗрд╢ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдЗрд╕ рдЕрджреНрднреБрдд рдкреБрд╕реНрддрдХрд╛рд▓рдп (qxmpp) рд╕реЗ QXmppClient рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдПрдХ рд╡рд░реНрдЧ рдмрдирд╛рддреЗ рд╣реИрдВред

рд╣рдорд╛рд░реЗ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рдореЗрд▓рд┐рдВрдЧ рд╕реВрдЪреА рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП
 QList<QString> sendList; 

рдЗрд╕реЗ рд░реЛрд╕реНрдЯрд░ рдЬреИрдмрд░ рдЦрд╛рддреЗ рдХреЗ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рднрд░реЗрдВ (рдЦрд╛рддреЗ рдХреЗ рдирд╛рдо рд╣реИрдВ)ред

рдФрд░ рд╕реНрд▓реЙрдЯ рдЬреЛ рдЬрд░реВрд░рдд рдХреЛ рдкрдХрдбрд╝рддрд╛ рд╣реИ SendToAll рд╕рд┐рдЧреНрдирд▓, SendList рд╕реЗ рд╕рднреА рдХреЛ рдПрдХ рд╕рдВрджреЗрд╢ рднреЗрдЬрддрд╛ рд╣реИред
 void JabberClient::sendToAll(QByteArray msg, QString cncName, QDate errDate, QString errTime) { QString messageToUser; QTextCodec *codec = QTextCodec::codecForName("Windows-1251"); messageToUser = codec->toUnicode(msg); foreach(QString userName, sendList) { this->sendMessage(userName, "CNC_NAME: "+ cncName + "\n" + errDate.toString("yyyy-MM-dd ")+ errTime + "\nMesage:\n" + messageToUser); } } 


рдЬрдмреНрдмрд╛рд░ рдЪреИрдЯ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди

рдЦрд╛рддреЗ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╛рдкреНрдд рд╕рднреА рд╕рдВрджреЗрд╢ рдкреНрд░реЗрд╖рдХ рдХреЗ рдирд╛рдо рдХреЗ рд╕рд╛рде рдкреВрд░реА рд╕рдВрдкрд░реНрдХ рд╕реВрдЪреА рдореЗрдВ рднреЗрдЬреЗ рдЬрд╛рддреЗ рд╣реИрдВред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдЪреИрдЯ рдкреНрд░рд╛рдкреНрдд рдХреА рдЬрд╛рддреА рд╣реИред рдпрд╣ рдЪрд░реНрдЪрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рдЗрд╕реЗ рдмрд╣реБрдд рд╕рд░рд▓рддрд╛ рд╕реЗ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, JabberClient рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдореЗрдВ рд╣рдо рдПрдХ рдФрд░ рд╕рд┐рдЧреНрдирд▓ рдХреА рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ - рдПрдХ рд╕рдВрджреЗрд╢ рдЬреЛ рд╕рд┐рдЧреНрдирд▓ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ:
  connect(this, SIGNAL(messageReceived(QXmppMessage)), SLOT(onMessageReceived(QXmppMessage))); 

рдФрд░ рд╣рдо рдЗрд╕реЗ рд╕рдВрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╕реНрд▓реЙрдЯ рдореЗрдВ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рддреЗ рд╣реИрдВ:
 void JabberClient::onMessageReceived(QXmppMessage msg) { if(msg.body().length()>0) { qDebug() << nowStr() << "onMessageReceived" << msg.from() << msg.body(); foreach(QString userName, sendList) { this->sendMessage(userName, msg.from() + ">\n" + msg.body()); } } } 

рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рд╕рдВрджреЗрд╢ рдХреА рд▓рдВрдмрд╛рдИ рдХреА рдЬрд╛рдБрдЪ рдХрд░рдирд╛ рдХрд┐ рдЯрд╛рдЗрдкрд┐рдВрдЧ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рджреМрд░рд╛рди рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╕рдВрджреЗрд╢ рдХреА рд▓рдВрдмрд╛рдИ 0 рд╣реИред

рдкрд░рд┐рдгрд╛рдо


рдпрд╣ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ рдХрд┐ рдЖрдк рдХреНрдпреВрдЯреА рд╕реЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рджрд┐рдП рдЧрдП рд╕рдВрджреЗрд╢ рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдХреЗ рд╕рд╛рде рдХреИрд╕реЗ рдЬреБрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╕рд┐рд╕реНрдЯрдо рд▓реЛрдХреЗрд▓ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдП рдмрд┐рдирд╛ рдЬреБрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рдпрд╣ рднреА рджрд░реНрд╢рд╛рддрд╛ рд╣реИ рдХрд┐ рд╕рдВрджреЗрд╢ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП qxmpp рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреНрдпреВрдЯреА рдореЗрдВ рдХреИрд╕реЗ рдХрд░реЗрдВред

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рд╕реНрд░реЛрдд рдХреЛрдб:
code.google.com/p/cnc-error-monitor

рдкреБрдирд╢реНрдЪред рд▓реЗрдЦ рдХреЛ рдкреВрд░рдХ рдФрд░ рдЕрджреНрдпрддрди рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
UPD: json рд╕реЗ рдкреИрд░рд╛рдореАрдЯрд░реНрд╕ рдХреА рдирд┐рд╢реНрдЪрд┐рдд рдкрд╛рд░реНрд╕рд┐рдВрдЧ, рдЬреИрдмрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЪреИрдЯ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд
UPD2: рдПрдХ рдЕрдЬреАрдм рдЯрд┐рдкреНрдкрдгреА: рдпрджрд┐ рдЖрдк рдХреНрдпреВрдЯреА 4 рд╡реЗрдВ рд╕рдВрд╕реНрдХрд░рдг рдкрд░ рдЧреНрд░рд╛рд╣рдХ рдХреЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЛ рдЗрдХрдЯреНрдард╛ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рдмрд╛рдЗрдЯрдПрдпрд░реЗ рд╕реЗ рдбреЗрдЯрд╛ рдХреЛ рдкрдврд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреИрд╕рд╛ рдХрд┐ рдЖрдзрд╛рд░ рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдореЗрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдФрд░ рдпрджрд┐ рдЖрдк рдХреНрдпреВрдЯреА 5 рдкрд░ рдЗрдХрдЯреНрдард╛ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╡рд╣рд╛рдВ рдбреЗрдЯрд╛ рджреВрд╖рд┐рдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ (рдФрд░ рдХреЛрдИ рдкреИрд░рд╛рдореАрдЯрд░ рдорджрдж рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ)ред

Source: https://habr.com/ru/post/In214709/


All Articles