Ракетка. Заполните таблицу данными из базы данных - PullRequest
0 голосов
/ 15 марта 2020

Я пытаюсь заполнить таблицу в моем GUI данными из базы данных.
Вот пример базы данных:

Team
---------------------------------------------------------
|    id    |     name      |    city     |     coach    |
---------------------------------------------------------
|    1     | Atlanta Hawks |   Atlanta   | Lloyd Pierce |
|    2     | Boston Celtics|   Boston    | Brad Stevens |
|    3     | Chicago Bulls |   Chicago   |  Jim Boylen  |
|    4     | Brooklyn Nets |   New-York  | Jacque Vaughn|

Tournament
-----------------------------------------------------------------------
|    id    |     name      |    city     |     prise    |     year    |
-----------------------------------------------------------------------
|    1     |    FirstCup   |   Atlanta   |     100000   |     2018    |
|    2     |    SecondCup  |   Boston    |     200000   |     2019    |
|    3     |    ThirdCup   |   Chicago   |     300000   |     2017    |
|    4     |    AnotherCup |   New-York  |     400000   |     2020    |

А вот мой GUI с некоторыми фиктивными данными на вкладках:

#lang racket
(require
  racket/gui/base
  racket/class
  racket/list)

(require db)

(define pgc
  (postgresql-connect #:user "postgres"
                      #:database "bascketball"
                      #:password "root"))

(define Team-Table #f)
(define Tournament-Table #f)
(define Team-Data #f)
(define Tournament-Data #f)

(define Basketball-App #f)
(define Main-Frame #f)
(define Group-Box #f)
(define Horizontal-Pane-Menu #f)
(define Tab-Panel #f)
(define Team-Tab #f)
(define Tournament-Tab #f)

(define (Basketball-App-init
         (Main-Frame-width 800)
         (Main-Frame-height 600))

  (set! Main-Frame
        (new
         frame%
         (parent Basketball-App)
         (label "Basketball App")
         (width Main-Frame-width)
         (height Main-Frame-height)))

  (set! Group-Box
        (new
         group-box-panel%
         (parent Main-Frame)
         (label "")
         (alignment (list 'right 'bottom))))

  (set! Horizontal-Pane-Menu
        (new
         horizontal-pane%
         (parent Group-Box)
         (stretchable-width #f)
         (stretchable-height #f)))

  (set! Tab-Panel
        (new
         (class tab-panel%
           (super-new)
           (define child-panels '())
           (define/public
             (add-child-panel p label)
             (set! child-panels (append child-panels (list p)))
             (send this append label)
             (when (> (length child-panels) 1) (send this delete-child p)))
           (define/public
             (active-child n)
             (send this change-children
                   (lambda (children) (list (list-ref child-panels n))))))
         (parent Group-Box)
         (choices (list))
         (callback (λ (tp e) (send tp active-child (send tp get-selection))))
         (stretchable-width #t)
         (stretchable-height #t)))

  (set! Team-Tab
        (new
         (class vertical-panel%
           (init parent)
           (init-field label)
           (super-new (parent parent))
           (send parent add-child-panel this label))
         (parent Tab-Panel)
         (label "Team")
         (alignment (list 'left 'center))))

  (set! Team-Table (new list-box%
                        [parent Team-Tab]
                        [choices (list )]
                        [label ""]
                        [style (list 'single 'column-headers 'variable-columns)]
                        [columns (list "Id" "Name" "City" "Coach")]))

  #: Dummy data
  (set! Team-Data (list (list "TeamTest" "TeamTest" "TeamTest")
                        (list "TeamTest" "TeamTest" "TeamTest")
                        (list "TeamTest" "TeamTest" "TeamTest")
                        (list "TeamTest" "TeamTest" "TeamTest")))
  (send Team-Table set (list-ref Team-Data 0) (list-ref Team-Data 1) (list-ref Team-Data 2) (list-ref Team-Data 3))

  (set! Tournament-Tab
        (new
         (class vertical-panel%
           (init parent)
           (init-field label)
           (super-new (parent parent))
           (send parent add-child-panel this label))
         (parent Tab-Panel)
         (label "Tournament")
         (alignment (list 'left 'center))))

  (set! Tournament-Table (new list-box%
                        [parent Tournament-Tab]
                        [choices (list )]
                        [label ""]
                        [style (list 'single 'column-headers 'variable-columns)]
                        [columns (list "Id" "Name" "City" "Prise" "Year")]))
  #: Dummy data
    (set! Tournament-Data (list (list "TournamentTest" "TournamentTest" "TournamentTest")
                              (list "TournamentTest" "TournamentTest" "TournamentTest")
                              (list "TournamentTest" "TournamentTest" "TournamentTest")
                              (list "TournamentTest" "TournamentTest" "TournamentTest")
                              (list "TournamentTest" "TournamentTest" "TournamentTest")))
  (send Tournament-Table set (list-ref Tournament-Data 0) (list-ref Tournament-Data 1) (list-ref Tournament-Data 2) (list-ref Tournament-Data 3) (list-ref Tournament-Data 4))

      (send Main-Frame show #t))
    (module+ main (Basketball-App-init))

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

У меня есть две проблемы с этим:

Первый - Как я должен знать, когда пользователь переключает вкладку и что это за вкладка ( другими словами, куда я должен поместить свой запрос SQL, чтобы использовать его только при переключении вкладки).

Второй - когда я использую какой-то из этих запросов:

(query-rows pgc "select * from team")

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

Итак, что вы посоветуете в этом проекте? enter image description here

...