jonagricar / Krvna-banka

MIT License
0 stars 0 forks source link

Aplikacija #3

Open jonagricar opened 5 years ago

jonagricar commented 5 years ago

Uspeli sva postaviti aplikacijo s podatki o osebah, ki so del krvne banke in pa tudi obrazec, ki je namenjen vpisu novih donatorjev. Zanima naju, kako bi sedaj vse skupaj posodobili v seznamu donatorjev ter v seznamu vrečk. Med donatorje in tudi med vse osebe na glavni strani bi namreč radi dodali novo osebo. Prav tako pa bi v zavihku, kjer se bodo nahajale vrečke, radi dodali novo vrečko, ki pride v seznam vrečk skupaj z novo dodano osebo preko obrazca, ravno zato sva v obrazec vstavili tudi polje za hemoglobin. Poleg tega pa bo verjetno treba na novo dodati številko vrečke in id osebe (donatorja) - obstaja morda kakšen način, kako bi se te serijske identifikacije dodale avtomatsko?

jaanos commented 5 years ago

Da bo mogoče podatke dodajati iz aplikacije, bo treba dati ustrezne pravice uporabniku javnost (zagotovo INSERT na tabelah, kjer lahko vstavlja, morda pa tudi kak UPDATE). Svetujem, da si pogledata po drugih projektih, kako v Shinyju narediti obrazce z vnosnimi polji in gumbi za potrditev, ki potem izvedejo ustrezno poizvedbo.

Kar se tiče ID-jev, bo najbolje, da pri ustvarjanju tabel uporabite tip SERIAL - ID-ji se bodo potem avtomatsko generirali, če niso podani v poizvedbi. Če taki poizvedbi INSERT na koncu dodasta še RETURNING id (kjer je id ime stolpca z ID-jem) in jo izvedeta z dbGetQuery, bosta v rezultatu dobila ID dodane vrstice.

jonagricar commented 5 years ago

Naleteli sva na težavo pri spletnem obrazcu. Pomagali sva si s kodo iz projekta Vojne, a nama novih podatkov iz obrazca noče vstaviti v najine tabele (ne naredi nič, ne vrne niti napake). Zato sva poskusili še druge načine, a noben ne deluje pravilno. Ne veva, kje v kodi glede obrazca in vstavitve INSERT bi lahko prišlo do napake.

jaanos commented 5 years ago

Pri meni aplikacije ne požene zaradi napačnega kodiranja znakov. To najlažje rešita tako, da program app.R shranita s kodiranjem znakov UTF-8 (File / Save with Encoding... in nato izbereta UTF-8) - če vama šumnikov ne prikaže pravilno, ga pred tem odprita s kodiranjem znakov Windows-1250 ali cp1250. V izogib nadaljnjim problemom se prepričajta, da imata v RStudiu odprt projekt - če desno zgoraj piše Project: (None), kliknita tja, izberita Open Project..., nato pa poiščita datoteko Krvna-banka.Rproj v mapi vajinega repozitorija (tako bo deloval tudi git znotraj RStudia). Tako se bodo datoteke privzeto odpirale s kodiranjem znakov UTF-8.

Trenutno v app.R kličeta program projekt.R, v katerem imata funkcije za ustvarjanje in polnjenje baze. Pri tem kličeta auth.R, vendar končni uporabnik te datoteke nima, prav tako ne potrebuje prej omenjenih funkcij. Zato bo zadostovalo, če namesto projekt.R kličeta auth_public.R, kjer pa spremenljivko geslo nadomestita s password. V libraries.R imata na koncu kodo za ustvarjanje baze SQLite v pomnilniku - tega ne potrebujeta, tako da lahko to kodo pobrišeta.

