如何在Tkinter中正确格式化SQL查询输出?

时间:2017-05-11 03:41:02

标签: python sql-server tkinter

我无法正确输出SQL查询。我之前已经发布了这个,但我认为我没有很好地解释它。我在SQL查询中使用了至少10行的条目小部件。

程序可以搜索名字或姓氏,并提供与搜索条件相关联的名称列表。 它应该只列出与当前查询相关的名称。

现在,如果您输入名称,它将列出所有具有相同名称的人。然后,如果您进行第二次搜索,它将列出新名称以及您搜索的先前名称。我试图弄清楚如何正确清除它,以便以前的名字不再显示。

我从随机名称数据库附加了3次搜索的屏幕截图。

首次搜索是Burney的第一个名字。我的数据库中只有一个Burney,所以它列出了一个Burney。 其次,Josh正在寻找。数据库中可能有大约20个Josh,所以它会覆盖Burney并列出Josh的名字。 第三,伯尼再次寻找 好吧,它只覆盖Burney的顶部Entry行,但留下了所有以前的Josh名字 我只想让它显示伯尼。

我在结果[x]中玩过self.myentry.delete(0,END),但我不确定我是否正确使用它。或者,如果它甚至可以帮助我的情况。

附件是我的代码的截图和简短版本:

enter image description here

import os
import pypyodbc
import tkinter
from tkinter import ttk
from tkinter import messagebox
from tkinter import BOTH, END, LEFT


class Adder(ttk.Frame):
    """The adders gui and functions."""
    def __init__(self, parent, *args, **kwargs):
        ttk.Frame.__init__(self, parent, *args, **kwargs)
        self.root = parent
        self.init_gui()

    def calculate(self):
        firstname = str(self.first_entry.get())
        lastname = str(self.last_entry.get())     

        if (firstname and not lastname):  # "You entered first name."

            try:
                connection = pypyodbc.connect('Driver={SQL Server};Server=MYSERVERNAME;Database=MYDATABASE;Trusted_Connection=yes;')
            except pypyodbc.Error as ex:
                sqlstate = ex.args[0]
                if sqlstate == '28000':
                    self.answer_label['text'] = "You do not have access." 
            cursor = connection.cursor() 
            SQLCommand = ("SELECT LASTNAME, FIRSTNAME "      
                "FROM dbo.MYTABLENAMEHERE "   # table name
                "with (nolock)"
                "WHERE FIRSTNAME = ?")
            Values = [firstname]
            cursor.execute(SQLCommand,Values)
            results = cursor.fetchmany(10)
            if results:
                self.output0.delete(0, END)
                self.output0.insert(0,results[0])
                self.output1.insert(0,results[1])
                self.output2.insert(0,results[2])
                self.output3.insert(0,results[3])
                self.output4.insert(0,results[4])
                connection.close()


    def init_gui(self):
        """Builds GUI."""
        self.root.title('Verify')
        self.root.option_add('*tearOff', 'FALSE')

        self.grid(column=0, row=0, sticky='nsew') # this starts the entire form

        # Input Boxes and Button

        self.first_entry = tkinter.Entry(self, width=28) # first input box
        self.first_entry.grid(sticky='', column=1, row=1) 

        self.last_entry = tkinter.Entry(self, width=28) # second input box
        self.last_entry.grid(sticky='', column=2, row=1) 


        self.calc_button = ttk.Button(self, text='Search', command=self.calculate) # button
        self.calc_button.grid(column=4, row=1, columnspan=1, sticky='w', padx=14)

        # Output entries for answers

        self.output0 = tkinter.Entry(self, width=150, bd=0,)
        self.output0.grid(column=0, row=6, columnspan=5, padx=100, pady=0)
        self.output1 = tkinter.Entry(self, width=150, bd=0,)
        self.output1.grid(column=0, row=7, columnspan=5, padx=100, pady=0)
        self.output2 = tkinter.Entry(self, width=150, bd=0,)
        self.output2.grid(column=0, row=8, columnspan=5, padx=100, pady=0)
        self.output3 = tkinter.Entry(self, width=150, bd=0,)
        self.output3.grid(column=0, row=9, columnspan=5, padx=100, pady=0)
        self.output4 = tkinter.Entry(self, width=150, bd=0,)
        self.output4.grid(column=0, row=10, columnspan=5, padx=100, pady=0)

if __name__ == '__main__':
    root = tkinter.Tk()
    Adder(root)
    root.resizable(width=False, height=False) # locks window from being resized
    root.mainloop()

0 个答案:

没有答案