Autoit как и другие языки программирование может работать с базами дынных такие как MSSQL, MySQL, SQLite. В своем проекте я использовал библиотеку для работы с MSSQL <_sql.au3>
Пример использования этого показан ниже
Для начала запустим обработчик ошибок и подключимся к БД
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
#include <_sql.au3> #include <array.au3> Opt ("trayIconDebug",1) register the error handler to prevent hard crash on COM error Msgbox(0,"","Старт скрипта и запуск обработчика ошибок") _SQL_RegisterErrorHandler();register the error handler to prevent hard crash on COM error $oADODB = _SQL_Startup() If $oADODB = $SQL_ERROR then Msgbox(0 + 16 +262144,"Error",_SQL_GetErrMsg()) If _sql_Connect(-1,"localhost","","sa","Superartcore") = $SQL_ERROR then Msgbox(0 + 16 +262144,"Error",_SQL_GetErrMsg()) _SQL_Close() Exit EndIf If _SQL_Execute(-1,"Create database My_SQL_Test;") = $SQL_ERROR then Msgbox(0 + 16 +262144,"Error",_SQL_GetErrMsg()) _SQL_Close() |
Подключаемся к БД, создаем первую таблицу и наполняем ее данными.
1 2 3 4 5 6 7 8 9 10 |
$oADODB = _SQL_Startup() If _SQL_Connect(-1,"localhost","My_SQL_Test","sa","Superartcore") = $SQL_ERROR then Msgbox(0 + 16 +262144,"Error",_SQL_GetErrMsg()) If _SQL_Execute(-1, "CREATE TABLE BBKS (ID INT NOT NULL IDENTITY(1,1),ComputerName VARCHAR(20) UNIQUE,Status VARCHAR(10),Error VARCHAR(10)Primary Key (ID));") = $SQL_ERROR then Msgbox(0 + 16 +262144,"Error",_SQL_GetErrMsg()) If _SQL_Execute(-1,"INSERT INTO BBKS (ComputerName,Status,Error) VALUES ('"& @computername & "','On;li''ne','None');") = $SQL_ERROR then Msgbox(0 + 16 +262144,"Error",_SQL_GetErrMsg()) If _SQL_Execute(-1,"INSERT INTO BBKS (ComputerName,Status,Error) VALUES ('1"& @computername & "','On;li''ne','None');") = $SQL_ERROR then Msgbox(0 + 16 +262144,"Error",_SQL_GetErrMsg()) If _SQL_Execute(-1,"INSERT INTO BBKS (ComputerName,Status,Error) VALUES ('2"& @computername & "','Online','None');") = $SQL_ERROR then Msgbox(0 + 16 +262144,"Error",_SQL_GetErrMsg()) ; это приведет к ошибке, потому что поле "ComputerName" не является уникальным! If _SQL_Execute(-1,"INSERT INTO BBKS (ComputerName,Status,Error) VALUES ('2"& @computername & "','Online','None');") = $SQL_ERROR then Msgbox(0 + 16 +262144,"Error","Example Error this was meant to happen!" & @crlf & @crlf & _SQL_GETErrMsg()) |
Получение данных в одномерном массиве
1 2 3 4 5 |
Msgbox(0,"","Получение данных в одномерном массиве") Local $aData,$iRows,$iColumns; $iRval = _SQL_GetTable(-1,"SELECT * FROM BBKS;",$aData,$iRows,$iColumns) If $iRval = $SQL_OK then _arrayDisplay($aData,"1D (" & $iRows & " Rows) (" & $iColumns & " Columns)" ) |
А теперь получим те же данные, но по строчке за раз
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
Msgbox(0,"","А теперь получим те же данные, но по строчке за раз") $hData = _SQL_Execute(-1,"SELECT * FROM BBKS;") Local $aNames;Переменная для хранения данных массива $iRval = _SQL_FetchNames ($hData, $aNames);Прочитаем имена столбцов If $iRval = $SQL_OK then ConsoleWrite(StringFormat(" %-10s %-10s %-10s %-10s ", $aNames[0], $aNames[1], $aNames[2], $aNames[3]) & @CR) _ArrayDisplay($aNames,"Имена столбцов") Local $aRow;Переменная для хранения данных массива While _SQL_FetchData ($hData, $aRow) = $SQL_OK; Прочитать следующую строку ConsoleWrite(StringFormat(" %-10s %-10s %-10s %-10s ", $aRow[0], $aRow[1], $aRow[2], $aRow[3]) & @CR) _ArrayDisplay($aRow,"Одна строка данных") WEnd |
И теперь те же данные, возвращенные в виде строки
1 2 3 4 5 6 7 8 |
Msgbox(0,"","И теперь те же данные, возвращенные в виде строки") Local $vString If _Sql_GetTableAsString(-1,"SELECT * FROM BBKS;",$vString) = $SQL_OK then Msgbox(0,"Данные в виде строки",$vString) Else Msgbox(0 + 16 +262144,"SQL Error",_SQL_GetErrMsg() ) EndIf |
Теперь только одна строка
1 2 3 4 5 |
Msgbox(0,"","Now just a single row") Local $aRow;Переменная для хранения данных массива строк $iRval = _SQL_QuerySingleRow(-1,"SELECT * FROM BBKS;",$aRow) If $iRval = $SQL_OK then _arrayDisplay($aRow,"1 строка") |
Теперь удалим таблицы и базу данных
1 2 3 4 5 6 7 8 9 10 11 |
Msgbox(0,"","Теперь удалим таблицы и базу данных") If _SQL_Execute(-1, "DROP TABLE BBKS;") = $SQL_ERROR then Msgbox(0 + 16 +262144,"Error",_SQL_GetErrMsg()) If _SQL_Close() <> $SQL_OK then Msgbox(0 + 16 +262144,"Error",_SQL_GetErrMsg() ) ;Just being lazy and not putting any error checking in now! $oADODB = _SQL_Startup() _SQL_Connect(-1,"localhost","","sa","Superartcore") _SQL_Execute(-1,"DROP database My_SQL_Test;") _SQL_Close() |
UDF _sql.au3 СКАЧАТЬ