F9
Новичок
- Сообщения
- 71
- Репутация
- 2
Доброго времени суток.
Помогите разобраться с рекурсивным вызовом функции самой из себя:
Есть функция, которая цепляется к БД, заодно проверяя корректность подключения, чтобы в случае чего всегда можно было исправить данные, путем ввода в окно интерфейса корректных данных:
Вопрос в следующем:
если исходные данные верны, то мы сразу попадаем на точку
и программа работает в стандартном порядке.
Если же исходные данные не верны, то как положенно вводим корректные, опять попадаем в точку
но на этом все заканчивается. Программа как бы выполняется, но ничего не происходит.
Ощущение, что функция должна что-то вернуть, но что?
Очень не хватает аналога "gotо"
PS
Основной старт программы лежит не в теле функции, а сплошным текстом.
Помогите разобраться с рекурсивным вызовом функции самой из себя:
Есть функция, которая цепляется к БД, заодно проверяя корректность подключения, чтобы в случае чего всегда можно было исправить данные, путем ввода в окно интерфейса корректных данных:
Код:
_mySQL_Connect(10.32.10.355,"root","")
;данные заведомо неверные, т.к. дебажим ошибки
Func _mySQL_Connect($server, $user, $pass)
Dim $sDatabase = "pharm_zakaz" ; База Данных к которой будем подключаемся
;проверка на ODBC драйвер, с которым гарантированно работает программа
Local $obdc_drv = "MySQL ODBC 3.51 Driver"
Local $key = "HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBCINST.INI\ODBC Drivers", $val = RegRead($key, $obdc_drv)
If @error or $val = "" Then
MsgBox(32,"Внимание","Вероятно не установлен"& @CR & $obdc_drv)
Exit
EndIf
Global $MySQLConn = ObjCreate("ADODB.Connection")
$MySQLConn.Open("DRIVER={MySQL ODBC 3.51 Driver};SERVER=" & $server & ";DATABASE=" & $sDatabase & ";UID=" & $user & ";PWD=" & $pass & ";PORT=3306" & "CHARSET=cp1251;")
;проверка на корректность настроек соединения.
If not @error Then
MsgBox("","","good")
Else
$reconnect_sql_gui = GUICreate("Не могу подключиться к mySQL", 300, 150, @DesktopWidth / 2 - 160, @DesktopHeight / 2 - 45, -1, $WS_EX_ACCEPTFILES)
Global $reconnec_sql_server = GUICtrlCreateInput("", 100, 10, 160, 20)
Global $reconnec_sql_user = GUICtrlCreateInput("", 100, 40, 160, 20)
Global $reconnec_sql_pass = GUICtrlCreateInput("", 100, 70, 160, 20)
$reconnec_sql_ok = GUICtrlCreateButton("OK",70,100,70,25)
$reconnec_sql_cancel = GUICtrlCreateButton("Cancel",200,100,70,25)
GUICtrlCreateLabel("mySQL Server",10,10)
GUICtrlCreateLabel("mySQL User",10,40)
GUICtrlCreateLabel("mySQL Password",10,70)
GUISetState(@SW_SHOW)
Do
$msg = GUIGetMsg ()
Select
case $msg = $reconnec_sql_ok
$server = GUICtrlRead($reconnec_sql_server)
$user = GUICtrlRead($reconnec_sql_user)
$pass = GUICtrlRead($reconnec_sql_pass)
GUIDelete($reconnect_sql_gui)
_mySQL_Connect($server, $user, $pass)
case $msg = $reconnec_sql_cancel
Exit
EndSelect
Until $msg = $GUI_EVENT_CLOSE
Exit
EndIf
EndFunc
;после коннекта к базе, переходим к прочим отрисовкам интерфейса, извлечению данных из ini и т.п.
GUISetState(@SW_SHOW)
GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")
.....
Вопрос в следующем:
если исходные данные верны, то мы сразу попадаем на точку
Код:
MsgBox("","","good")
Если же исходные данные не верны, то как положенно вводим корректные, опять попадаем в точку
Код:
MsgBox("","","good")
Ощущение, что функция должна что-то вернуть, но что?
Очень не хватает аналога "gotо"
PS
Основной старт программы лежит не в теле функции, а сплошным текстом.