Chirurgia cranio-cerebrală minim invazivă
Tehnicile minim invazive impun utilizarea unei tehnologii ultramoderne. Endoscoapele operatorii de diverse tipuri, microscopul operator dedicat, neuronavigația, neuroelectrofiziologia, tehnicile avansate de anestezie, chirurgia cu pacientul treaz reprezintă armamentarium fără de care neurochirurgia prin "gaura cheii" nu ar fi posibilă. Folosind tehnicile de mai sus, tratăm un spectru larg de patologii cranio-cerebrale. www.neurohope.ro |
Creare baza date in Microsoft Access - fost "Acces"
#1
Posted 10 June 2019 - 14:09
Trebuie sa fac o baza de date in acces cu prezenta unor studenti la mai multe cursuri. Dupa trebuie sa numar absentele, cum as putea face asta in acces? Exista vreo formula? (de ex la excel este countif)
|
#2
Posted 10 June 2019 - 14:20
ar mai fi si group by
select bla bla from x group by y sau pui si o conditie de where Edited by pupama, 10 June 2019 - 14:21. |
#3
Posted 10 June 2019 - 14:22
fa intai baza de date (modelul de date, tabelele), numaratoarea absentelor nu e o problema complicata
|
#5
Posted 10 June 2019 - 14:41
#6
Posted 10 June 2019 - 15:18
N-a mai intrat de vreo 10 ani in Acces, dar parca aveai la Query optiunea Group By pe campul ce il vrei grupat impreuna cu care bagai un Count pe camp nou. Adica Group By pe Student si Count de absente.
|
#7
Posted 10 June 2019 - 15:43
#8
Posted 10 June 2019 - 15:44
#9
Posted 10 June 2019 - 17:10
MS Access este o bază de date relaţională. Modul în care gândeşti structura tabelelor te poate ajuta foarte mult sau încurca teribil.
Ar trebui să ai: - un tabel pentru studenţi, de genul tblStudents, cu cheie unică (integer, autoincrement) StudentID - un tabel pentru cursuri, de genul tblCourses, cu cheie unică (integer, autoincrement) CourseID - un tabel pentru absenţe, cu cheie unică şi câmpuri de relaţionare în care să stochezi id-ul studentului şi al cursului. Obţii numărul de absenţe făcând count pe id-urile celui de-al treilea tabel, cu clauze where pentru id student, id curs sau datetime-ul absenţelor. Dacă ce am scris mai sus ţi se pare chineză veche, nu deznădăjdui. Aprofundează teoria şi vei înţelege cum stau lucrurile. Să poţi proiecta baze mici de date este fundamental pentru orice "programmer wannabe". Baftă! Edited by Yoda, 10 June 2019 - 17:11. |
#10
Posted 10 June 2019 - 17:34
Tamisa10, on 10 iunie 2019 - 15:43, said:
Baza de date am facut-o, nu stiu cum pot număra absentele Yoda, on 10 iunie 2019 - 17:10, said:
Obţii numărul de absenţe făcând count pe id-urile celui de-al treilea tabel, cu clauze where pentru id student, id curs sau datetime-ul absenţelor. Edited by Iulius-Foyas, 10 June 2019 - 17:35. |
|
#11
Posted 10 June 2019 - 22:36
Am revenit cu un mic exemplu care prelucreaza datele la nivel de zi si afiseaza absentele si prezentele din ziua respectiva.
Tu trebuie sa-l intelegi si sa-l modifici pentru ce iti trebuie tie. Doarece cursurile pot fi diferite in fiecare zi , rezulta ca in tabela de cursuri vei avea teoretic cate o configuratie de cursuri pe fiecare zi. Adica tabela de cursuri finala din proiectul este chiar orarul grupei de studenti, insa orarul se repeta , ai o saptamana impara unde ai anumite cursuri in fiecare zi si o saptamana para unde ai alte cursuri in acelasi zile. Tu va trebui sa gandesti un mecanism in SQL astfel incat tinand cont de ziua curenta si tipul saptamanii sa se aleaga automat o configurarie atat din tabela Cursuri cat si din tabela Prezente, si pe baza acelor configurati de zi se face algoritmul de absente /prezente studenti. Pentru mai multe detalii vezi indrumatorul tau de proiect. Acum eu in exemplu de mai jos am pus asa: tabela studenti, tabela Prezente in care pusa doar configuratia prezentelor studentilor pentru ziua de azi, si tabela cursuri in care este pusa doar configuratia cursurilor din ziua de azi. Apoi pe aceste configuratii am aplicat interogarile de la sectiunea "Interogari" din fiserul de acces, atasat acestui post. Ce trebuie sa stii in legatura cu Access: Nu poti sa faci SQL Full-Outer Join(chestie care ar fi simplificat enorm lucrurile) si nu poti sa faci SQL Except care la fel ar fi simplificat lucrurile.D Doarece nu se pot face astfel de operatii, am rescris mecanismul lor pentru ce iti trebuie tie, cu operatii SQL de baza: -- absenti la nivel de zi: -- AbsenteStudenti => SELECT Y.data, S.*, Y.curs_id, Y.curs FROM ( SELECT X.student_id, X.curs_id, X.curs, X.data FROM ( SELECT DISTINCT P.student_id, C.curs_id, C.curs, P.data FROM Prezenta AS P INNER JOIN Cursuri AS C ON P.curs_id <> C.curs_id ) AS X LEFT JOIN Prezenta AS P ON (X.student_id = P.student_id) AND (X.curs_id = P.curs_id) WHERE P.curs_id is NULL ) AS Y LEFT JOIN Studenti AS S ON S.student_id = Y.student_id; -- aggregare pe absenti la nivel de zi: SELECT ABS.data, ABS.nume, ABS.prenume, Count(ABS.student_id) AS numar_absente FROM AbsenteStudenti AS ABS GROUP BY ABS.data, ABS.nume, ABS.prenume;Cele mai importante queriuri ti le-am pus mai sus doarece Access cand salveaza SQL si il deschizi iti rescrie tot SQL-ul pe o linie. Tamisa10.zip 93.44K 7 downloads reazultalte_tamisa10.png 95.67K 17 downloads Edited by Iulius-Foyas, 10 June 2019 - 22:52. |
#12
Posted 11 June 2019 - 08:55
@Iulius-Foyas, felicitări pentru implicare. Dacă îmi permiţi, o mică observaţie: în tabelul "Prezenta", la curs_id trebuie stocat id-ul cursului (primul câmp).
De dragul conversaţiei, poate nu ar fi rău să fie introdus un nou nivel de logică, acela în care nu toţi studenţii sunt înscrişi la toate cursurile. Un tabel FrecventareCursuri, cu câmpuri ID, curs_id, student_id, iar în interogările absenţilor să fie selectaţi doar studenţii înscrişi (cu înregistrare în acest tabel). Edited by Yoda, 11 June 2019 - 08:55. |
#13
Posted 11 June 2019 - 10:28
Yoda, on 11 iunie 2019 - 08:55, said:
@Iulius-Foyas, felicitări pentru implicare. Dacă îmi permiţi, o mică observaţie: în tabelul "Prezenta", la curs_id trebuie stocat id-ul cursului (primul câmp). La nivel de zi are loc maparea intre student_id si curs_id.Aceasta imi spune ca pt ziua respectiva ce student a fost la ce curs. Apoi pt fiecare student, la nivel de zi se compara la ce cursuri a fost(maparea student_id - curs_id la nivel de zi , tabela Prezenta) VS la ce cursuri trebuia sa mearga pt acea zi(lista de cursuri din tabela Cursuri la nivel de zi) . Quote
De dragul conversaţiei, poate nu ar fi rău să fie introdus un nou nivel de logică, acela în care nu toţi studenţii sunt înscrişi la toate cursurile. Un tabel FrecventareCursuri, cu câmpuri ID, curs_id, student_id, iar în interogările absenţilor să fie selectaţi doar studenţii înscrişi (cu înregistrare în acest tabel). Acel tabel ipotetic FreventareCursuri este de fapt tabelul Prezenta. Quote
iar în interogările absenţilor să fie selectaţi doar studenţii înscrişi (cu înregistrare în acest tabel). Edited by Iulius-Foyas, 11 June 2019 - 10:40. |
#14
Posted 11 June 2019 - 14:12
student_id este cheie primară, legătura e corectă; curs_id nu este cheie primară, legătura nu e corectă. Ai înţeles acum care e problema?
În altă ordine de idei, tablul ipotetic nu are treabă cu cel de Prezenta. Dacă un student nu exista in Prezenta nu înseamnă absenţă la acel curs, poate nu era înscris să participe. Pentru asta e nevoie de un tabel separat. Edited by Yoda, 11 June 2019 - 14:15. |
#15
Posted 11 June 2019 - 17:42
Yoda, on 11 iunie 2019 - 14:12, said:
student_id este cheie primară, legătura e corectă; curs_id nu este cheie primară, legătura nu e corectă. Ai înţeles acum care e problema? In tabela Prezenta student_id si curs_id nu sunt chei primare si nici n-am intentionat asa ceva. Pur si simplu este o mapare. Ce spui tu este modelul pedagogic de scoala, Eu n-am avut intentia sa respect acest model.Poate vreau sa sterg o tabela, poate vreau s-o repopulez si nu pot din cauza constrangerilor ale posibilelor FK-uri.In modelul de productie rareori se respecta modele pedagice care in probleme din lumea reala mai mult incurca decat sa ajute. Yoda, on 11 iunie 2019 - 14:12, said:
student_id este cheie primară, legătura e corectă; curs_id nu este cheie primară, legătura nu e corectă. Ai înţeles acum care e problema? În altă ordine de idei, tablul ipotetic nu are treabă cu cel de Prezenta. Dacă un student nu exista in Prezenta nu înseamnă absenţă la acel curs, poate nu era înscris să participe. Pentru asta e nevoie de un tabel separat. Quote Dacă un student nu exista in Prezenta nu înseamnă absenţă la acel curs Asa stau lucrurile in productie unde se foloseseste modelarea datamart schema caz particular al modelului snowflake schema. https://en.wikipedia.../wiki/Data_mart https://en.wikipedia...nowflake_schema Quote poate nu era înscris să participe. Oricum subiectul topicului era sa-si numere absentele, so deja discutam discutii. Pam pam. Edited by Iulius-Foyas, 11 June 2019 - 17:42. |
|
#16
Posted 11 June 2019 - 17:59
Lucrurile stau exact pe dos, colega. N-am treabă cu "modelul pedagogic", nu predau informatică. În schimb, mănânc Access pe pâine, de vreo douăzeci de ani, pe proiecte mai mult sau mai puţin complexe.
Avem opinii mult prea diferite ca să merite efortul să te conving de ce e imperios necesar să proiectezi de la bun început o bază de date "ca la carte". Te vei convinge singur, în timp, dacă-ţi vei câştiga existenţa din treaba asta. |
#17
Posted 11 June 2019 - 18:44
Yoda, on 11 iunie 2019 - 17:59, said:
Lucrurile stau exact pe dos, colega. N-am treabă cu "modelul pedagogic", nu predau informatică. În schimb, mănânc Access pe pâine, Quote
Avem opinii mult prea diferite ca să merite efortul să te conving de ce e imperios necesar să proiectezi de la bun început o bază de date "ca la carte". Daca vrei sa cunosti mediul profesionist de dezvoltare a bazelor de date "intradevar ca la carte" iti recomand Microsoft Sql Server Enterprise Edition, si de asemeni in recomand https://www.amazon.c...h/dp/0470462078 Poti sa incerci si Postgres Enterprise.Ideea este ca nu te poti numi profesionist atat timp cat lucrezi intr-un mediu care nu-ti permite SQL full outer joins si nicidecum nu-ti permite utilizarea :
Asa, Accesul asta este bun pt copii de scoala generala/liceu Dar nu este nicidecum un mediu profesionist.De altfel se si observa imediat lucrul asta, pentru cineva care vine din SQL Server Enterprise Edition si foloseste schema si concepte precum datamart si snowflake schema, aka industry leading professional datawarehousing schemas. Bai mai mult are un editor de SQL care itin formateaza tot sql-ul pe o linie, haha Edited by Iulius-Foyas, 11 June 2019 - 18:46. |
#18
Posted 11 June 2019 - 19:18
Iulius, las-o jos că măcăne. Înşiratul de termeni tehnici nu te face expert, la fel cum statul în garaj nu te face maşină. Ai demonstrat ce ştii de la "poate vreau sa sterg o tabela, poate vreau s-o repopulez si nu pot din cauza constrangerilor ale posibilelor FK-uri". Dacă vii dintr-un mediu cu adevărat profesionist, nu tremuri de frică în faţa unor constrângeri FK. Şi ştii ce înseamnă o tabelă indexată de zeci de mii de înregistrări versus una fără cheie primară definită.
Îţi mulţumesc că-mi recomanzi lecturi despre data warehousing. Îmi aduc aminte că atunci când cădeau turnurile gemene, mă uitam alternativ la TV şi la monitorul CRT pe care învăţam cu ce se mănâncă structuri OLAP în SQL Server. Tu ce făceai în 2001? Consideră întrebarea ca fiind retorică. Chiar nu am chef de polemici de genul ăsta, mă opresc aici. |
Anunturi
▶ 0 user(s) are reading this topic
0 members, 0 guests, 0 anonymous users