Maschera inserimento dati tramite range di date

di il
4 risposte

Maschera inserimento dati tramite range di date

Buongiorno a tutti,

dopo aver fatto un po' ricerche e tentativi su questo e altri forum e diversi tentativi con VBA mi trovo a dover chiedere aiuto perché non riesco a venire a capo del mio problema. Vorrei creare una maschera di inserimento tramite la quale vengano, in base a un intervallo di date, generati dei record in una tabella. In questa tabella deve essere generato un record per ogni giorno compreso nell'intervallo. Per intenderci vi mostro come dovrebbero essere strutturate la maschera la tabella con un esempio:

- MASCHERA

Nome  dipedente  // Causale  // data di inizio // data fine // Quantità

Mario Rossi          // Permesso // 01/01/2023 // 03/01/2023 //  3

i dati inseriti in questa maschera dovrebbero generare i seguenti record nella tabella:

- TABELLA

Nome dipendente // Causale //       Data         //  Quantità

    Mario Rossi       // Permesso // 01/01/2023 //     3

    Mario Rossi       // Permesso // 02/01/2023 //     3

    Mario Rossi       // Permesso // 03/01/2023 //     3    

Ho provato a creare il ciclo for prendendo spunto da un po' di codici trovati per la rete ma non riesco a farlo funzionare in alcun modo. Spero possiate aiutarmi e vi ringrazio già molto per dedicarmi del tempo.

4 Risposte

  • Re: Maschera inserimento dati tramite range di date

    Perché devi generare Dati preventivi e non consuntivi…?

    Siccome fare questa cosa è banale, sarebbe da capire cosa hai fatto, che errore da ecc…

  • Re: Maschera inserimento dati tramite range di date

    Ciao Alex,

    Ti ringrazio per la risposta, sei stato velocissimo! Ti chiedo intanto cosa intendi con dati preventivi/consuntivi? Questa maschera ha lo scopo di far inserire ad un operatore del reparto HR i giorni/ore di permesso, ferie ecc. dei dipendenti. Per una questione di organizzazione aziendale questo dato può essere inserito solo ed esclusivamente da questo operatore che ha accesso al database. 

    La maschere che ho creato, di cui ti mando uno screen, è stata creata a partire da un'altra tabella chiamata “Inserimento Ferie - permessi - malattia” strutturata coi coi campi 

    - Nome  dipedente  // Causale  // data di inizio // data fine // Quantità. 

    Nella maschera ho inserito un bottone che attiva il codice VBA che dovrebbe permettere di generare i record nella tabella di destinazione  denominata "Ferie - permessi - malattia”, dove ci sono i campi

    - Nome  dipedente  // Causale  // data // Quantità. 

    Ho provato a riadattare alcuni codici che ho trovato in giro tra cui anche in questo forum ma non riesco a fare in modo che i dati vengano registrati nella tabella, l'ultimo che ho provato è questo nella speranza che scrivesse almeno i dati:

    Private Sub Comando13_Click()

    If MsgBox("Inizio a scrivere ?", vbInformation + vbOKCancel, "avviso") = vbOK Then
       CurrentDb.Execute "Create table T_Ferie_permessi_malattia (" & _
                     "Data AUTOINCREMENT constraint pk_Data primary key, " & _
                     "Autista text(255), " & _
                     "Data date, " & _
                     "Causale text(255)" & _
                     "Quantità (Giorni/ore) Int)", dbFailOnError

       Dim i As Date
       For i = "Data di inizio" To "Data di fine"
           CurrentDb.Execute "insert into T_Ferie_permessi_malattia (Autista,Causale,Data,Quantità(Giorni/ore)) values ('" & Me.Autista & "',#" & Me.Causale & "#," & i & ")", dbFailOnError
       Next
       MsgBox "fatto.", vbInformation, "Avviso"
       Application.RefreshDatabaseWindow
    End If


       End Sub

    Purtroppo mi dice che la sintassi è errata nella parte “create table” e per quanto abbia provato a sistemarla non riesco a risolvere questo errore, inoltre immagino che questo script non riempirà la cella con l'incremento date nella tabella di destinazione e non riesco a trovare soluzioni anche a questo problema. Purtroppo come potrai immaginare non sono un programmatore, riesco a capire qualcosina del codice ma più che assemblare pezzi messi in rete da chi è capace non ho molte capacità ahimè, però cerco di impegnarmi per capire almeno quello che faccio :-)

    Ti ringrazio ancora 

  • Re: Maschera inserimento dati tramite range di date

    Scusa ma perchè CREI una tabella…?

    Ho il sospetto che ci sia qualche cosa di sbagliato nella struttura che stai pensando, se vuoi darci una visione delle Tabelle e delle Relazioni spiegando cosa devi fare magari ti aiutiamo, questo perchè operi in un modo non tecnicamente convenzionale tipico di chi non sa tecnicamente come si lavora con un Database.

    Se la Tabella è strutturale del DB, non ha senso crearla da codice, anzi è sempre una cosa da evitare, la si crea in fase di tstrutturazione del DB e poi la si usa per inserie o per fare Queries…!

    Il fatto tu abbia pensato di creare una Tabella tutte le volte mi lascia perplesso… meglio fermarsi a riflettere su cosa stai facento, perchè Access non è EXCEL e si usa in modo differente, se sbagli l'impostazione poi non va da nessuna parte, e temo sia questo il caso.

    Il ciclo successivo di inserimento dei Records… anche questo in realtà potrebbe non avere senso… le date si inseriscono in modo diverso, se uno prende Ferie da 01MAG2023 

    poi è completamente pieno di errori, sono più gli errori del codice che hai scritto.

    For i = "Data di inizio" To "Data di fine"
           CurrentDb.Execute "insert into T_Ferie_permessi_malattia (Autista,Causale,Data,Quantità(Giorni/ore)) values ('" & Me.Autista & "',#" & Me.Causale & "#," & i & ")", dbFailOnError
    Next

    Ti riassumo alcune considerazioni che sono di metodo, perchè mi pare manchino le basi che devi costruirti prima di buttare giù codice.

    “T_Ferie_permessi_malattia”, usa nomi semplificati… hai una logica sbagliata di base nel dare in nomi… e se non capisci il perchè di questa mia osservazione la cosa è grave, e lo dimostra questo:

    Quantità(Giorni/ore)

    Un campo non si può chiamare in quel modo…

    Non hai ben chiara la differenza tra cosa sia una Variabile e cosa una stringa…, questo ad esempio:

    For i = "Data di inizio" To "Data di fine"

    Corrisponde a fare un ciclo da Pippo a Pluto… quelle sono 2 stringhe… non 2 date…!

    Senza la sensibilità tecnica “MINIMALE”, io francamente penso ci siano difficoltà oggettive…

  • Re: Maschera inserimento dati tramite range di date

    Ciao Alex,

    comprendo bene le tue osservazioni e con onestà credo tu abbia ragione, è probabile che il mio errore sia proprio concettuale, senza dire del codice su cui sorvolo per amor proprio. Purtroppo vengo da tutt'altro background sia di studi che lavorativo ed è da poco che sto lavorando su access cercando di formarmi nel poco tempo che la parte operativa del lavoro mi concede. Farò tesoro delle tue considerazioni e cercherò farmi delle basi più solide. Se riuscirò a ottenere il modo di costruire quello che ho in mente in questo thread sarà mia cura aggiornare. Ti ringrazio comunque per la pazienza, il tempo e le risposte che mi hai dato

Devi accedere o registrarti per scrivere nel forum
4 risposte