Buongiorno a tutti

di il
18 risposte

Buongiorno a tutti

Sono un ex Tecnico informatico con piccole basi di programmazione in VBA, sto lavorando a un progetto molto ambizioso (a mio avviso) ovvero quello di creare un Archivio di Dati, immagini, Video attinenti al mondo della F1

Per cercare di testare sul campo le opzioni di questo Dbase ho scelto la strada di implelementare i dati partendo dagli ultimi Gran Premi e andando indietro nel tempo

Per cercare di dare una "struttura" alla cosa ho scelto di legare l'ID dei miei records al numero del GP, come primo riferimento

Il primo intoppo in cui sono incappato e che non riesco a superare è la creazione di una classifica dopo aver inserito un minimo di Gran Premi, per esempio:

ID Gran Premio PrimoC PuntiPrimo SecondoC PuntiSecondo TerzoC PuntiTerzo
1 Italia Senna 10 Prost 5 Mansell 1
2 Francia Prost 10 Mansell 5 Senna 1
3 Spagna Mansell 10 Prost 5 Senna 1


Tramite una Quesry (o vba, perchè temo che una quesry non basta) vorrei creae la classifica, mettendo ovviamente a scalare i piloti con il maggior punteggio, quindi

CLASSIFICA

1mo Prost 20
2do Mansell 16
3zo Senna 12

Con una query, come ho detto mi sembra inmpossibile, con vba è tutto possibile, ma qui sono ai minimi storici
Se avete anche qualche risorsa che potrebbe aiutarmi ben venga.

Grazie in anticipo, vi saluto cortesemente

Lorenzo

