Domanda per Database Access

di
Anonimizzato10809
il
20 risposte

Domanda per Database Access

Ciao a tutti, ahimè vado un po' di fretta perché sono sul posto di lavoro ma volevo esporvi rapidamente il mio problema: ho creato un db di access, all'interno del quale ho inserito una maschera e tre tabelle, chiamate rispettivamente 'ORARI','PUNTI VENDITA' e 'SETTIMANE'. La maschera é così strutturata:

e, all'interno delle prime tre caselle combinate, si vanno a inserire il numero settimana, il primo e l'ultimo giorno. Sotto, si vanno a inserire sempre tramite casella combinata gli orari di entrata e uscita contrassegnati dal diverso colore. Premetto che ogni campo e ogni dato delle tabelle vengono inserite da me, e poi chi usa la maschera deve solo avere la necessità di scegliere tra le opzioni da me messe a disposizione e poi inviarmi il file finale. Il problema è questo: essendo tutti i dati già inseriti e non essendo propriamente questa una maschera di immissione dati, non so come fare in modo che vengano salvate le loro scelte, in quanto una volta chiuso il programma i campi si resettano.

Grazie a chi mi darà una risposta e scusate per la fretta ^^

20 Risposte

  • Re: Domanda per Database Access

    Ciao Matteo come sono strutturate le tabelle, hai previsto un campo utente? penso che cosi' riesci a risolvere
  • Re: Domanda per Database Access

    Cosa intendi per campo utente?
  • Re: Domanda per Database Access

    Buona giornata, Matteo;
    solo una domanda, come è strutturata la tabella con tutti i dati già inseriti?

    Personalmente sarei partito con una nuova Tabella, che possiamo chiamare "Riepilogo", con i campi:
    [Settimana], [Dal], [Al], [Punto vendita], [Lunedì entrata], [Lunedì uscita], ..., [Sabato entrata], [Sabato uscita]
    e tutti gli ulteriori campi che hai necessità di impiegare.

    Nella Tabella "Settimane" avrei previsto i campi [Settimana], [Dal], [Al]

    La struttura della maschera che hai costruito, la lascerei tale e quale ma, chiaramente, ricavata dalla Tabella "Riepilogo" aggiungendo quindi il campo [Punto vendita].

    Tramite una query di accodamento, raggrupperei tutti i dati resi dai vari Punti vendita.

    Buona giornata e buon lavoro.
  • Re: Domanda per Database Access

    Dunque, le tabelle sono strutturate in questa maniera:

    SETTIMANE:

    SETTIMANA PRIMO ULTIMO
    1 02/01/2012 08/01/2012
    2 09/01/2012 15/01/2012
    3 16/01/2012 22/01/2012
    4 23/01/2012 29/01/2012
    ecc.

    ORARI:

    ORARI
    07.00
    07.15
    07.30
    07.45
    08.00
    ecc.

    PUNTI VENDITA:

    COD.PDV PDV
    ****** 'PUNTO VENDITA 1'
    ****** 'PUNTO VENDITA 2'
    ecc.

    Il mio problema è: dove nell'immagine precedente vedi 'Settimana *CASELLA*' 'Dal *CASELLA*' 'Al *CASELLA*', e anche negli altri campi con la selezione multipla, se io scelgo una tra le opzioni le visualizza in quel momento, ma poi sia che io salvi o meno la maschera, alla chiusura del programma le scelte vanno perse e alla riapertura i campi sono nuovamente vuoti, invece capisci bene che se devo avere un ritorno di un determinato orario ho bisogno che quei dati scelti restino. Solo che non riesco a trovare un modo per salvarli, perchè so bene che se avessi un inputbox tramite il quale aggiungo il record e viene visualizzato nella maschera tramite VB esso resta, ma io ho solo necessità che le scelte possibili siano date da me e rimangano salvate sulla maschera cosicchè io possa vederle.

    Spero di essere stato più chiaro/esauriente/qualsiasialtracosa
  • Re: Domanda per Database Access

    Allora? Non c'è nessuno che sappia come fare?
  • Re: Domanda per Database Access

    Quando ti è stato chiesto "come sono strutturate le tue tabelle" gli utenti vorrebbero sapere se tali tabelle sono collegate con relazioni, se sì quali e attraverso quali campi. Tutto questo è la logica base di Access.
    Va anche detto però che tu potresti digitare soltanto alcuni campi, gli altri dovrebbero generarsi automaticamente in base a calcoli preimpostati: ad esempio quando digiti il giorno DAL, è più opportuno che una query calcoli automaticamente il giorno AL.
  • Re: Domanda per Database Access

    Non ho per ora inserito alcun tipo di relazione perchè mi manca ancora da creare una tabella, e stavo aspettando a inserirla proprio per questo problema della perdita di dati. Per quel che riguarda i campi calcolati ho preferito inserire semplicemente per 'settimana', 'dal' e 'al' un codice vb, un ciclo che ripete una condizione se, basata su 52 numeri (da 1 a 52) a cui ciascun numero corrisponde a una settimana :

    For i = 1 To n
    If Me.settimana = 1 Then
    Me.dal = "02/01/2012"
    Me.al = "08/01/2012"
    End If
    If Me.settimana = 2 Then
    Me.dal = "09/01/2012"
    Me.al = "15/01/2012"
    End If
    ...
    End Sub

    E l'ho messo after update, di modo che quando sposto il cursore si aggiornino i campi Dal e Al. Vi allego ancora un'immagine per farvi vedere, e se vedete quei campi di casella combinata e tutti gli altri sono quelli che devono essere salvati, cosa che non so come fare e per cui chiedo una mano. Dunque il mio problema è sempre come salvare in maschera questi elementi, di modo che quando mi viene inviato il programma non si tolgano le informazioni, altrimenti non serve a nulla.

  • Re: Domanda per Database Access

    Continuo a non capire molte cose, ma quando parli di campi calcolati nella maschera e poi questi campi non esistono su nessuna tabella o query, mi sembra ovvio che poi spariscano.
    Io memorizzerei tutto il risultato di quella routine che hai costruito in una tabella (o query?, ad ogni modo un oggetto concretamente foglio dati) e poi far poggiare i tuoi campi maschera Settimana, Dal, Al di conseguenza.
    Ad ogni modo, non si capisce come tu possa pretendere che su UNA maschera convivano più tabelle, per giunta senza relazionarle.
  • Re: Domanda per Database Access

    I campi esistono, perchè ho già detto che ho creato delle tabelle e questi valori sono già inseriti all'interno delle tabelle. Non sono calcolati sulla maschera perchè l'unica cosa calcolata è la data ma tramite visual basic, tutto il resto dei valori nelle tabelle sono scritti direttamente nelle tabelle, in quanto chi usa il programma non deve effettuare un vero e proprio input, ma solo una scelta tra cosa è visualizzato nell'immagine precedente. L'unico input è quel "SETTIMANA" e "ANNO" all'inizio, in quanto inserendo numero e anno lì cambiano le date in Dal/Al. Le relazioni tra tabelle, se non sbaglio, servono per individuare e aggiornare campi con lo stesso valore e io su queste tabelle non ne ho di campi con valori uguali per il momento, quindi non ho creato relazioni.
  • Re: Domanda per Database Access

    Matte0710 ha scritto:


    questi valori sono già inseriti all'interno delle tabelle
    OK, ero io che avevo frainteso.

    Matte0710 ha scritto:


    Le relazioni tra tabelle, se non sbaglio, servono per individuare e aggiornare campi con lo stesso valore e io su queste tabelle non ne ho di campi con valori uguali per il momento, quindi non ho creato relazioni.
    Se crei una maschera su una tabella sola, sei libero e spensierato. Quando vuoi mettere più tabelle in visualizzazione maschera, queste devono essere per forza relazionate.
    Le relazioni avvengono attraverso campi "chiave primaria" e "chiave esterna". Questi campi all'utente in quanto tale, non servono molto, ma diventano indispensabili per correlare 2 tabelle e farle funzionare in sincronia (non per individuare e aggiornare campi con lo stesso valore). Fra le tue tabelle non ci sono campi chiave di riferimento, ecco perchè io e gli altri utenti abbiamo insistito perchè tu ce li esponessi per capire come avrebbero dovuto funzionare. La creazione di campi chiave nasce soprattutto dalla necessità di capire il problema dal mentale-utente in tecnico-tabellare. Quello che non ci hai mai descritto è lo scenario e a che cosa servono le tue tabelle, poi vediamo come aggiungere campi chiave, poi relazioniamo.
  • Re: Domanda per Database Access

    Le tabelle sono: ORARI, PUNTI VENDITA e DIPENDENTI.

    In Orari ci sono due campi: Entrata e Uscita, all'interno del quale ci sono le ore inserite già da me, e sono i valori a cui fanno riferimento le caselle combinate della maschera.

    In Punti Vendita ci sono tre campi: Unità Locale, che contiene numeri da 1 a 18 ed è chiave primaria, poi c'è Codice PV e Punti Vendita all'interno del quale vi sono il codice formato da sei caratteri e il nome del punto vendita.

    In Dipendenti, che è la tabella che ho appena creato ci sono cinque campi: Codice Dipendente, Punti Vendita, ossia il punto vendita in cui lavora, Unità locale, che ho relazionato con l'altra tabella e che contiene gli stessi valori, e poi Nome e Cognome.
  • Re: Domanda per Database Access

    Proviamo ad avvicinarci.

    1) Sicuro: La tabella PuntiVendita ha 3 campi che sostanzialmente dicono la stessa cosa, cioè sono tutti Univoci, poco male, ho capito che preferisci porre come chiave primaria un Contatore che, se non sbaglio, è UnitàLocale. Però nella tabella Dipendenti (relazionata) tu mi fai figurare due volte la stessa cosa che può essere rappresentata una volta sola: metti il caso che digiti per errore un PuntoVendita diverso da UnitàLocale, non ti ritrovi più. Per me sta bene lasciare UnitàLocale (eliminando il campo PuntoVendita), magari gli metti una casella combinata che ti torna utile per vedere in tempo reale l'equivalente PuntoVendita.
    In conclusione per me la relazione è
    PuntiVendita.UnitàLocale uno-a-molti con Dipendenti.UnitàLocale

    2) Non so: Le tabelle che parlano di Settimane, Date e Ore, penso che potrebbero essere tutte accorpate in una sola tabella, però vedo anche che tu preferisci scandire il tempo Settimana dopo Settimana. Qui mi sto perdendo, soprattutto mentre guardo l'ultima figura che hai postato. Mi viene di ragionare così...
    Settimana uno-a-molti con Date
    Date uno-a-molti con Ore
    ...ma mentre cerco di ragionarci su, mi vedo pure una tabella EntrateUscite con i seguenti campi:
    IDEU: Contatore (chiave primaria)
    GiornoOra: Data/Ora
    E/U: Testo (sarebbe Entrata/Uscita)
    IDDipendente: Numerico

    1 | Lunedì 2/7/2012,ore 08:00 | Entrata | Tizio
    2 | Lunedì 2/7/2012,ore 08:00 | Entrata | Caio
    3 | Lunedì 2/7/2012,ore 12:00 | Uscita | Tizio
    4 | Lunedì 2/7/2012,ore 16:00 | Entrata | Tizio
    5 |

    Se questa tabella che mi sono inventato io ha un senso per te, allora bisogna considerare la relazione
    Dipendenti.IDDipendente uno-a-molti con EntrateUscite.IDDipendente

    Riepilogando il mio punto di vista:
    PuntiVendita uno-a-molti con Dipendenti, attraverso il campo UnitàLocale
    Dipendenti uno-a-molti con EntrateUscite, attraverso il campo IDDipendente

    Non so, al momento ho colto questo scenario che non c'entra nulla con la figura che tu hai mostrato.
    Pensi che ci sia qualcosa di sbagliato anche nel mio ragionamento?
  • Re: Domanda per Database Access

    1: C'è già la casella combinata, apposta perchè così non si possa inserire qualcosa di errato: infatti punti vendita ha tutti i punti vendita predefiniti e ci va solo la scelta.

    2: Non ho una tabella che parla di Settimane, Date o Ore. Le settimane sono nel codice di vb, è una routine evento impostata a dopo aggiornamento che verifica tramite due cicli uno for e uno if, che dentro al campo settimana venga immesso un valore tra 1 e 52 e in caso aggiorni i campi testo Dal/Al inserendo la data predefinita in codice.

    Il problema mio però non è l'organizzazione delle tabelle e la loro relazione, non so come farvelo capire.. faccio lo schemino, magari è più chiaro.

    Desktop --> Click su "DBACCESS.accdb" --> Si apre la maschera grazie alla macro AUTOEXEC. --> Inserisco il numero settimana, l'anno, si aggiornano i campi dal/al automaticamente e mi esce la settimana, clicco sulla selezione multipla di Punti Vendita e si apre la tendina, seleziono un qualunque punto vendita --> INVIO, seleziono un qualunque dipendente dall'altra tendina "dipendenti" --> INVIO, tramite le caselle combinate entrata uscita seleziono l'orario.

    A QUESTO PUNTO, mi serve che le informazioni scritte lì, rimangano Lì, di modo che quando mi ridanno il programma, io lo apro e leggo i loro orari. INVECE, se chiudo il db, quando lo riapro si resettano tutti i campi.
  • Re: Domanda per Database Access

    Matte0710 ha scritto:


    Il problema mio però non è l'organizzazione delle tabelle e la loro relazione
    Il mio discorso non è certamente finito lì. Sto cercando soltanto di capire passo passo come sono strutturate le tue tabelle. Le tabelle sono la cosa più importante in Access in quanto contengono i dati, tutti gli altri oggetti si poggiano direttamente o indirettamente su di esse per guardarle, modificarle ecc........

    Matte0710 ha scritto:


    Desktop --> Click su "DBACCESS.accdb" --> Si apre la maschera grazie alla macro AUTOEXEC. --> Inserisco il numero settimana, l'anno, si aggiornano i campi dal/al automaticamente e mi esce la settimana, clicco sulla selezione multipla di Punti Vendita e si apre la tendina, seleziono un qualunque punto vendita --> INVIO, seleziono un qualunque dipendente dall'altra tendina "dipendenti" --> INVIO, tramite le caselle combinate entrata uscita seleziono l'orario.

    A QUESTO PUNTO, mi serve che le informazioni scritte lì, rimangano Lì, di modo che quando mi ridanno il programma, io lo apro e leggo i loro orari. INVECE, se chiudo il db, quando lo riapro si resettano tutti i campi.
    Ti sei mai chiesto dove vanno a finire i dati che digiti la prima volta e che poi la 2a volta non vedi più? Prova, dopo la digitazione nei campi, a ridurre a icona la maschera, aprire momentaneamente le tabelle che dovrebbero contenere quei valori e verifica che ci siano.
    Per me quei campi di maschera non poggiano da nessuna parte e da nessuna parte vanno a finire.
    Morale: la maschera non funziona, non guarda nei campi giusti.
    Io sto cercando di ricostruire un minimo di logica alla base prima, per poi strutturare una maschera che sarà molto diversa da quella che hai disegnato tu, che vedrà i dati digitati prima, dopo e sempre.
Devi accedere o registrarti per scrivere nel forum
20 risposte