Что нового

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

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
964
OffTopic:
Ну, мы же здесь не ребусы разгадываем! Могли бы и комментарий оставить!
А по большому счёту, я не вижу здесь никакой опасности для вас ;) Один IP это ещё ничего не значить! Это только в первом классе можно рассказывать ребятам, какие крутые бывают хакеры ;D
 

XpycT

Скриптер
Сообщения
380
Репутация
132
Garrett [?]
Удалённая машина иметь IP 127.0.0.1 никак не может

Я это и имел ввиду :smile:

lafiesto83
Запусти этот скрипт и напиши какую ошибку выдаст
Код:
#include <GUIConstants.au3>
#include "mysql.au3"

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

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

Func _MySQLError()
	MsgBox(16, "MySQL Error", "err.description is  : " & @TAB & $oMySQLError.Description & @CRLF & _
														"err.windescription  : " & @TAB & $oMySQLError.WinDescription & @CRLF & _
														"err.number is       : " & @TAB & Hex($oMySQLError.Number, 8) & @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
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
964
lafiesto83
UDF которую вы используете, использует ODBC драйвер. Скорее всего, вам нужно настроит ODBC драйвер. У вас, вероятнее всего локальные настройки прописаны. Настройте ODBC драйвер на работу с удалённым сервером. Проблема должна исчезнуть.

Пуск -> Выполнить пишем Odbcad32.exe -> Ok
 

XpycT

Скриптер
Сообщения
380
Репутация
132
Garrett
На вряд ли у него из-за этого не работает. Я таких настроек не делал и работает прекрасно с удаленным сервером.

lafiesto83
Кстати еще может быть не соответствие версий ODBC драйвера. В UDF используется MySQL ODBC 3.51 Driver.
Предполагаю что ODBC драйвер брался с офф. сайта, а там другая версия.

Посмотреть версию установленного ODBC драйвера можно в реестре, вот тут
Код:
HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBCINST.INI\ODBC Drivers
 

lafiesto83

Новичок
Сообщения
5
Репутация
0
да ODBC брал с офсайта. откопал тоже про несоответствие драйвера. рекомендовали поменять на версию 5.1 не дало результата. в реестре смотрел уже. в библиотеке есть ссылка на реестр. версия 3.51
01a7799164edfa26b9fb98c308e5b191.jpg



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

c648f729819a5d09a15ec1dcbad86853.jpg
 

XpycT

Скриптер
Сообщения
380
Репутация
132
lafiesto83
Замени
Код:
$sDriver = "{MySQL ODBC 3.51 Driver}"

на
Код:
$sDriver = "{MySQL ODBC 5.1 Driver}"


Проверь порядок передачи переменных в функцию _MySQLConnect

У тебя
Код:
_MySQLConnect($sUsername, $sPassword, $sDatabase, $sServer, $sDriver, $iPort)


а надо
Код:
_MySQLConnect($sUsername, $sPassword, $sServer, $sDatabase, $iPort, $sDriver)
 

lafiesto83

Новичок
Сообщения
5
Репутация
0
бардак. подключается без ошибок, зато не создается объект $oConnectionObj. возвращает 0. и не понимаю почему я перепутал порядок подачи переменных? я функцию скопипастил из Mysql.au3
 

ZaEzzz

Новичок
Сообщения
28
Репутация
2
Рискую быть уличенным в некрофилии, но отвечу на вопрос про нерабоспособность подключения у lafiesto83:
Не возвращается объект из-за невозможности подключиться. Я по привычке так же сделал всё по дефолту, кроме одного НО: при создании пользователя в БД MySQL ему требуется разрешить подключения с любого хоста (ну или с определенного), выдать соответствующие привилегии (к примеру на создание БД или редактирование таблиц в этой БД) и перезагрузить привилегии пользователей на самом сервере MySQL. Так вот мой "дефолт" состоял в том, что я указал подключение только с локального хоста, а требовалось иное.

Это так, к слову, может кому да поможет.
 

andryws

Новичок
Сообщения
3
Репутация
0
Похожая задачка.
Подскажите пожалуйста как сделать так, что бы добавить ещё одно поле в таблице(столбец - id) с автоинкрементном т.е. что бы при добавлении второй и последующих строк они нумеровались по порядку и самое главное как сделать чтобы эти строки добавлялись в БД MySql?
В двух словах: есть текстовый файл в котором 4 строчки ($line1, $line2, $line3 и $line4) и этот файлик время от времени обновляется, надо когда файлик обновился вычитать его и записать строкой в базу $line1 в колонку col0, $line2 в col1, $line3 в col2 и $line4 в col3 соответственно ну и id - цыфры по порядку. Первую строку осилил а вот вторая и последующие никак не хотят записываться.
Вроде бы просто, а уже несколько дней голову ломаю...

Код:
#Region Includes
#Include <Array.au3>
#EndRegion Includes
#NoTrayIcon

$file = FileOpen('data.txt', 0)

If $file = -1 Then
    MsgBox(4096, "Ошибка", "Невозможно открыть файл.")
    Exit
EndIf
    $line1 = FileReadLine($file, 1)								 
    $line2 = FileReadLine($file, 2)									
    $line3 = FileReadLine($file, 3)								
    $line4 = FileReadLine($file, 4)									
FileClose($file)

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

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

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

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

; Добавляем Записи в Таблицу
Dim $sInsertQuery = "INSERT INTO `" & $sTableName & "` (`col0`, `col1`, `col2`, `col3`) VALUES ('" & $line1 & "', '" & $line2 & "', '" & $line3 & "', '" & $line4 & "');"
$MySQLConn.Execute($sInsertQuery)

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

XpycT

Скриптер
Сообщения
380
Репутация
132
andryws
У тебя при создании таблица, не создается столбец id.
Тебе надо его создать и указать что это PRIMARY KEY и установить его в AUTO_INCREMENT
 

andryws

Новичок
Сообщения
3
Репутация
0
Спасибо, помогли!
Ошибка была в синтаксисе SQL, в неверном написании автоинкремента.
В общем если вдруг кому пригодиться я заменил вот это:
Код:
(`col0` VARCHAR( 15 ) NULL, `col1` VARCHAR( 15 ) NULL, `col2` VARCHAR( 15 ) NULL, `col3` VARCHAR( 15 ) NULL, PRIMARY KEY (`col0`))
на вот это:
Код:
(`id` INT(15) NOT NULL  AUTO_INCREMENT, `col0` VARCHAR( 15 ) NULL, `col1` VARCHAR( 15 ) NULL, `col2` VARCHAR( 15 ) NULL, `col3` VARCHAR( 15 ) NULL, PRIMARY KEY (`id`))
и табличка начала заполняться...
Итого получилось:
[box title=TitleBox]
Код:
#Region Includes
#Include <Array.au3>
#EndRegion Includes
#NoTrayIcon

$file = FileOpen('data.txt', 0)

If $file = -1 Then
    MsgBox(4096, "Ошибка", "Невозможно открыть файл.")
    Exit
EndIf
    $line1 = FileReadLine($file, 1)                              
    $line2 = FileReadLine($file, 2)                                 
    $line3 = FileReadLine($file, 3)                             
    $line4 = FileReadLine($file, 4)                                 
FileClose($file)

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

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

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

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

; Добавляем Записи в Таблицу
Dim $sInsertQuery = "INSERT INTO `" & $sTableName & "` (`col0`, `col1`, `col2`, `col3`) VALUES ('" & $line1 & "', '" & $line2 & "', '" & $line3 & "', '" & $line4 & "');"
$MySQLConn.Execute($sInsertQuery)

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

RadioMen

Новичок
Сообщения
2
Репутация
0
Делаю запрос в БД, и получаю Ошибку(см. картинку)... когда делаю запрос без log.station_id=station_info_copy.Station_id все хорошо... подскажите позязя как AutoIt научить это дело распознать.

Код:
Dim $oGetRecords = $MySQLConn.Execute("select log.source_dnum, log.station_id FROM `station_info_copy` inner join `log` where station_info_copy.Name_of_Station = 'Тюмень' and log.station_id=station_info_copy.Station_id")
With $oGetRecords
    While Not .EOF
        For $c = 0 To $ColCount + $ColCount2 - 2
            $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)
 

Вложения

  • Безымянный2.png
    Безымянный2.png
    8.6 КБ · Просмотры: 46

tonycstech

Новичок
Сообщения
94
Репутация
1
Извнените за вмешательство. Работа только через IP или через URL тоже можно ?
Есть ли возможность без драйверов или с каким то DLL который можно прикрепить в месте с кодом дабы небыло нужды клиенту устанавливать драйвера итд итп.
 
Верх