Форум сайта python.su
# -*- coding: windows-1251 -*-
import wx
import db
import msgbox
import cx_Oracle
class db_info(wx.Dialog):
def __init__(self):
# инициализация
style=wx.FRAME_TOOL_WINDOW | wx.CLOSE_BOX
wx.Dialog.__init__(self, None, -1, style=style, title='Информация для присоединения к базе',
size=(100,200))
wx.Dialog.SetFocus(self)
#panel = wx.Panel(self, -1)
# Атрибуты
login = wx.StaticText(self, -1, "Login:", pos=(1,1))
self.loginTxt = wx.TextCtrl(self, -1, "artur", pos=(1,15))
tns = wx.StaticText(self, -1, "TNS:", pos=(1,40))
self.tnsTxt = wx.TextCtrl(self, -1, "orcl", pos=(1,55))
self.loginTxt.SetInsertionPoint(0)
passw = wx.StaticText(self, -1, "Password:", pos=(1,80))
self.passwTxt = wx.TextCtrl(self, -1, "123", pos=(1,100),
style=wx.TE_PASSWORD)
# Кнопки
self.ConnectBtn = wx.Button(self, wx.ID_OK, "Присоединится", pos=(1, 125))
self.Bind(wx.EVT_BUTTON, self.OnConnectBtn, self.ConnectBtn)
self.ConnectBtn.SetDefault()
self.CancelBtn = wx.Button(self, wx.ID_CANCEL, "Отмена", pos=(2, 150))
self.Bind(wx.EVT_BUTTON, self.OnCancelBtn, self.CancelBtn)
def OnConnectBtn(self, event):
global dblogin, dbpass, dbtns
dblogin = (self.loginTxt.GetValue())
dbpass = (self.passwTxt.GetValue())
dbtns = (self.tnsTxt.GetValue())
self.connection = db.OpenDB(dblogin, dbpass, dbtns)
self.Close()
def OnCancelBtn(self, event):
self.Destroy()
Офлайн
перечитайте топик http://python.su/forum/viewtopic.php?id=12767, зачем одно и тоже спрашивать
Офлайн
Он был давно, я был совсем глуп в питоне, сейчас поумнел немного и все равно я не вижу там решения моей проблемы в обозначении глобальной переменнной или вытаскивания её из другого модуля.
Офлайн
n2bОтвет в 10-ом посте приведенного выше топика, Вам просто нужно его слегка поправить
сейчас поумнел немного и все равно я не вижу
Офлайн
pyuserВ 10 посте ответ содержит функцию, постоянно получающую логин, пасс и тнс и возврающая список из этих данных.
Ответ в 10-ом посте приведенного выше топика, Вам просто нужно его слегка поправить
Офлайн
n2b, а что мешает создать и вернуть connection?
В 10 посте ответ содержит функцию, постоянно получающую логин, пасс и тнс и возврающая список из этих данных.
Офлайн
pyuserСоздать и вернуть connection в функции нельзя, поскольку потом к ней буду обращаться 100500 раз и каждый раз эта функция будет открывать коннект к базе данных и ТНС рухнет… =\n2b, а что мешает создать и вернуть connection?
В 10 посте ответ содержит функцию, постоянно получающую логин, пасс и тнс и возврающая список из этих данных.
pyuserВот именно этого я и не понимаю как сделать…
Сделайте cjnnection свойством главного окна приложения, получите его один раз с помощью Вашего диалога, а потом передавайте его всем нуждающимся как параметр
Отредактировано (Дек. 29, 2011 10:55:45)
Офлайн
n2bЗачем? Есть диалог подключения к базе и он, если я все правильно понимаю, вызывается один раз, т.е. я предлагаю следующее:
Создать и вернуть connection в функции нельзя, поскольку потом к ней буду обращаться 100500 раз
# псевдокод
# --- module mainform.py ---
import createconnection
import newrecord
class MainForm:
def __init__(self):
...
self.db = None
...
def get_connection(self):
if self.db is None:
self.db = createconnection.create_connection()
return self.db
def add_record(self):
newrecord.add_record(db)
# --- end module ---
# --- module createconnection.py ---
class Connection:
# пользователь вводит все необходимое для создания подключения
...
def create_connection():
connection = None
dlg = Connection()
if wx.ID_OK == dlg.ShowModal():
connection = # создаем подключение
dlg.Destroy()
return connection
# --- end module ---
# --- module newrecord.py ---
class NewRecord:
# пользователь вводит все необходимое
...
def add_record(db):
dlg = NewRecord()
if wx.ID_OK == dlg.ShowModal():
rs = db.cursor()
rs.execute("INSERT ....")
db.commit()
dlg.Destroy()
# --- end module ---
Отредактировано (Дек. 30, 2011 00:01:33)
Офлайн
class NewRecord:
# пользователь вводит все необходимое
class Connection:
# пользователь вводит все необходимое для создания подключения
Непонятно. Зачем пользователю ДВА раза вводить данные?
А, понял. Нет.
Давайте я еще раз всё объясню:
Пользователь вводит данные для создания подключения.
В этой же форме я могу создать это подключение с введенными данными. Далее это подключение(переменную self.connection) сделать ГЛОБАЛЬНОЙ для всех модулей. Чтобы я могу оперировать этой переменной в любом модуле (не создавать заного коннектион, что приводит к завалу TNS'a оракловского, а использовать открытый connection).
Отредактировано (Янв. 4, 2012 18:25:50)
Офлайн
n2bИменно это я Вам и показал, если Вы этого не видите - извините, как показать еще доходчивей - я не знаю.
Пользователь вводит данные для создания подключения.
В этой же форме я могу создать это подключение с введенными данными. Далее это подключение(переменную self.connection) сделать ГЛОБАЛЬНОЙ для всех модулей. Чтобы я могу оперировать этой переменной в любом модуле (не создавать заного коннектион, что приводит к завалу TNS'a оракловского, а использовать открытый connection).
Офлайн