Что нового

Работа AutoIt с базой Mysql

Talany

Знающий
Сообщения
136
Репутация
11
Слыша что AutoIt может работать с mysql базой...
подскажите пожалуйста общие понятия (надежно ли это, безопасно и т.д)
Допустим у меня есть в локалке сайт написан на php и работующий с базой, могу ли я добовлять в базу информацию используя AutoIt???
Если да то преведите примеры....
и вообще могу ли я обработать данные в AutoIte от исполняймых кодов как на php типа (trim, htmlspecialchars)???
 

Fever

Скриптер
Сообщения
308
Репутация
112
помоему это то, что Вам нужно :smile:
 
Автор
T

Talany

Знающий
Сообщения
136
Репутация
11
Чтото мне эти скрипты ни о чем не говорят :(
 

DIS

Новичок
Сообщения
10
Репутация
2
Fever сказал(а):
помоему это то, что Вам нужно :smile:

Насколько я понимаю, это библиотеки для работы с SQL и Mysql. Только вот я не смог разобраться как использовать данные функции в библиотеке SQL... Может ктонить выложит примерчик работы с библиотекой SQL (например подключение к сиквелу и парочку запросов :smile:) буду примного благодарен.
 

XpycT

Скриптер
Сообщения
380
Репутация
133
DIS
насколько я понимаю скрипт _sql.au3 для работы с MS SQL

Для примера работы с MySQL можеш посмотреть этот скрипт.

Скрипт подлючаеться к Базе Данных (должна существовать)
Создает талицу, Заносит запись в таблицу, Получет данные из талблицы, Удаляет только что внесенную запись, Удаляет таблицу и Отключаеться от Базы Данных
Код:
#Region Includes
#Include <Array.au3>
#EndRegion Includes
#NoTrayIcon

Global $oMySQLError = ObjEvent("AutoIt.Error", "_MySQLError")

Dim $sDBServerIP = "" ; IP адресс севера с MySQL
Dim $sDBUsername = ""        ; Имя пользователя для подключения к базе данных
Dim $sDBPassword = ""      ; Пароль
Dim $sDatabase   = "test_db"      ; База Данных к которой будем подключаемся

; Подключаемся к Серверу
Global $MySQLConn = ObjCreate("ADODB.Connection")
$MySQLConn.Open("DRIVER={MySQL ODBC 5.1 Driver};SERVER=" & $sDBServerIP & ";DATABASE=" & $sDatabase & ";UID=" & $sDBUsername & ";PWD=" & $sDBPassword & ";PORT=3306")

; Создаем таблицу
Dim $sTableName = "test_tbl"

$MySQLConn.Execute("DROP TABLE `" & $sTableName & "`")

Dim $sCreateTableQuery = "CREATE TABLE `" & $sTableName & "` (`col0` VARCHAR( 15 ) NULL, " & _
																														 "`col1` VARCHAR( 15 ) NULL, " & _
																														 "`col2` VARCHAR( 15 ) NULL, " & _
																														 "`col3` VARCHAR( 15 ) NULL, PRIMARY KEY (`col0`)) " & _
																				"ENGINE = MYISAM"
$MySQLConn.Execute($sCReateTableQuery)

; Добавляем Записи в Таблицу
Dim $sInsertQuery = "INSERT INTO `" & $sTableName & "` (`col0`, `col1`, `col2`, `col3`) " & _
																							 "VALUES ('Col 0 Row 1', 'Col 1 Row 1', 'Col 2 Row 1', 'Col 3 Row 1');"
$MySQLConn.Execute($sInsertQuery)

; Получаем кол-во столбцов в таблице
Dim $ColCount = 0
$oColCountQuery = $MySQLConn.Execute("SHOW COLUMNS IN `" & $sTableName & "`")
With $oColCountQuery
	While Not .EOF
		$ColCount += 1
	.MoveNext
	WEnd
EndWith
MsgBox(0, "MySQL", "Кол-во Столбцов в таблице = " & $ColCount)

; Получаем кол-во строк в таблице
Dim $RowCount = 0
$oRowCountQuery = $MySQLConn.Execute("SELECT COUNT(*) FROM `" & $sTableName & "`")
With $oRowCountQuery
	While Not .EOF
		$RowCount += $oRowCountQuery.Fields(0).Value
	.MoveNext
	WEnd
EndWith
MsgBox(0, "MySQL", "Кол-во Строк в таблице = " & $RowCount)

; Получаем значения из таблицы
Dim $r = 1
Dim $aDBRecords[$RowCount + 1][$ColCount] = [[$RowCount, ""]] ; Создаем массив для хранения данных
Dim $oGetRecords = $MySQLConn.Execute("SELECT * FROM `" & $sTableName & "`")
With $oGetRecords
	While Not .EOF
		For $c = 0 To $ColCount - 1
			$aDBRecords[$r][$c] = $oGetRecords.Fields($c).Value ; Заносим данные в массив

			MsgBox(0, "MySQL", "Столбцец : " & $c & @CRLF & "Строка : " & $r & @CRLF & "Значение : " & $aDBRecords[$r][$c])
		Next
		$r += 1
		.MoveNext
	WEnd
EndWith
_ArrayDisplay($aDBRecords)

; Удаляем Запись из таблицы
Dim $sDereteRecordQuery = "DELETE FROM `" & $sTableName & "` WHERE `col0` = 'Col 0 Row 1'"
$MySQLConn.Execute($sDereteRecordQuery)

; Удаляем только что созданую таблицу
$MySQLConn.Execute("DROP TABLE `" & $sTableName & "`")

; Отключаемся от сервера
$MySQLConn.Close


Func _MySQLError()
	$HexNumber = Hex($oMySQLError.number, 8)

	MsgBox(16, "MySQL Error", "err.description is  : " & @TAB & $oMySQLError.description & @CRLF & _
														"err.windescription  : " & @TAB & $oMySQLError.windescription & @CRLF & _
														"err.number is       : " & @TAB & $HexNumber & @CRLF & _
														"err.lastdllerror is : " & @TAB & $oMySQLError.lastdllerror & @CRLF & _
														"err.scriptline is   : " & @TAB & $oMySQLError.scriptline & @CRLF & _
														"err.source is       : " & @TAB & $oMySQLError.source & @CRLF & _
														"err.helpfile is     : " & @TAB & $oMySQLError.helpfile & @CRLF & _
														"err.helpcontext is  : " & @TAB & $oMySQLError.helpcontext)

	Exit

	SetError(1)  ; to check for after this function returns
EndFunc   ;==>MyErrFunc
 

DIS

Новичок
Сообщения
10
Репутация
2
А нельзя ли взглянуть на скрипт для работы с MS SQL?
(как то совсем не поддается мне эта библиотека :()
 

Redline

AutoIT Гуру
Сообщения
506
Репутация
375
DIS сказал(а):
А нельзя ли взглянуть на скрипт для работы с MS SQL?
(как то совсем не поддается мне эта библиотека :()
Похоже одного UDF недостаточно - нужно еще скачивать и устанавливать ODBC Driver, библиотека работает через этот драйвер, и такие драйвера для каждого типа БД свои.
Код:
$ADODBHandle.Open("DRIVER={SQL Server};SERVER=" & $server & ";DATABASE=" & $db & ";uid=" & $username & ";pwd=" & $password & ";"
) ; MS SQL
Func _MySQLConnect($sUsername, $sPassword, $sDatabase, $sServer, $sDriver = "{MySQL ODBC 3.51 Driver}", $iPort=3306) ; MySQL

$oConnstr = "DRIVER={PostgreSQL ANSI};DATABASE=myDb;SERVER=myServer;Port=5432;Uid=myUid;Pwd=myPwd" ; PostgreSQL


В общем гугли и качай :D
 

XpycT

Скриптер
Сообщения
380
Репутация
133
Для MySQL в UDF на поменять версию драйвера с "{MySQL ODBC 3.51 Driver}" на "{MySQL ODBC 5.1 Driver}"

Что касаеться MySQL и PostgreSQL то ODBC Driver'а есть на офф. сайтах
Насчет MS SQL ничего не скажу никогда не пользовался.
 

Mr. Anderson

Новичок
Сообщения
122
Репутация
4
[list type=decimal]
[*]А как использовать базу данных исключительно для программы?
На сколько хорошо подойет MySQL для это?
И что нужно? В примерах выше я так понял рассмотрено только подключение к базе.
А её создание?
Нужна какая то библиотека для работы с MySQL?
[*]
[/list]
 

XpycT

Скриптер
Сообщения
380
Репутация
133
Mr. Anderson
Для работы с MySQL необходим ODBC Драйвер и MySQL UDF.

По моему через ODBC Драйвер нельзя создавать Базу Данных, она должна уже существовать, потому как название Базы Данных является одним из параметров для подключения.
 

Mr. Anderson

Новичок
Сообщения
122
Репутация
4
phpMyAdmin из состава Denver'а способен создавать БД... почему бы и тут не смочь =) будем изучать ;)

P.S. А этот ODBC именно установщие а не dll?
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
Mr. Anderson [?]
phpMyAdmin из состава Denver'а способен создавать БД... почему бы и тут не смочь =) будем изучать
Он написан на PHP!
PHP, имеет богатый набор собственных функций для работы с MySQL! ODBC ему не нужен!
 

XpycT

Скриптер
Сообщения
380
Репутация
133
А я оказался не прав :whistle:

Можно создать Базу Данных:
Код:
#Region Includes
#EndRegion Includes
#NoTrayIcon

Global $oMySQLError = ObjEvent("AutoIt.Error", "_MySQLError")

Dim $sDBServerIP = "127.0.0.1" ; IP адресс севера с MySQL
Dim $sDBUsername = ""     ; Имя пользователя для подключения к базе данных
Dim $sDBPassword = ""     ; Пароль
Dim $sDatabase   = "test_db"   ; Название Базы Данных

Global $MySQLConn = ObjCreate("ADODB.Connection")
$MySQLConn.Open("DRIVER={MySQL ODBC 5.1 Driver};SERVER=" & $sDBServerIP & ";UID=" & $sDBUsername & ";PWD=" & $sDBPassword & ";PORT=3306")

$MySQLConn.Execute("CREATE DATABASE `" & $sDatabase & "`")

$MySQLConn.Close

Func _MySQLError()
    $HexNumber = Hex($oMySQLError.number, 8)

    MsgBox(16, "MySQL Error", "err.description is  : " & @TAB & $oMySQLError.description & @CRLF & _
                                                        "err.windescription  : " & @TAB & $oMySQLError.windescription & @CRLF & _
                                                        "err.number is       : " & @TAB & $HexNumber & @CRLF & _
                                                        "err.lastdllerror is : " & @TAB & $oMySQLError.lastdllerror & @CRLF & _
                                                        "err.scriptline is   : " & @TAB & $oMySQLError.scriptline & @CRLF & _
                                                        "err.source is       : " & @TAB & $oMySQLError.source & @CRLF & _
                                                        "err.helpfile is     : " & @TAB & $oMySQLError.helpfile & @CRLF & _
                                                        "err.helpcontext is  : " & @TAB & $oMySQLError.helpcontext)

    Exit

    SetError(1)  ; to check for after this function returns
EndFunc   ;==>MyErrFunc
 

Денис

Знающий
Сообщения
35
Репутация
8
А не подскажите, как из скрипта определять, есть ли в системе необходимый конектор, и в случаи его отсутствия его устанавливать? + Как таскать за собой установочные файлы коннектора?
 

XpycT

Скриптер
Сообщения
380
Репутация
133
Денис
Для PosgreSQL я делаю так
Код:
_CheckODBCDriver()

Func _CheckODBCDriver()
	Local $PgSQLODBCDriver = RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBCINST.INI\ODBC Drivers", "PostgreSQL Unicode")

	If $PgSQLODBCDriver = "Installed" Then Return 1

	If Not FileExists(@ScriptDir & "\bin\") Then DirCreate(@ScriptDir & "\bin")

	FileCopy($sFlServerDir & "\bin\PgODBC\psqlodbc35w.dll", @ScriptDir & "\bin\", 1)

	RegWrite("HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBCINST.INI\ODBC Drivers", "PostgreSQL Unicode", "REG_SZ", "Installed")
	RegWrite("HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBCINST.INI\PostgreSQL Unicode", "APILevel", "REG_SZ", "")
	RegWrite("HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBCINST.INI\PostgreSQL Unicode", "ConnectFunctions", "REG_SZ", "YN")
	RegWrite("HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBCINST.INI\PostgreSQL Unicode", "Driver", "REG_SZ", @ScriptDir & "\bin\psqlodbc35w.dll")
	RegWrite("HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBCINST.INI\PostgreSQL Unicode", "DriverODBCVer", "REG_SZ", "3.51")
	RegWrite("HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBCINST.INI\PostgreSQL Unicode", "FileUsage", "REG_SZ", "")
	RegWrite("HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBCINST.INI\PostgreSQL Unicode", "Setup", "REG_SZ", @ScriptDir & "\bin\psqlodbc35w.dll")
	RegWrite("HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBCINST.INI\PostgreSQL Unicode", "SQLLevel", "REG_SZ", "")

	RunWait("regsvr32 /s " & @ScriptDir & "\bin\psqlodbc35w.dll", "")
EndFunc


Соответсвенно в переменной $sFlServerDir храниться путь до сервера, где и лежит psqlodbc35w.dll
 

lafiesto83

Новичок
Сообщения
5
Репутация
0
столкнулся с проблемой подключения к удаленному серверу MySQL. использую UDF mysql.au3
при попытке подключения к удаленной машине выдает ошибку Error: The requested action with object has failed. при подключении к денверу на локальной машине подключается без проблем. на удаленной машине Ubuntu Server, файрволы поотключал.
может как новичек упустил какую банальность. вроде кодировки пароля или создания TCP соединения. заранее спасибо.
Код:
#include <GUIConstants.au3>
#include "mysql.au3"
Opt("GUIOnEventMode", 1) ;переключаемся в режим прерывания событий OnEvent
$main_window = GUICreate ("Smile Site Edit", 800, 600) ;главное окно программы
$connect_button = GUICtrlCreateButton ("Connect DB", 730, 570) ;кнопка соединения с базой данных
GUICtrlSetOnEvent ($connect_button, "connect") ;соединение с базой данных
GUISetOnEvent ($GUI_EVENT_CLOSE, "closed") 
GUISetState(@SW_SHOW) 

While 1
    Sleep(1000)
Wend

;функция закрытия окна
Func closed()
    Exit
EndFunc

;функция соединения с базой данных
Func connect()
    $sUsername = "user"
    $sPassword = "pass"
    $sDatabase = "db"
    $sServer = "127.0.0.1"
    $sDriver = "{MySQL ODBC 3.51 Driver}"
    $iPort = 3306
    $oConnectionObj = _MySQLConnect($sUsername, $sPassword, $sDatabase, $sServer, $sDriver, $iPort)
    if not IsObj($oConnectionObj) then
        Msgbox(0,"Error","$oConnectionObj is not an Object.")
    else
        Msgbox(0,"Error","Successfully created Object $oConnectionObj.")
    endif
EndFunc
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
XpycT сказал(а):
Удалённая машина иметь IP 127.0.0.1 никак не может :smile:


Добавлено:
Сообщение автоматически объединено:

lafiesto83 [?]
при подключении к денверу на локальной машине подключается без проблем
Ещё бы, не подключался :smile: 127.0.0.1 это зарезервированный адрес локальный машины, и только.
 

lafiesto83

Новичок
Сообщения
5
Репутация
0
не хочу палить IP машины. могли бы и догадаться.
 
Верх