Visualizzazione dei risultati da 1 a 9 su 9

Discussione: Tabella particolare

  1. #1
    Utente di HTML.it L'avatar di 1sirena
    Registrato dal
    Mar 2008
    Messaggi
    163

    Tabella particolare

    Sto impazzendo..

    Vorrei fare una tabella in Access che simulasse lo scrutinio..

    A lato devono esserci l'elenco degli studenti
    In alto l'elenco delle materie
    e i voti al centro corrispondenti alla materia-studente

    non riesco ad organizzare la tabella.. sono riuscita a fare solo un report in cui mi mette prima il nome di uno studente, in seguito l'elenco delle materie per ogni studente con voto..

    Ecco un esempio un generico scrutinio

  2. #2
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,923
    Ti crei una semplice tabellina relativa agli scrutini

    id
    id_alunno
    id_materia
    voto

    1 1 1 8
    2 1 2 8
    3 1 3 8
    4 2 1 2
    5 2 2 4
    6 2 3 6


    Poi fai una query:

    codice:
    select id_alunno, 
    sum(IIf(id_materia=1,voto,0)) as italiano, 
    sum(IIf(id_materia=2,voto,0)) as latino, 
    sum(IIf(id_materia=3,voto,0)) as greco
    from scrutini
    group by id_alunno;
    Nel report non fai altro che usare tale query come origine e impostare le etichette con l'allineamento verticale. Se vuoi con la formattazione condizionale assegni ad ogni materia il colore rosso nel caso il voto sia inferiore a 6.

    Ovviamente avrai pure una tabella alunni

    id_alunno
    nome
    cognome
    .....


    e una tabella materie

    id_materia
    materia

    che potrai agevolmente mettere in join ed integrare con la query che ti ho scritto.
    P.S. La prossima volta usa un titolo meno vago e quanto meno specifica che la domanda riguarda access.

  3. #3
    Utente di HTML.it L'avatar di 1sirena
    Registrato dal
    Mar 2008
    Messaggi
    163
    Ciao.
    Ti ringrazio per la dettagliata spiegazione. sono riuscito a fare tutto, tranne:

    1. quale è la proprietà per disporre l'etichetta in verticale?

    2. La query funziona, ma solo con dati inseriti direttamente nella query... io vorrei che mi prelevasse direttamente i dati dalle tabelle del database.
    Perchè ovviamente ogni studente ha un tot di materie con rispettivi voti

  4. #4
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,923
    Per l'allineamento verticale delle etichette ti basta accedere alla scheda altro delle proprietà e impostare a sì la voce verticale.

    Per quel che riguarda la seconda domanda, la mia query è basata sulla struttura che ho ipotizzato io. Bisognerebbe sapere come hai strutturato le tabelle per essere più precisi.

  5. #5
    Utente di HTML.it L'avatar di 1sirena
    Registrato dal
    Mar 2008
    Messaggi
    163
    In pratica l'esempio che mi hai fatto è identico alle mie tre tabelle: Scrutinio, Studenti, Materie; con gli stessi campi

    Dove è il problema?
    in pratica io non so quante materie ci sono per ogni alunno, quindi nella query non posso scrivere:
    Sum(IIf(Scrutinio.IdMateria=1,voto,0)) AS Italiano
    Sum(IIf(Scrutinio.IdMateria=1,voto,0)) AS Greco
    ecc

    Poichè io ho più indirizzi nella scuola, le materie non sono sempre uguali e sempre le stesse, quindi non so quante sum dovrei scrivere ed inoltre non posso scrivere AS Italiano o AS Latino perchè appunto le materie non sono fisse

  6. #6
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,923
    Allora usa vba e genera le stringhe sql dinamicamente.

    Recuperi l'id della materia e il nome della stessa tramite una query. Cicli il recordset concatenando i vari id e le materie (per gli alias di campo) e infine esegui la query che hai generato.

  7. #7
    Utente di HTML.it L'avatar di 1sirena
    Registrato dal
    Mar 2008
    Messaggi
    163
    Allora usa vba e genera le stringhe sql dinamicamente.

    Recuperi l'id della materia e il nome della stessa tramite una query. Cicli il recordset concatenando i vari id e le materie (per gli alias di campo) e infine esegui la query che hai generato.

    mi sono ricavato l'id delle materie dello studente in un array numerico: voti(11)
    come si usa il recordset? ho visto un po nella rete, ma vedo sempre esempi con ADO.. che non uso..

    mi potresti fare un esempio di come popolare la query dinamicamente con gli id ricavati? opppure mi puoi dare qualche link con esempi?

    grazie

  8. #8
    Utente di HTML.it L'avatar di 1sirena
    Registrato dal
    Mar 2008
    Messaggi
    163
    allora.. sono riuscita a fare il report, ma incompleto.

    praticamente quando popolo il report, mi mette i voti di un solo studente... ovvero quello che seleziono da una listbox.

    per popolare il report ho utilizzato il seguente codice

    codice:
    Public Sub Report_Open(Cancel As Integer)
        Dim idmat As Integer
        Dim idcla As Integer
        Dim i As Integer
        Dim tot As Integer
        Dim mat() As Integer
        Dim vot() As Integer
    
            idcla = RicavaID.Ricava_IDclasse(Form_Scrutinio.CmbClasse.Value)
            tot = Form_Scrutinio.ElnMaterie.ListCount - 1
           
            ReDim mat(tot) As Integer
            ReDim vot(tot) As Integer
            
            For i = 1 To tot
                idmat = RicavaID.Ricava_IDmateria(Form_Scrutinio.ElnMaterie.ItemData(i))
                mat(i) = idmat
                vot(i) = Form_Scrutinio.ElnMaterie.Column(1, i)
            Next i
            
            Me.RecordSource = "SELECT Studente.Cognome, Studente.Nome, Sum(IIf(Valutazione_scrutinio.IdMateria = " & mat(1) & "," & vot(1) & ",0)) AS Ec_Aziendale, Sum(IIf(Valutazione_scrutinio.IdMateria = " & mat(2) & "," & vot(2) & ",0)) AS  Ed_Fisica, Sum(IIf(Valutazione_scrutinio.IdMateria = " & mat(3) & "," & vot(3) & ",0)) AS Francese, Sum(IIf(Valutazione_scrutinio.IdMateria = " & mat(4) & "," & vot(4) & ",0)) AS Geografia, Sum(IIf(Valutazione_scrutinio.IdMateria = " & mat(5) & "," & vot(5) & ",0)) AS Inglese, Sum(IIf(Valutazione_scrutinio.IdMateria = " & mat(6) & "," & vot(6) & ",0)) AS Italiano, Sum(IIf(Valutazione_scrutinio.IdMateria = " & mat(7) & "," & vot(7) & ",0)) AS Matematica, Sum(IIf(Valutazione_scrutinio.IdMateria = " & mat(8) & "," & vot(8) & ",0)) AS Religione, Sum(IIf(Valutazione_scrutinio.IdMateria = " & mat(9) & "," & vot(9) & ",0)) AS Storia_Arte, Sum(IIf(Valutazione_scrutinio.IdMateria = " & mat(8) & "," & vot(8) & ",0)) AS TeorieRA, " & vbLf & _
            "Sum(IIf(Valutazione_scrutinio.IdMateria = " & mat(8) & "," & vot(8) & ",0)) AS Tec_Comun FROM Studente INNER JOIN (Materia INNER JOIN Valutazione_scrutinio ON Materia.IdMateria=Valutazione_scrutinio.IdMateria) ON Studente.Matricola=Valutazione_scrutinio.Matricola GROUP BY Studente.Cognome, Studente.Nome;"
            
    End Sub
    ho utilizzato
    Me.RecordSource = "SELECT ...."

    ma non riesco a fare la WHERE dove dico che la matricola deve essere uguale agli studenti della classe a cui appartegono.


    esiste un altro comando al posto di RecordSource che mi faccia inserire i dati uno alla volta, magari con un ciclo?

    aiuto

  9. #9
    Utente di HTML.it L'avatar di 1sirena
    Registrato dal
    Mar 2008
    Messaggi
    163
    in questi giorni ho tentato di trovare una soluzione ... in realtà ci ho solo riflettuto ... ho fatto qualche modifica alla query e riesco a visualizzare gli alunni di una determinata classe, anzichè tutti, ma con dei voti arbitrari ...

    codice:
    Public Sub Report_Open(Cancel As Integer)
        Dim idmat As Integer
        Dim idcla As Integer
        Dim i As Integer
        Dim tot As Integer
        Dim mat() As Integer
        Dim vot() As Integer
    
        If Form_Scrutinio.CmbClasse = "" Or Form_Scrutinio.ElnMaterie.ListCount = 1 Then
            MsgBox "Scegliere prima una classe e uno studente", vbCritical, "Errore"
        Else
            'MsgBox "Salvare lo scrutinio come: Scrutinio - " & Me.CmbClasse.Value & " - 2009-2010", vbExclamation, "Opzione salvataggio"
           
            idcla = RicavaID.Ricava_IDclasse(Form_Scrutinio.CmbClasse.Value)
            tot = Form_Scrutinio.ElnMaterie.ListCount - 1
                   
            ReDim mat(tot) As Integer
            ReDim vot(tot) As Integer
            
            For i = 1 To tot
                idmat = RicavaID.Ricava_IDmateria(Form_Scrutinio.ElnMaterie.ItemData(i))
                mat(i) = idmat
                vot(i) = Form_Scrutinio.ElnMaterie.Column(1, i)
            Next i
            
            
            Me.RecordSource = "SELECT Studente.Cognome, Studente.Nome, Sum(IIf(Valutazione_scrutinio.IdMateria = " & mat(1) & "," & vot(1) & ",0)) AS Ec_Aziendale, Sum(IIf(Valutazione_scrutinio.IdMateria = " & mat(2) & "," & vot(2) & ",0)) AS  Ed_Fisica, Sum(IIf(Valutazione_scrutinio.IdMateria = " & mat(3) & "," & vot(3) & ",0)) AS Francese, Sum(IIf(Valutazione_scrutinio.IdMateria = " & mat(4) & "," & vot(4) & ",0)) AS Geografia, Sum(IIf(Valutazione_scrutinio.IdMateria = " & mat(5) & "," & vot(5) & ",0)) AS Inglese, Sum(IIf(Valutazione_scrutinio.IdMateria = " & mat(6) & "," & vot(6) & ",0)) AS Italiano, Sum(IIf(Valutazione_scrutinio.IdMateria = " & mat(7) & "," & vot(7) & ",0)) AS Matematica, Sum(IIf(Valutazione_scrutinio.IdMateria = " & mat(8) & "," & vot(8) & ",0)) AS Religione, Sum(IIf(Valutazione_scrutinio.IdMateria = " & mat(9) & "," & vot(9) & ",0)) AS Storia_Arte, Sum(IIf(Valutazione_scrutinio.IdMateria = " & mat(8) & "," & vot(8) & ",0)) AS TeorieRA, " & vbLf & _
            "Sum(IIf(Valutazione_scrutinio.IdMateria = " & mat(8) & "," & vot(8) & ",0)) AS Tec_Comun FROM Materia INNER JOIN ((Classe INNER JOIN Studente ON Classe.IdClasse = Studente.IdClasse) INNER JOIN Valutazione_scrutinio ON Studente.Matricola = Valutazione_scrutinio.Matricola) ON Materia.IdMateria = Valutazione_scrutinio.IdMateria WHERE Classe.idclasse = " & idcla & " GROUP BY Studente.Cognome, Studente.Nome;"
        
        End If
    End Sub

    adesso vorrei assegnare ad ogni studente i propri voti per materia, ma mi esce escono i voti solamente di uno studente selezionato...

    ecco cosa visualizzo in vba:

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.