Что нового

Работа с SQL Lite

TheBloodTear

Знающий
Сообщения
36
Репутация
9
Доброе время суток всем!..

Вот возникла надобность собирать определенную информацию с удаленных филиалов. Раньше это делал с помощью обычных текстовых файлов при помощи разделителя.
Смысл был такой:
- скрипт инвентаризировал все компьютеры в рабочей группе (железо, софт, лог ошибок и проч.) и создавал на FTP папку(имя папки - имя филиала) и помещал туда текстовый файл(имя файла - имя компьютера) вида [Процессор|Название|Скорость].
- в офисе я запускал скрипт, который создавал GUI (TreeView, ListView) и считывал сколько папок на FTP создано, и отображал это все поименно в TreeView, потом можно было раскиснуть и увидеть сколько всего машин в филиале. А в ListView отображалось собственно тело текстового файла.

Скриншот во вложениии>>

Проблема в том, что так как филиалов много, и хочется актуальности информации вплоть до 5-10 минут:
- это слишком частые нагрузки на FTP
- хочется более красивого детища

Наткнулся тут на SQL Lite. Принцип работы немного понял. Понравилось то, что *.db файл не может быть занят, то что к нему могут обратится сразу несколько пользователей и менять в нем информацию одновременно". Я даже подумал сделать один *.db для всех филиалов, чтобы скрипт открывал его напрямую с FTP и вносил туда информацию без всяких текстовых файлов и постоянных подмен.

Но у меня не хватает информации про использование SQL Lite через AutoIt.

Буду очень рад если кто-то даст готовые исходники к моему проекту*, но так же буду рад и просто ссылкам не темы, где можно почитать(желательно на-русском).

* - Организовать принцип [Филиал|Имя ПК|Процессор|Название|Скорость] через SQL Lite в одном *.db. И суметь это все считать из этого *.db :smile:
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
626
Т.к. не приводится никакого кода для устранения ошибок, или модификации/оптимизации я бы порекомендовал перенести тему сюда
http://autoit-script.ru/index.php/board,8.0.html
Но если, ты все же настаиваешь, что бы тема была тут, можешь начать потихоньку описывать свои шаги и на какие трудности наткнулся при освоении материала.
Т.к. sqlite.au3 - это всего лишь набор пользовательский функций, так сказать оболочка для внешней dll - sqlite.dll, то более менее полной информации, в контексте AutoIt ты можешь получить, наверное только в самом файле sqlite.au3, там перед каждой функцией идет ее описание. Но все же, наиболее полную информацию лучше всего искать на офф. сайте sqlite. Будь готов к тому, что многие источники, например ВОТ ЭТОТ являются руководством преимущественно на языке php, т.к. именно в создании сайтов нашло наибольшее применение данный sql-движок. Если не хочется лезть в дебри, а результат получить желательно бы, то все же стоит изучить основы sqlite, тут SQLite документация
Начни разрабатывать БД, поиграйся с синтаксисом, а там люди подскажут. Ну либо, повторюсь, имеет смысл перенести тему в стол заказов.
Удачи
 
Автор
T

TheBloodTear

Знающий
Сообщения
36
Репутация
9

Сипа за быстрый ответ :smile:.. О столе заказов думал, но просто я просил либо наброски кода, либо ссылки на источники информации, поэтому разместил здесь :smile:..

Еще раз сипа :smile:.. Думаю почитаю это дело, и может выложу, когда все сделаю исходники на форуме, думаю не только мне будет полезна программа для инвентаризации удаленных объектов, когда нет к ним доступа по локальной сети или VPN-тунелю :smile:..

P.S.
Но закрывать тему не хочу, может кто-то уже разбирался с подобными вопросами, и сможет подкинуть пару интересных идей :smile:..
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
626
Автор
T

TheBloodTear

Знающий
Сообщения
36
Репутация
9
Хотел создать отдельную тему в "Примеры и рабочие проекты", но не нашел кнопки для этого :smile:.. Поэтому размещу здесь :whistle: ..

