Jump to content

SUBIECTE NOI
« 1 / 5 »
RSS
Incalzire in pardoseala etapizata

Suprataxa card energie?!

Cum era nivelul de trai cam din a...

probleme cu ochelarii
 Impozite pe proprietati de anul v...

teava rezistenta panou apa calda

Acces in Curte din Drum National

Sub mobila de bucatarie si sub fr...
 Rezultat RMN

Numar circuite IPAT si prindere t...

Pareri brgimportchina.ro - teapa ...

Lucruri inaintea vremurilor lor
 Discuții despre TVR Sport HD.

Cost abonament clinica privata

Tremura toata, dar nu de la ro...

Renault Android
 

Creare baza date in Microsoft Access - fost "Acces"

- - - - -
  • Please log in to reply
18 replies to this topic

#1
Tamisa10

Tamisa10

    New Member

  • Grup: Junior Members
  • Posts: 11
  • Înscris: 19.10.2018
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
pupama

pupama

    Senior Member

  • Grup: Senior Members
  • Posts: 2,555
  • Înscris: 15.05.2010
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
Webbbob

Webbbob

    Member

  • Grup: Members
  • Posts: 636
  • Înscris: 22.03.2019
fa intai baza de date (modelul de date, tabelele),  numaratoarea absentelor nu e o problema complicata

#4
spe_ripper

spe_ripper

    Senior Member

  • Grup: Senior Members
  • Posts: 3,519
  • Înscris: 04.03.2009
Sql ati invatat? Oricum accesul le cam face singur

#5
Tamisa10

Tamisa10

    New Member

  • Grup: Junior Members
  • Posts: 11
  • Înscris: 19.10.2018

View Postspe_ripper, on 10 iunie 2019 - 14:28, said:

Sql ati invatat? Oricum accesul le cam face singur
Nu

#6
george_alexandru

george_alexandru

    Mwe Austria

  • Grup: Senior Members
  • Posts: 32,145
  • Înscris: 30.08.2017
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
Tamisa10

Tamisa10

    New Member

  • Grup: Junior Members
  • Posts: 11
  • Înscris: 19.10.2018

View PostWebbbob, on 10 iunie 2019 - 14:22, said:

fa intai baza de date (modelul de date, tabelele),  numaratoarea absentelor nu e o problema complicata

Baza de date am facut-o, nu stiu cum pot numãra absentele

#8
Webbbob

Webbbob

    Member

  • Grup: Members
  • Posts: 636
  • Înscris: 22.03.2019

View PostTamisa10, on 10 iunie 2019 - 15:43, said:

Baza de date am facut-o, nu stiu cum pot număra absentele
fa un screenshot cu structura tuturor tabelelor relevante

#9
Yoda

Yoda

    Eternal padawan

  • Grup: Senior Members
  • Posts: 9,466
  • Înscris: 04.10.2002
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
Iulius-Foyas

Iulius-Foyas

    Active Member

  • Grup: Members
  • Posts: 1,361
  • Înscris: 21.04.2019

View PostTamisa10, on 10 iunie 2019 - 15:43, said:

Baza de date am facut-o, nu stiu cum pot număra absentele
Hello, daca am timp  o sa-ti fac un mic exemplu si o sa ti-l anexez, ca sa te inspiri cum se face.

View PostYoda, 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.
Eu am inteles ca vrea situatia cu absentele pt fiecare student in parte , asta inseamna  agregare-count pe gruparea student_id, curs_id,  marginita de intervalul de timp specificat.

Edited by Iulius-Foyas, 10 June 2019 - 17:35.


#11
Iulius-Foyas

Iulius-Foyas

    Active Member

  • Grup: Members
  • Posts: 1,361
  • Înscris: 21.04.2019
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.  Posted Image

Attached File  Tamisa10.zip   93.44K   7 downloads

Attached File  reazultalte_tamisa10.png   95.67K   17 downloads

Edited by Iulius-Foyas, 10 June 2019 - 22:52.


#12
Yoda

Yoda

    Eternal padawan

  • Grup: Senior Members
  • Posts: 9,466
  • Înscris: 04.10.2002
@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
Iulius-Foyas

Iulius-Foyas

    Active Member

  • Grup: Members
  • Posts: 1,361
  • Înscris: 21.04.2019

View PostYoda, 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).
Pai tabelul Prezenta are date la  nivel de zi. Primul camp reprezinta un ID unic la nivel de tabela.
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).
Pai ce am pus eu, este doar o idee despre asupra ceea ce doreste @initiatorul. Niciodata nu am considerat ca acest exemplu ar fi o parte din proiectul @initiatorului. Este doar un concept(mod de abordare). Cea mai importanta parte a acestui exemplu de fapt reprezinta interogarea absentilor.
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).
Pai asta si contine, din moment ce am mapare intre student_id si curs_id.

Edited by Iulius-Foyas, 11 June 2019 - 10:40.


#14
Yoda

Yoda

    Eternal padawan

  • Grup: Senior Members
  • Posts: 9,466
  • Înscris: 04.10.2002
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
Iulius-Foyas

Iulius-Foyas

    Active Member

  • Grup: Members
  • Posts: 1,361
  • Înscris: 21.04.2019

View PostYoda, 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?
Nu este nici o problema doarece tabela Prezenta nu este intentionat facut ca o tabela de "legatura" intre chei primare si chei straine, pe modelul clasic Primary Key-Foreign Key.
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.

View PostYoda, 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
ba da asta inseamna definitia prezentei.O mapare student_id -> curs_id reprezinta un  fact adica o prezenta, adica tabela Prezenta este un fact-table, tabele Studenti si Cursuri sunt dimesiuni adica dimension-table
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.
Aceasta este o conditie secundara ca nu intra in tabela Prezente ci intr-o alta tabela ipotetica numita OptiuniStudenti  care este un fact table doarece  optiunea unui student este un "fact'.

Oricum subiectul topicului era sa-si numere absentele, so deja discutam discutii.
Pam pam.

Edited by Iulius-Foyas, 11 June 2019 - 17:42.


#16
Yoda

Yoda

    Eternal padawan

  • Grup: Senior Members
  • Posts: 9,466
  • Înscris: 04.10.2002
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
Iulius-Foyas

Iulius-Foyas

    Active Member

  • Grup: Members
  • Posts: 1,361
  • Înscris: 21.04.2019

View PostYoda, 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,
Si atunci de ce rezolvarea a venit de la mine si nu de la tine ?

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".
Eu nu lucrez deloc in acest Access, e prima oara cand il folosesc chestia asta  si are lipsuri majore pt un profesionist adevarat.

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 : Aceste functii nu sunt specifice SQL Server ci orice RDBMS care se respecta le are.Verfica daca nu crezi.
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 :lol:

Edited by Iulius-Foyas, 11 June 2019 - 18:46.


#18
Yoda

Yoda

    Eternal padawan

  • Grup: Senior Members
  • Posts: 9,466
  • Înscris: 04.10.2002
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

Chirurgia cranio-cerebrală minim invazivă 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

0 user(s) are reading this topic

0 members, 0 guests, 0 anonymous users

Forumul Softpedia foloseste "cookies" pentru a imbunatati experienta utilizatorilor Accept
Pentru detalii si optiuni legate de cookies si datele personale, consultati Politica de utilizare cookies si Politica de confidentialitate