PDA

View Full Version : مشکل Error-Handling در پایتون



IMAN4k
سه شنبه 19 آبان 1394, 08:25 صبح
درود
در کد زیر من یک دیالوگ رو در start up برنامم نمایش میدم که اطلاعات sql connection رو میگیره و بعد که button کانکت زده میشه connectact اجرا میشه همه چی درسته ولی وقتی کاربر اطلاعات اشتباه وارد کنه برنامه کرش میکنه!و وارد not responding میشه
مشکل کجاست؟

class SqlDialog(QDialog):
def __init__(self):
super(SqlDialog, self).__init__()
self.setWindowTitle("اتصال به دیتابیس")
self.setFixedSize(320,160)
self.ui()

def ui(self):
self.sql_connect_button=QPushButton("اتصال")
self.sql_cancel_button=QPushButton("انصراف")
self.sql_connect_button.clicked.connect(self.conne ctact)
self.sql_cancel_button.clicked.connect(self.close)

self.sql_name_line_edit=QLineEdit()
self.sql_username_line_edit=QLineEdit()
self.sql_password_line_edit=QLineEdit()
.
.
.
.

def connectact(self):
try:
con=pyodbc.connect(driver='{SQL Server Native Client 10.0}',server=self.sql_name_line_edit.text(),datab ase='Pharmacy',
uid=self.sql_username_line_edit.text(),pwd=self.sq l_password_line_edit.text())
QMessageBox.about(self,'اتصال موفقیت آمیز','اتصال به دیتا بیس برقرار شد')
self.save()
except pyodbc.Error or pyodbc.DatabaseError or pyodbc.DataError:
QMessageBox.about(self,'اتصال ناموفق','خطا در اتصال به دیتا بیس !')
self.close()

IMAN4k
چهارشنبه 20 آبان 1394, 20:51 عصر
up.............

n.nowroozi
پنج شنبه 21 آبان 1394, 11:27 صبح
توی یه ترد دیگه باید هندل کنی چون لوپ gui رو اگه به هر دلیلی بلاک کنه UI ات از کار میفته.

IMAN4k
پنج شنبه 21 آبان 1394, 12:17 عصر
توی یه ترد دیگه باید هندل کنی چون لوپ gui رو اگه به هر دلیلی بلاک کنه UI ات از کار میفته.

چجوری باید اینکارو کنم؟
الان اگر یوزر یا پس اشتباه وارد شه درست کار میکنه و اون مسیج باکس انجام میشه ولی وقتی آدرس سرور اشتباه وارد شه کرش میکنه در صورتی که ارور همه از نوع pyodbc.Error هست

IMAN4k
جمعه 22 آبان 1394, 15:03 عصر
up..........

IMAN4k
شنبه 23 آبان 1394, 12:18 عصر
خوب ظاهرا کد درسته.
در ماژول pyodbc اگر آدرس سرور اشتباه وارد شه تلاش میکنه کانکشن رو استبلیش کنه و بعد حدود 33 ثانیه ارور رو برمیگردونه و من انتظار داشتم (مشکل همین انتظاره بی جا بود!!!) بلافاصله ارور رو return کنه کدی که بنده نوشتم درست هست و بعد از تقریبا همون hold time اون مسیج باکس نمایش داده میشه.
اما اگر آدرس سرور درست ولی credential اشتباه باشه چون سرور رو پیدا کرده ولی یوزر یا پس اشتباه هست بلافاصله ارور رو return میکنه.