Popolare una tabella Access

Anonimo
2017-09-08T11:10:57+00:00

Ho una tabella Pippo con una campo DTREG. Poniamo che ci siano 2 record: 01/09/2017 e 04/09/2017

Ho bisogno di popolare un'altra tabella di nome Caio, che scriva nel campo GIORNO i giorni dal 01/09/2017 a oggi e successivamente dal 04/09/2017 a oggi. Praticamente 13 records. Come va scritta la routine?

Grazie, Francesco

Microsoft 365 e Office | Access | Per la casa | Windows

Domanda bloccata. Questa domanda è stata eseguita dalla community del supporto tecnico Microsoft. È possibile votare se è utile, ma non è possibile aggiungere commenti o risposte o seguire la domanda.

0 commenti Nessun commento

13 risposte

Ordina per: Più utili
  1. Anonimo
    2017-09-08T12:06:58+00:00

    ciao Francesco,

    una soluzione generica potrebbe essere creare una sub che accetta un parametro data, e con un loop inserisci le righe interessate nella tabella.

    Trattandosi di inserimenti multipli, avvolgerei il tutto in una transazione, qualora l'intervallo date fosse molto ampio, la differenza si nota.

    dTfrom rappresenta la data da passare, tuaTabella la tabella in cui devi inserire le righe, tuoCampo il campo che registra la data.

    Ciao, Sandro.

    Public Sub fillIt(ByVal dtFRom As Date)

    On Error GoTo errHandler

    Dim i       As Long

    Dim lngDiff As Long

    Dim boolT   As Boolean

    lngDiff = VBA.Date - dtFRom

    DBEngine(0).BeginTrans

        boolT = True

        For i = 0 To lngDiff

           DBEngine(0)(0).Execute "insert into tuaTabella(TuoCampoData) values (" & CLng(dtFRom + i) & ")", &H80

        Next

    DBEngine(0).CommitTrans 1

    boolT = False

    exit_errHandler:

        Exit Sub

    errHandler:

        If boolT Then

            DBEngine(0).Rollback

        End If

         With Err

                MsgBox "ERR#" & CStr(.Number) _

                        & vbNewLine & .Description _

                        , vbOKOnly Or vbCritical

                End With

                Resume exit_errHandler

    End Sub

    La risposta è stata utile?

    2 persone hanno trovato utile questa risposta.
    0 commenti Nessun commento
  2. Anonimo
    2017-09-09T08:15:43+00:00

    Non dubito che funzioni, il fatto è che non ci capisco un'acca, e se voglio riutilizzare parte del codice per qualcos'altro non saprei che farmene, o se dovessi manutenzionare il codice non saprei da dove cominciare...

    1. Per dirti, non so nemmeno come fare per trasformare la Public Sub 

    Public Sub fillIt(ByVal dtFRom As Date)

    in una Private Sub

    Private Sub Genera_Click()

    Se scrivo Private Sub Genera_Click(ByVal dtFRom As Date) non me lo accetta

    1. Dopo, non capisco come vai a prendere il campo DTREG dalla tabella Pippo (01/09/2017 e 04/09/2017)

    3)Poi non capisco la riga

    DBEngine(0).BeginTrans

    Insomma, son tante lacune da colmare, e forse un codice più terra terra andrebbe meglio...

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2017-09-08T20:27:33+00:00

    ciao Francesco,

    da me la mia routine restituisce questo risultato :

    anche con A03 :

    Prova a testarla e a studiarla, dopo di che se qualcosa non ti è chiaro provo a spiegartela.

    ciao, Sandro.

    La risposta è stata utile?

    0 commenti Nessun commento
  4. Anonimo
    2017-09-08T19:43:56+00:00

    Mamma mia! Grazie ragazzi, ma non si potrebbe risolvere con una routine più semplice, di quelle che capiscono anche i comuni mortali, del tipo:

    Set RS = CurrentDb.OpenRecordset("SELECT DTREG  FROM Pippo")

    While Not RS.EOF

        CurrentDb.Execute "UPDATE Caio SET Giorno=" & RS(0) & ""

        RS.MoveNext

    Wend

    Qui però scrive solo le due date. Bisognerebbe farle scrivere tutte e 13...

    La risposta è stata utile?

    0 commenti Nessun commento
  5. Anonimo
    2017-09-08T11:27:58+00:00

    Ciao Francesco,

    forse puoi realizzare il tutto con una query.

    Mettiamo che il numero massimo di giorni da generare per ciascun record sia 30. Crea una tabella tblW di lavoro con trenta records con un campo Prg che riporti il progressivo da 1 a 30.

    In grandi linee (vedremo di gestire data a cavallo del mese):

    crea una query con la tabella Pippo e la tabella tblW senza relazioni tra loro. Seleziona da Pippo DTRG e poni come condizioni su tblW.Prg >= Day(DTRG) And <=Day(Date())

    Ciao Mimmo

    La risposta è stata utile?

    0 commenti Nessun commento