Kar se tiče izvedbe stavka SQL ob kliku na gumb, lahko to dosežeta z observeEvent, npr.

  observeEvent(input$submit, {
    dbSendQuery(conn, build_sql("INSERT INTO oseba (ime, kraj, drzava, starost, email, teza, krvna_skupina, datum_vpisa_v_evidenco)
                                 VALUES (", input$imepri, ",", input$kraj1, ", ", input$drzava1, ",", input$sta, ",", input$email1, ",",
                                            input$teza1, ",", input$skup, ",", input$dat, ");", con=conn))
  })

Da bo poizvedba delovala, bo treba uporabniku javnost dati pravico uporabe ustreznega števca. Najlažje bo to narediti za vse števce hkrati:

GRANT ALL ON ALL SEQUENCES IN SCHEMA public TO javnost

Kot vidim, imata ustrezno vrstico v projekt.R zakomentirano - svetujem pa, da odstranita WITH GRANT OPTION.

jonagricar commented 5 years ago

Za šumnike sva naredili kot ste svetovali. V bazi šumniki delujejo, v aplikaciji pa še vedno ne.

Poizvedba, ki doda novega donatorja v tabelo oseba, zdaj deluje, hvala. Imava pa še zadnje vprašanje glede aplikacije. Hoteli sva, da se ob pritisku na gumb doda tudi nova vrečka v zalogo, ki ima izpolnjena tudi polja kdo je donator, kje jo hranijo in da dobi tudi že svojega prejemnika. poskušali sva na več načinov, a nama nikakor ne uspe, tudi z RETURNING id ne. Ali je to preveč komplicirano ali se da to realizirati?

jaanos commented 5 years ago

Trenutno so šumniki app.R deloma v kodiranju UTF-8, deloma pa Windows-1250, tako da mi še vedno noče pognati aplikacije. Najbolje bo, če odpreta datoteko s kodiranjem znakov UTF-8, nato pa poiščeta vse vprašaje in nadomestita z ustreznimi šumniki (tudi v komentarjih, če je kak tak primer).

Kar se tiče vstavljanja v bazo, bi šlo nekako tako:

    id_oseba <- dbGetQuery(conn, build_sql("INSERT INTO oseba (ime, kraj, drzava, starost, email, teza, krvna_skupina, datum_vpisa_v_evidenco)
                                             VALUES (", input$imepri, ",", input$kraj1, ", ", input$drzava1, ",", input$sta, ",", input$email1, ",",
                                             input$teza1, ",", input$skup, ",", input$dat, ") RETURNING id;", con = conn))
    id_bolnica <- dbGetQuery(conn, build_sql("SELECT id FROM bolnisnica
                                              WHERE drzava = ", input$drzava1, "
                                              ORDER BY kraj = ", input$kraj1, " DESC
                                              LIMIT 1;", con=conn))
    dbSendQuery(conn, build_sql("INSERT INTO kri (hemoglobin, datum_prejetja, donator, hrani)
                                 VALUES (", input$hemo, ",", input$dat, ",", id_oseba[1,1], ",", id_bolnica[1,1],");",
                                con=conn))

Svetoval bi sicer, da izbiro bolnišnice prepustita uporabniku. Zgornja poizvedba bo dala ID bolnišnice v podanem kraju, če ta obstaja, sicer pa ID neke bolnišnice v izbrani državi. Glede na to, da se države pojavljajo tako pri bolnišnicah kot pri osebah, bi jih bilo smiselno dati v svojo tabelo, pa imata v prej omenjenih tabelah samo reference na njihove ID-je.

jonagricar commented 5 years ago

Datoteko sva odprli s kodiranjem UTF-8 in popravili vse ?, a v aplikaciji šumniki žal še vedno ne delujejo. Prav tako sva vse datoteke shranili s kodiranjem UTF-8. Obstaja morda še kakšna rešitev?

jaanos commented 5 years ago

Kako pa vama prikaže šumnike? Gre samo za nize, ki so napisani v aplikaciji, ali tudi za podatke, ki se naložijo iz baze? Ali vama je predhodno že delovalo?

Mimogrede: v libraries.R vključita še knjižnico dbplyr, da bo aplikacija delovala že pri prvem zagonu.

jonagricar commented 5 years ago

Šumniki (zdi se mi, da tudi nekatere posebne črke) ne delujejo niti v tabelah, ki jih dobimo iz baze (prilagam PrintScreen tabele), niti kot tekst oziroma nizi v obrazcu (oziroma nikjer v aplikaciji) in npr. spustnem seznamu držav (prilagam PrintScreen obrazca). Enkrat vmes so šumniki v obrazcu že delovali in potem ne več. Hvala, knjižnica je zdaj dodana. Brez naslova Brez naslova1

katjamarina commented 5 years ago

Če odpreva aplikacijo v browserju, šumniki v nizih, ki so v aplikaciji, delajo, v podatkih iz baze pa še vedno ne. Prilagam slike: 1 2

jonagricar commented 5 years ago

Na aplikaciji in v slovarju držav sva namesto šumnikov uporabili črke c, s, z. Ker se nama malo mudi, bi projekt radi oddali.

jaanos commented 5 years ago

Pri meni ni problemov s šumniki, tako da bom dodal povezavo do projekta na repozitorij predmeta. Če se še nista, se lahko z @alenFMF domenita za termin zagovora. Če bosta do takrat še kaj spreminjali, mi javita, da posodobim povezavo.

Imam še dve pripombi:

Če bosta jutri med 10h in 12h kaj na faksu, se lahko oglasita, pa pogledamo, kaj se da narediti glede šumnikov.

katjamarina commented 5 years ago

Posodobili sva par malenkosti, tako da prosiva za posodobitev povezave, hvala.

jaanos commented 5 years ago

V redu, sem posodobil.