18 Risposte

  • Re: Buongiorno a tutti

    Con una query è difficile, ma non se cambi la struttura della tabella.
    Dovresti risolvere con una cosa tipo:
    1)IdArrivo
    2)IdGP
    3)IdPilota
    4)Posizione
    5)Punteggio

    Poi fai una somma dei punteggio raggruppata per pilota e GP. Ovviamente nella tabella GP terrai conto del campionato di riferimento, cosi con una join trovi tutti i GP di un dato campionato.

    Con una struttura di questo tipo, fai anche in fretta a calcolare la posizione media di un pilota, o altre statistiche. Cosa che sarebbe impensabile se per ogni posizione avessi una colonna...
  • Re: Buongiorno a tutti

    Non riesco a raggruppare i Piloti...
    Fa lo stesso provo ad andare avanti senza rompere troppo
    Grazie cmq della dritta
  • Re: Buongiorno a tutti

    Quella che ti ho descritto è la mia idea per la tabella in cui segnare la posizioni di arrivo per ogni GP.
    Avrai quindi:
    [Arrivi] -> La tabella in cui registrare tutti gli arrivi di tutti i piloti in tutti i GP
    1)IdArrivo -> Campo autoincrementale (Facoltativo. Torna comodo in certe circostanze)
    2)IdGP -> FK con la tabella di tutti i GP. Da qui trovi la info sul campionato a cui appartiene il GP
    3)IdPilota -> FK con la tabella piloti
    4)Posizione -> posizione di arrivo relativa al pilota e al GP
    5)Punteggio -> Punteggio ottenuto dal pilota

    Ora, con una query del tipo: [CODE] SELECT IdPilota, SUM(Punteggio) FROM Arrivi WHERE IdPilota = 1 AND IdGP IN (Select IdGP From GP WHERE IdCampionato = 1) GROUP BY IdPilota Ottieni il singolo punteggio del primo pilota nel primo campionato.
    Con le opportune Join, estrapoli le altre info che potrebbero servirti, tipo il luogo in cui si è svolto il GP, il nome del pilota e così via.

    Se parti con la struttura sbagliata, poi fatichi a tirar fuori le informazioni che ti servono.

    PS: La PK la farei multicampo su IdGP e IdPilota perché ogni pilota deve avere solo e soltanto un risultato per GP.
  • Re: Buongiorno a tutti

    Sgrubak ha scritto:


    Quella che ti ho descritto è la mia idea per la tabella in cui segnare la posizioni di arrivo per ogni GP.
    Avrai quindi:
    [Arrivi] -> La tabella in cui registrare tutti gli arrivi di tutti i piloti in tutti i GP
    1)IdArrivo -> Campo autoincrementale (Facoltativo. Torna comodo in certe circostanze)
    2)IdGP -> FK con la tabella di tutti i GP. Da qui trovi la info sul campionato a cui appartiene il GP
    3)IdPilota -> FK con la tabella piloti
    4)Posizione -> posizione di arrivo relativa al pilota e al GP
    5)Punteggio -> Punteggio ottenuto dal pilota

    Ora, con una query del tipo: [CODE] SELECT IdPilota, SUM(Punteggio) FROM Arrivi WHERE IdPilota = 1 AND IdGP IN (Select IdGP From GP WHERE IdCampionato = 1) GROUP BY IdPilota Ottieni il singolo punteggio del primo pilota nel primo campionato.
    Con le opportune Join, estrapoli le altre info che potrebbero servirti, tipo il luogo in cui si è svolto il GP, il nome del pilota e così via.

    Se parti con la struttura sbagliata, poi fatichi a tirar fuori le informazioni che ti servono.

    PS: La PK la farei multicampo su IdGP e IdPilota perché ogni pilota deve avere solo e soltanto un risultato per GP.
    Ci sono riuscito, un pò diverso da come mi hai spiegato tu ma è funzionale, il tutto è nato mentre facevo la pennichella quotidiana

    Ora tocca alla classifica COSTRUTTORI che nasce dall'unione dei punteggi dei due piloti.

    GRAZIE 1000
  • Re: Buongiorno a tutti

    Nessun bagno di sangue, se prevedi correttamente le FK. Ogni pilota correrà con un'auto afferente ad una casa costruttrice. Quindi con il JOIN tiri fuori la casa, e poi richiami la SUM raggruppando sulla casa.
    Ovviamente dovrai prevedere con attenzione come registrare quale pilota ha corso con quale casa. Potrebbe forse bastarti un una tabella [CostruttoriPiloti] dove, oltre alle FK verso Piloti e Costruttori, predisponi anche due campi data. Così sai da quando a quando qualcuno ha corso in quella casa e da li prendi solo i GP che ti interessano e che rientrano in quelle date.
  • Re: Buongiorno a tutti

    Sgrubak ha scritto:


    Nessun bagno di sangue, se prevedi correttamente le FK. Ogni pilota correrà con un'auto afferente ad una casa costruttrice. Quindi con il JOIN tiri fuori la casa, e poi richiami la SUM raggruppando sulla casa.
    Ovviamente dovrai prevedere con attenzione come registrare quale pilota ha corso con quale casa. Potrebbe forse bastarti un una tabella [CostruttoriPiloti] dove, oltre alle FK verso Piloti e Costruttori, predisponi anche due campi data. Così sai da quando a quando qualcuno ha corso in quella casa e da li prendi solo i GP che ti interessano e che rientrano in quelle date.
    si esatto, bastava inserire un campo apposito nella tabella ARRIVI con il nome della SCUDERIA (le scuderie sono raccolte a parte) e gestirle con un numero, come ho fatto coni Piloti.

    Adesso devo pensare a una maschera funzionale per l'inserimento dei dati, perchè a mano li ho messi in una tabella usando nPilota e nSCuderia, ma per ora è tutto sotto controllo, ti ringrazio ancora, se ho bisogno magari ti interpello qui?
  • Re: Buongiorno a tutti

    Apri una discussione apposta nel caso ti servisse aiuto con le maschere. Mi raccomando al titolo! Leggi bene il regolamento, che ti da due spunti.
    Di sicuro qualcuno che ti aiuta lo trovi.
  • Re: Buongiorno a tutti

    Posso da una casella di Riepilogo, scegliere il TESTO (nome del Pilota) ma far restituire in tabella il NUMERO corrispondente?

    Penso di si...

    EDIT

    Saprei come farlo ma non saprei come implementarlo, perchè qui esco dalle mie conoscenze...

    In termini pratici in VBA aprirei la tabella che contiene i dati dei Piloti, tramite il Nome Pilota mi vado a cercare il suo nPilota e lo scrivo nella casella appropiata, stesso discorso per la Scuderia, poi metto Posizione e Punteggi in manuale

    Fine dei giochi, ma non essendo competente... la vedo dura, disse la punta al trapano...
  • Re: Buongiorno a tutti

    Sgrubak ha scritto:


    Apri una discussione apposta nel caso ti servisse aiuto con le maschere. Mi raccomando al titolo! Leggi bene il regolamento, che ti da due spunti.
    Di sicuro qualcuno che ti aiuta lo trovi.
    a me servirebbe più che altro un po di lezioni di vba, perchè diversamente sarei sempre qui a chiedere aiuto

    se non lezioni, risorse da studiare...
  • Re: Buongiorno a tutti

    Per quello, esistono i libri. I forum possono aiutarti ad arrivare alla soluzione di codice che non funziona come ti aspetti, ma non dare lezioni.
  • Re: Buongiorno a tutti

    Lorenz71 ha scritto:


    Posso da una casella di Riepilogo, scegliere il TESTO (nome del Pilota) ma far restituire in tabella il NUMERO corrispondente?...
    Come dicevo, apri un'altra discussione.
    1) Pensa al titolo della discussione;
    2) googla il titolo;
    3)se non trovi niente, apri la discussione
  • Re: Buongiorno a tutti

    Sgrubak ha scritto:


    Lorenz71 ha scritto:


    Posso da una casella di Riepilogo, scegliere il TESTO (nome del Pilota) ma far restituire in tabella il NUMERO corrispondente?...
    Come dicevo, apri un'altra discussione.
    1) Pensa al titolo della discussione;
    2) googla il titolo;
    3)se non trovi niente, apri la discussione
    ho risolto

    Però ho notato che i Filtri che raggruppano e sommano i valori spesso danno risultati sbagliati, devo capire il perchè...

    Per il resto, il tuo suggerimento x la tabella Arrivi è stato uno svoltone
  • Re: Buongiorno a tutti

    Lieto di esserti stato utile!
  • Re: Buongiorno a tutti

    Non capisco:

    Ho fatto una query per visualizzare i piloti che hanno raggiunto i primi 3 posti nelle loro gare effettuare e ho messo i risultati dentro la maschera dei piloti, filtrandone il nome (in base alla maschera) se attivo la query da fuori funziona bene, ma dentro la maschera NO, anche se refresho la query non ottengo nessun risultato...
Devi accedere o registrarti per scrivere nel forum
18 risposte