Вот кусок из моего проектика:
Код:
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_Res_Description=For Public
#AutoIt3Wrapper_Res_LegalCopyright=(c) = MalyaWka (aka TheBloodTear)
#AutoIt3Wrapper_Res_Field=Автор|MalyaWka
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
#include <SQLite.au3>
#include <SQLite.dll.au3>
#include <Array.au3>

Global $retarr, $dbn
Global $aResult, $iRows, $iColumns, $iRval, $i = 1
Global $DisplayName, $DisplayVersion, $Publisher, $UninstallString, $URLInfoAbout, $InstallDate

$strComputer = InputBox("Имя компьютера", "Введите имя компьютера, на котором хотите посмотреть софт..", @ComputerName)

_OpenDB() 	;открываем БД, или создаем ее, если ее нет.
_ScanSoft() ;сканируем софт [это самый оптимальный способ что нашел, сорри, но авторов всех не помню:(]
			;с каждым удачным сканированием реестра добавляем данные в БД
_ShowDB()	;показываем все что есть в БД
_CloseDB()	;закрываем БД

Func _ScanSoft()
	Local Const $UnInstKey	= "\\" & $strComputer & "\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall"

	While 1
		$AppKey	= RegEnumKey($UnInstKey, $i)
		If @error <> 0 Then ExitLoop
		$DisplayName	= StringStripWS(StringReplace(RegRead($UnInstKey & "\" & $AppKey, "DisplayName"), " (remove only)", ""), 3)
		If $DisplayName = "" Or StringInStr($DisplayName, "Обновление") > 0 Or StringInStr($DisplayName, "Исправление") > 0 Then
			$i += 1
			ContinueLoop
		EndIf
		$DisplayVersion	= StringStripWS(RegRead($UnInstKey & "\" & $AppKey, "DisplayVersion"), 3)
		If $DisplayVersion = "" Then $DisplayVersion = "Неизвестно"
		$Publisher	= StringStripWS(RegRead($UnInstKey & "\" & $AppKey, "Publisher"), 3)
		If $Publisher = "" Then $Publisher = "Неизвестно"
		$UninstallString	= StringStripWS(RegRead($UnInstKey & "\" & $AppKey, "UninstallString"), 3)
		If $UninstallString = "" Then $UninstallString = "Неизвестно"
		$URLInfoAbout	= StringStripWS(RegRead($UnInstKey & "\" & $AppKey, "URLInfoAbout"), 3)
		If $URLInfoAbout = "" Then $URLInfoAbout = "Неизвестно"
		$InstallDate	= WMIDateStringToDate(StringStripWS(RegRead($UnInstKey & "\" & $AppKey, "InstallDate"), 3))
		If StringIsAlNum($InstallDate) = 0 Then $InstallDate = "Неизвестно"
		$i += 1
		_AddToDB()
	WEnd
EndFunc

Func _OpenDB()
	_SQLite_Startup ()
	If @error > 0 Then
		MsgBox(16, "SQLite Ошибка", "SQLite.dll Не может быть загружен!")
		Exit - 1
	EndIf
	If NOT FileExists("inventory.db") Then
		$dbn=_SQLite_Open("inventory.db")
		If @error > 0 Then
			MsgBox(16, "SQLite Ошибка", "Не возможно открыть базу!")
			Exit - 1
		EndIf
		If Not _SQLite_Exec ($dbn, "CREATE TABLE SOFT (Название, Версия, Автор, Удаление, Сайт, Дата);") = $SQLITE_OK Then _
			MsgBox(16, "SQLite Ошибка", _SQLite_ErrMsg ())
	Else
		$dbn=_SQLite_Open("inventory.db")
	EndIf
EndFunc

Func _AddToDB()
	_SQLite_QuerySingleRow($dbn,"SELECT Название FROM SOFT WHERE Название='" & $DisplayName & "'", $retarr)
	If $retarr[0] <> "" Then
		If Not _SQLite_Exec($dbn,"UPDATE SOFT SET Версия='" & _
		$DisplayVersion & "', Автор='" & $Publisher & "',Удаление='" & $UninstallString & "',Сайт='" & _
		$URLInfoAbout & "',Дата='" & $InstallDate & "' WHERE Название='" & $DisplayName & "'") = $SQLITE_OK Then _
			MsgBox(16, "SQLite Ошибка", _SQLite_ErrMsg ())
	Else
		If Not _SQLite_Exec ($dbn, "INSERT INTO SOFT VALUES ('" & $DisplayName & "','" & _
		$DisplayVersion & "','" & $Publisher & "','" & _
		$UninstallString & "','" & $URLInfoAbout & "','" & $InstallDate & "');") = $SQLITE_OK Then _
			MsgBox(16, "SQLite Ошибка", _SQLite_ErrMsg ())
	EndIf
EndFunc

Func _ShowDB()
	$iRval = _SQLite_GetTable2d (-1, "SELECT * FROM SOFT;", $aResult, $iRows, $iColumns)
	If $iRval = $SQLITE_OK Then
;~ 		_SQLite_Display2DResult($aResult) ;показывает содержимое БД в консоли
		_ArrayDisplay($aResult)			  ;показывает содержимое БД в array-листе
	Else
		MsgBox(16, "SQLite Ошибка: " & $iRval, _SQLite_ErrMsg ())
	EndIf
EndFunc

Func _CloseDB()
	_SQLite_Close ()
	_SQLite_Shutdown ()
EndFunc

Func WMIDateStringToDate($dtmDate)
	Return (StringMid($dtmDate, 7, 2) & "/" & _
	StringMid($dtmDate, 5, 2) & "/" & StringLeft($dtmDate, 4) _
	& " " & StringMid($dtmDate, 9, 2) & ":" & StringMid($dtmDate, 11, 2) & ":" & StringMid($dtmDate,13, 2))
EndFunc


Тут показано как инвентаризировать софт, и как пользоваться SQLite :smile: .. Надеюсь, что это будет полезно кому-нибудь :smile: ..

P.S. Размер SQLite-базы может быть до 100 Гб..
 

Medic84

Омега
Команда форума
Администратор
Сообщения
1,590
Репутация
341
В Примерах можно постить только набрав 50 сообщений.
 

Furrer

Новичок
Сообщения
18
Репутация
3
эм... Нубский вопрос...

Где почитать? Sqlite3.dll можно встроить в exe'шник при компиляции!?
 

Suppir

Продвинутый
Сообщения
967
Репутация
62
Furrer [?]
Где почитать? Sqlite3.dll можно встроить в exe'шник при компиляции!?

Напиши в начале скрипта:

#include <SQLite.au3>
#include <SQLite.dll.au3>

<код программы>


Правда, размер exe-шника будет минимум 1,4 Мб вместо обычных 400 кб.
 

Furrer

Новичок
Сообщения
18
Репутация
3
размер exe-шника будет минимум 1,4 Мб вместо обычных 400 кб.

Мы живем в век Blue-ray ... пока еще не уверен что это именно так пишется))))
но 1.4 Мб сопоставимо с половиной Фотки (jpeg) которых у меня почти пол терабайта
..я переживу)))
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
626
Furrer
ну либо просто делать FileInstall и таскать dll вместе с компилированным скриптом.
 

Furrer

Новичок
Сообщения
18
Репутация
3
Подскажите плиз как нужно правильно хранить BMP хендл в BLOB и как его можно оттуда считать и показать на пимер в GUI... ?
 

mechlab

Новичок
Сообщения
19
Репутация
0
Научите пожалуйста как можно подключится к sql 2000 и отправить несколько простейших запросов-команд..
Что то ничего не получается.. если можно с азов..
Если можно с примером..
Заранее спасибо)
 

axlwor

Скриптер
Сообщения
657
Репутация
147
OffTopic:
счаз придет модератор и накажет. а в новой теме тебе покажут что, как и почему
 
Верх