Что нового

Не могу подключится к MySQL

Rivald

Новичок
Сообщения
61
Репутация
1
Вот такой код:
Код:
$sUsername = ""
$sPassword = ""
$sDatabase = ""
$sServer = ""
$connect = _MySQLConnect($sUsername, $sPassword, $sDatabase, $sServer, $sDriver = "{MySQL ODBC 3.51 Driver}", $iPort=3306)
MsgBox(1, "", _GetColNames($connect, $sDatabase) & @CRLF & _MySQLConnect($sUsername, $sPassword, $sDatabase, $sServer, $sDriver = "{MySQL ODBC 3.51 Driver}", $iPort=3306))


Func _MySQLConnect($sUsername, $sPassword, $sDatabase, $sServer, $sDriver = "{MySQL ODBC 3.51 Driver}", $iPort=3306)
	Local $v = StringMid($sDriver, 2, StringLen($sDriver) - 2)
	Local $key = "HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBCINST.INI\ODBC Drivers", $val = RegRead($key, $v)
	If Not @error or $val = "" Then
		SetError(2)
		Return 0
	EndIf
	$ObjConn = ObjCreate("ADODB.Connection")
	$Objconn.open ("DRIVER=" & $sDriver & ";SERVER=" & $sServer & ";DATABASE=" & $sDatabase & ";UID=" & $sUsername & ";PWD=" & $sPassword & ";PORT="&$iPort)
	If Not @error Then
		SetError(1)
		Return 0
	Else
		Return $ObjConn
	EndIf
EndFunc

Func _GetColNames($oConnectionObj, $sTable)
	If IsObj($oConnectionObj) And Not @error Then
		Dim $ret[1], $rs

		$rs = $oConnectionObj.execute ("SHOW COLUMNS FROM " & $sTable & ";")

		With $rs
			While Not .EOF

				ReDim $ret[UBound($ret, 1) + 1]
				$ret[UBound($ret, 1) - 1] = $rs.Fields (0).Value
				.MoveNext
			WEnd
		EndWith
		$ret[0] = UBound($ret, 1) - 1
		Return $ret
	EndIf
	If @error Then
		Return 0
		SetError(1)
	EndIf
EndFunc

Драйвер скачал, пробовал как 3.51 так и 5.1, ни один не заработал, функции взяты из mysql.au3. Выдает одни нули. Почему собственно не работает?
 

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
В справке есть функция
Код:
ObjEvent
, там есть пример как отлавливать ошибки COM.
Вставьте
Код:
ObjEvent("AutoIt.Error", "_ErrFunc")
и всю функцию _ErrFunc из примера в свой код, и узнаете в чем причина.
 
Автор
R

Rivald

Новичок
Сообщения
61
Репутация
1
В справке есть функция Код: AutoIt [Выделить]
ObjEvent
, там есть пример как отлавливать ошибки COM.
Вставьте Код: AutoIt [Выделить]
ObjEvent("AutoIt.Error", "_ErrFunc")
и всю функцию _ErrFunc из примера в свой код, и узнаете в чем причина.
Как этим пользоваться я так и не понял, но где возникает ошибка нашел и без неё:
Код:
Func _MySQLConnect($sUsername, $sPassword, $sDatabase, $sServer, $sDriver = "{MySQL ODBC 3.51 Driver}", $iPort=3306)
	Local $v = StringMid($sDriver, 2, StringLen($sDriver) - 2)
	Local $key = "HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBCINST.INI\ODBC Drivers", $val = RegRead($key, $v)
	If @error or $val = "" Then
		SetError(2)
		Return 0
	EndIf
	$ObjConn = ObjCreate("ADODB.Connection")
	$Objconn.open ("DRIVER=" & $sDriver & ";SERVER=" & $sServer & ";DATABASE=" & $sDatabase & ";UID=" & $sUsername & ";PWD=" & $sPassword & ";PORT="&$iPort)
	If Not @error Then
		SetError(1)
		Return 0
	Else
		Return $ObjConn
	EndIf
EndFunc

@error = 2, то-есть либо что-то не так с драйвером в реестре, либо он не находит путь к нему. В стер это условие, но тогда появляется следующая ошибка:
==> The requested action with this object has failed.:
$Objconn.open ("DRIVER=" & $sDriver & ";SERVER=" & $sServer & ";DATABASE=" & $sDatabase & ";UID=" & $sUsername & ";PWD=" & $sPassword & ";PORT="&$iPort)^ ERROR
 

XpycT

Скриптер
Сообщения
380
Репутация
133
Rivald
А если так попробовать
Код:
$sUsername = ""
$sPassword = ""
$sDatabase = ""
$sServer = ""
$connect = _MySQLConnect($sUsername, $sPassword, $sDatabase, $sServer)
MsgBox(1, "", _GetColNames($connect, $sDatabase) & @CRLF & _MySQLConnect($sUsername, $sPassword, $sDatabase, $sServer))


Func _MySQLConnect($sUsername, $sPassword, $sDatabase, $sServer, $sDriver = "{MySQL ODBC 3.51 Driver}", $iPort=3306)
    Local $v = StringMid($sDriver, 2, StringLen($sDriver) - 2)
    Local $key = "HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBCINST.INI\ODBC Drivers", $val = RegRead($key, $v)
    If Not @error or $val = "" Then
        SetError(2)
        Return 0
    EndIf
    $ObjConn = ObjCreate("ADODB.Connection")
    $Objconn.open ("DRIVER=" & $sDriver & ";SERVER=" & $sServer & ";DATABASE=" & $sDatabase & ";UID=" & $sUsername & ";PWD=" & $sPassword & ";PORT="&$iPort)
    If Not @error Then
        SetError(1)
        Return 0
    Else
        Return $ObjConn
    EndIf
EndFunc

Func _GetColNames($oConnectionObj, $sTable)
    If IsObj($oConnectionObj) And Not @error Then
        Dim $ret[1], $rs

        $rs = $oConnectionObj.execute ("SHOW COLUMNS FROM " & $sTable & ";")

        With $rs
            While Not .EOF

                ReDim $ret[UBound($ret, 1) + 1]
                $ret[UBound($ret, 1) - 1] = $rs.Fields (0).Value
                .MoveNext
            WEnd
        EndWith
        $ret[0] = UBound($ret, 1) - 1
        Return $ret
    EndIf
    If @error Then
        Return 0
        SetError(1)
    EndIf
EndFunc
 
Верх