Неверный результат запроса SELECT в обновлении Treeview - PullRequest
0 голосов
/ 10 января 2019

это довольно сложный вопрос, и я постараюсь предоставить вам столько данных / кода, сколько вы пожелаете. Любая помощь приветствуется.

Context

AssignBadgeFrame

Это кадр tkinter, для которого пользователь может назначить значок разведчику. Как видите, он состоит из трех разных ttk.Treeviews. Один содержит все имена значков, найденные в таблице значков таблицы MySQL, а другой - все имена патрулей, найденные в таблице патрулей в базе данных MySQL.

При выборе патруля список имен появляется в последнем древовидном списке. Это разведчики, которые принадлежат к этому патрулю.

Пример:

Display

Как ...

Patrol Table enter image description here

Проблема

При нажатии клавиши возврата вызывается функция, которая должна :

  1. Очистить Древо, содержащее имена разведчиков
  2. Назначьте значок разведчику, создав новую строку в таблице собственных значков
  3. Вернуть имена всех разведчиков из выбранного патруля, которые еще не получили значок, обратно в древовидную структуру.

Общий эффект заключается в том, что когда выбран Скаут и нажата клавиша возврата, этот скаут удаляется, а остальные скауты остаются в древовидном представлении. Однако помните, что Можно выбрать более одного разведчика

Ниже Функция выполняется при нажатии клавиши возврата.

def selectScout():
    global SelectedBadgeStr
    global SelectedPatrolStr
    Values=[]
    if SelectedPatrol.get()==("Selected Patrol: Please Select A Patrol"):
        tk.messagebox.showerror("ERROR","Please select a Patrol")
        return
    if SelectedBadge.get()==("Selected Badge: Please Select A Badge"):
        tk.messagebox.showerror("ERROR", "Please select a Badge")
        return
    print(SelectedBadgeStr)
    curItems = SelectScoutView.selection()
    for i in curItems:
        Values.append(SelectScoutView.item(i)['values'])
    print(Values)
    for i in Values:
        print(SelectedBadgeStr)
        print(i)
        print(i[0])
        print(i[1])
        print(type(i))
        print(type(i[0]))
        Test=("Test")
        print(repr(i[0]))
        GetBadgeID=("SELECT badgeID FROM badges WHERE badgename=%s")
        mycursor.execute(GetBadgeID,(SelectedBadgeStr,))
        BadgeID=mycursor.fetchone()
        print(BadgeID)
        GetScoutID=("SELECT scoutID FROM scoutinfo WHERE firstname=%s AND secondname=%s")
        mycursor.execute(GetScoutID,(i[0],i[1]))
        ScoutID=mycursor.fetchone()
        UpdateOwnedBadgesB="INSERT INTO ownedbadges (badgeID,scoutID) VALUES(%s,%s) "
        mycursor.execute(UpdateOwnedBadgesB,(BadgeID[0],ScoutID[0]))
        mydb.commit()
    #Removing Those Who Now Own The Badge
    ScoutNameList=[]
    Remove = SelectScoutView.get_children()
    for child in Remove:
        SelectScoutView.delete(child)
    print("The Badge:",SelectedBadgeStr,"ID Is",BadgeID[0])
    ScoutIDSWhoOwnBadge=("SELECT scoutID FROM ownedbadges WHERE badgeID=%s")
    mycursor.execute(ScoutIDSWhoOwnBadge,(BadgeID[0],))
    BadgeScoutIDS=mycursor.fetchall()
    print("BadgeScoutIDS")
    print(BadgeScoutIDS)
    for i in BadgeScoutIDS:
        print(i)
        print(i[0])
        print(repr(i[0]))
        ScoutNames="SELECT firstname AND secondname FROM scoutinfo WHERE scoutID=%s"
        mycursor.execute(ScoutNames,(i[0],))
        print("SELECT QUERY RESULTS:")
        print(mycursor.fetchall())
        Name=mycursor.fetchall()
        print("Should Be Names Below:")
        print(Name)
        ScoutNameList.append(Name)
    print(ScoutNameList)
    ScoutNamesByPatrol=("SELECT firstname,secondname FROM scoutinfo WHERE patrolID=(SELECT patrolID FROM patrols WHERE patrolname=%s)")
    mycursor.execute(ScoutNamesByPatrol,(SelectedPatrolStr,))
    ScoutNamedFromPatrol=mycursor.fetchall()
    print(ScoutNamedFromPatrol)
    print("Done")
    return

(я хорошо знаю, что эта функция не соответствует требованию вставки данных обратно в Treeview)

Ошибка возникает в

Name=mycursor.fetchall()

Ошибка:

mysql.connector.errors.InterfaceError: No result set to fetch from.

Эта ошибка возникает из-за запроса SELECT:

ScoutNames="SELECT firstname AND secondname FROM scoutinfo WHERE scoutID=%s"
mycursor.execute(ScoutNames,(i[0],))

Урожайность:

[(0,)]

Вместо имени и имени разведчика. Даже если (i[0],)) = 51 Или эквивалентный разведчик ID.

Результаты

Сейчас я приведу вам пример, чтобы вы лучше поняли проблему.

Example

Как вы можете видеть, значок "Tracking Badge" был выбран, патруль "Panther" был выбран и разведчик "Rory Adair" был выбран. Мы хотим дать Рори Адайру из Патрульного Пантеры значок слежения

Ожидаемые результаты:

Строка в древовидной структуре, содержащая «Рори Адайр», удалена, оставив двух других скаутов, которые не получили значок в древовидной структуре.

ScoutID для "Rory Adair" будет добавлен в таблицу ведомых значков вместе с badgeID.

Фактические результаты:

Все строки в древовидной структуре удалены

Таблица OwnerBadges успешно изменена, как показано ниже.

Example Table

(игнорировать столбец "полученный", поскольку его назначение еще не определено ...) (Я знаю, что это не код для добавления строк / имен скаутов bck в Treeview, однако я не могу этого сделать, пока проблема не будет устранена)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...