Что нового

[Данные, строки] Mysql если пустой ответ на SQL запрос?

kristow13

Новичок
Сообщения
76
Репутация
0
Привет всем.
Пишу скрипт, в котором есть коннект к mysql. Залогиниться и выполнять SQL запросы получается...
Но вот если я делаю SQL запрос SELECT с фильтром для ответа, то при наличии строк после фильтрации, скрипт мой далее работает...
А вот если после SQL запроса с фильтром, ответ без строк из базы, кидает ошибку...

Подскажите, как правильно прописать логику IF ? Чтобы останавливать скрипт, при ответе без строк...
Вот мой код:
Код:
Global $oMySQLError = ObjEvent("AutoIt.Error", "_MySQLError")

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

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

; получаем строку с заданием
Dim $zadanie = $MySQLConn.Execute("SELECT * FROM `update`  where Flag = 0 order by DT asc limit 1")
if ($zadanie = _MySQLError()) Then          ; этот if как правильно прописать? Чтобы останавливать скрипт, при ответе без строк...
   MsgBox(0, "Что-то не так", "Ошибка! Ошибка!")
EndIf
ConsoleWrite("mysql ="&$zadanie )
$base = $zadanie.Fields(2).Value ; имя базы
$file = $zadanie.Fields(3).Value ; имя файла
$dt = $zadanie.Fields(0).Value ; дата запроса
ConsoleWrite("Dates ="&$dt )



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
 

---Zak---

Скриптер
Сообщения
455
Репутация
120
Попробуй так:

Код:
Global $oMySQLError = ObjEvent("AutoIt.Error", "_MySQLError")

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

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

; получаем строку с заданием
Local $zadanie = $MySQLConn.Execute("SELECT * FROM `update`  where Flag = 0 order by DT asc limit 1")
	ConsoleWrite("- SELECT * FROM `update`  where Flag = 0 order by DT asc limit 1")

If $zadanie.EOF Then
	MsgBox(0, "Что-то не так", "Ошибка! Ошибка!")
Else
	ConsoleWrite("!!! mysql = order by DT asc limit 1 !!!")
	$base = $zadanie.Fields(2).Value ; имя базы
	$file = $zadanie.Fields(3).Value ; имя файла
	$dt = $zadanie.Fields(0).Value ; дата запроса
	ConsoleWrite("Dates ="&$dt )
EndIf

	ConsoleWrite("!!! -------------------- !!!")


; получаем строку с заданием
Local $zadanie = $MySQLConn.Execute("SELECT * FROM `update`  where Flag = 0 order by DT asc")
   ConsoleWrite("- SELECT * FROM `update`  where Flag = 0 order by DT asc")
   
If $zadanie.EOF Then
	MsgBox(0, "Что-то не так", "Ошибка! Ошибка!")
Else
	ConsoleWrite("!!! mysql = order by DT asc !!! IT'S NO LIMIT !!!")
	
	With $zadanie
		While Not .EOF
			$base = $zadanie.Fields(2).Value ; имя базы
			$file = $zadanie.Fields(3).Value ; имя файла
			$dt = $zadanie.Fields(0).Value ; дата запроса
			
			ConsoleWrite("Dates [Fields(0)] ="&$dt&" | File [Fields(3)] ="&$file&@CRLF)
			.MoveNext
		WEnd
	EndWith
EndIf



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


PS: первый пример с "LIMIT 1" - за ним пример - без лимита, т.е. переберает все полученные данные.
 
Автор
kristow13

kristow13

Новичок
Сообщения
76
Репутация
0
Исчерпывающий ответ! :laugh:
Спасибо большое! :beer:
 
Верх