0

私は非常に奇妙な問題に悩まされています。

import wx, gui, threading, time, pyodbc
from OrderNumEntry import entryID, plyID, stationID
from main import strPlyDB
from Op1Login import eID1
global eID1

class MainFrame1(gui.MainFrame1Op):
    def __init__(self, parent):
        gui.MainFrame1Op.__init__(self, parent)
        self.m_textCtrl3.SetValue(eID1)
        # print eID1

    def checkClick1(self, event):
        if threading.activeCount() < 2:
            t1 = threading.Thread(target = self.checkAdvance1)
            t1.setDaemon(True)
            t1.start()
            self.m_checkBox110.SetValue(True)

    def checkAdvance1(self):
        strODBC_conn = 'DRIVER={Microsoft Access Driver (*.mdb)};DBQ=%s' % strPlyDB
        conn = pyodbc.connect(strODBC_conn)
        cursor = conn.cursor()

        # eID1 = '00839530'
        print 'test1'
        print eID1
        print 'test2'

        SQL = 'INSERT INTO tblRecord(EntryID, PlyID, StationID, EmployeeNum, BuyoffTime) values(?,?,?,?,?)'
        cursor.execute(SQL, (entryID, plyID, stationID, eID1, time.strftime("%c")))

        cursor.commit()
        cursor.close()
        conn.close()

何が起こっているかというと、私のクラスmain.pyを初期化するプライマリ Python ファイルがあり、そのファイルはすべての wxpython コードを参照してウィンドウを表示します。このファイルは単なるイベント ハンドラです。ウィンドウのチェックボックス (私が知っているクリエイティブ名) をクリックすると実行され、.mainframe1gui.pycheckClick1checkAdvance1

一部を除いて、プログラム内のすべてが正常に機能します。私のeID1変数は で問題なく動作し__init__textCtrl3表示されます。ただし、 で再度使用しようとするとcheckAdvance1、プログラムがハングします。

eID1それをテストするために、2 つの test print ステートメントでprint ステートメントを囲みました。のみtest1が表示され、エラー コードは表示されず、プログラムは単にハングします。さらにややこしいことprint eID1に、関数にステートメントを入れる__init__と (現在はコメントアウトされています)、プログラムは問題なく実行されます。

可変機能が print ステートメントによってどのように影響を受けるかはわかりませんが、それは起こっています。ただし、それを修正するために print ステートメントを挿入することは、実際の問題を無視する粗末な回避策のように思えます。また、コメントアウトされたeID1宣言は、プログラムの実行時に変数の内容がどのように見えるかを示すための単なる例です。

編集:私は完全に満足していない回避策を考え出しましたが、印刷を追加するよりはましです。別の変数を作成すると、次のように empID1 の文字列変換に設定できますempID1 = str(eID1)。後で eID1 の代わりにこの値を参照できます。しかし、私が知っていて調査したすべてのことによると、元のコードは機能する必要があるため、これはまだうまくいきません。舞台裏で何か悪いことが起こっているような気がします。

4

0 に答える 0