Newsgroup: it.comp.appl.access
Titolo: creazione tabella

Ciao a tutti,
ho un problema, ho una tabella di questo tipo:
Arr            Part          Nome     Altro
01/03/04       03/03/04      Pippo    Vip
04//03/04      08/03/04      Paperino 1
vorrei ottenere una tabella così strutturata:
Permannenza     Nome         Altro
01/03/04        Pippo        Vip
02/03/04        Pippo        Vip
03/03/04
04/03/04        Paperino     1
05/03/04        Paperino     1
06/03/04        Paperino     1
ecc.
Come posso fare? devo dire che ci sono riuscito ma con dei sistemi da 
fuori di testa (o meglio da ignorante), qualcuno può indicarmi un 
metodo logico ed "elegante"?
grazie
Giuseppe
Inviato da 
www.mynewsgate.net

 ha scritto:

Puoi fare così:
Dim TabOr As Recordset, TabDest As Recordset, dataIns As Date
  Set TabOr = CurrentDb.OpenRecordset("Tabella1")'*** tabella iniziale
  Set TabDest = CurrentDb.OpenRecordset("Tabella2") '*** tabella finale
    Do While TabOr.EOF = False
      dataIns = TabOr!Arr
      Do While dataIns <= TabOr!Part
        TabDest.AddNew
        TabDest!Permanenza = dataIns
        TabDest!Nome = TabOr!Nome
        TabDest!Altro = TabOr!Altro
        TabDest.Update
        dataIns = DateAdd("d", 1, dataIns)
      Loop
      TabOr.MoveNext
    Loop
  TabDest.Close
  TabOr.Close
 
Scrivi un oggetto meno generico la prossima volta, sennò nessuno ti risp
Ciauz
--
'gnurant come una cucuzza
Inviato da 
www.mynewsgate.net

 ha scritto:

Intanto Grazie,
mi dà un messaggio di errore di questo tipo:
Errore di Run-time 3265
Elemento non trovato in questo insieme
è riferito all'istruzione:
TabDest!Permanenza = dataIns
Dove Sbaglio?
La tabella2 (che si chiama Booking) è vuota.
Grazie ancora
Giuseppe
Inviato da 
www.mynewsgate.net

Scusa dico e faccio stupidate.
Và benissimo
Giuseppe
Inviato da 
www.mynewsgate.net


Stavolta il problema l'ho davvero:
La data "part" non dovrebbe essere elencata perchè non cosiderata di 
occupazione, inoltre nella tabella di destinazione la successione delle 
date dovrebbe essere continua, a costo di tenete i campi "nome" 
e "altro" 
vuoti al fine di evidenziarne la diponibilità.
Il tutto mi serve come origine di una query a campi incrociati che mi 
alimenta una maschera che rappresenta un Booking.
Ciao
Grazie
Inviato da 
www.mynewsgate.net

 
Per ciò che riguarda data part ti basta mettere 
  Do While dataIns < TabOr!Part
anziché 
  Do While dataIns <= TabOr!Part
Per l'ordine nella tabella di Booking, o applichi un algoritmo di ordinamento,
come il quicksort, oppure apri la tabella in modalità visualizzazione,
clicchi sulla colonna della data e la ordini(clicchi sul bottone A-Z)


 ha scritto:

Scusa, mi sono espresso male;
l'ordinamento della tabella non è un problema anche perchè poi passo il tutto 
ad una query a campi incrociati, il mio problema invece è di non saltare 
nessuna data anche se non occupata per esempio:
Tabella1:
01/01/04   03/01/04     Pippo
05/01/04   07/01/04     Paperino
La tabella booking dovrebbe essere così:
01/01/04   Pippo
02/01/04   Pippo
03/01/04
04/01/04
05/01/04   Paperino
06/01/04   Paperino
dove le date 03/01/04 e 04/01/04 anche se non di occupazione sono comunque in 
elenco con gli altri campi vuoti.
Grazie ancora.
Giuseppe
Inviato da 
www.mynewsgate.net

 
Al blocco dell'altra volta sostituisci interamente questo.
Nota bene..il calcolo lo fa solo per il mese corrente. Se invece dovesse 
servirti un calcolo sull'anno corrente allora sostituisci ciò che ho messo come 
commento...
Funzionerà :o)
Ciauz
Dim TabOr As Recordset, TabDest As Recordset, dataIns As Date
  Set TabOr = CurrentDb.OpenRecordset("Tabella1") '*** tabella iniziale
  Set TabDest = CurrentDb.OpenRecordset("Tabella2", dbOpenDynaset) '*** tabella 
finale
    Do While TabOr.EOF = False
      dataIns = TabOr!Arr
      Do While dataIns < TabOr!Part
        TabDest.AddNew
        TabDest!Permanenza = dataIns
        TabDest!Nome = TabOr!Nome
        TabDest!Altro = TabOr!Altro
        TabDest.Update
        dataIns = DateAdd("d", 1, dataIns)
      Loop
      TabOr.MoveNext
    Loop
  dataIns = DateAdd("d", -Day(Now) + 1, Date)
'*** dataIns= DateAdd("m",-Month(Now) + 1, Date)
  Do While Month(dataIns) = Month(Now)
'*** Do While Year(dataIns) = Year(Now)
    TabDest.FindFirst "Permanenza=#" & Month(dataIns) & "/" & Day(dataIns) & _
                      "/" & Year(dataIns) & "#"
    If TabDest.NoMatch = True Then
      TabDest.AddNew
      TabDest!Permanenza = dataIns
      TabDest!Nome = "------"  '*** ho messo i trattini per evidenziare 
      TabDest!Altro = "------" '*** le righe vuote. Se non vuoi farlo,
      TabDest.Update           '*** cancella le due righe con "----"
    End If
    dataIns = DateAdd("d", 1, dataIns)
  Loop
  TabDest.Close
  TabOr.Close


 ha scritto:

Bello!!
grazie lo provo subito.
Ma.. l'appetito vien mangiando, se utilizzo archivi vecchi, es. del 2003 come 
posso fare perchè utilizzi l'anno relativo agli archivi e non quello in corso?
Comunque grazie perchè un problema me l'hai risolto.
Ciao
Giuseppe
Inviato da 
www.mynewsgate.net

giuseppe ha scritto:

Lo fai da vba scorrendo tutti i record come già suggerito, oppure crei una
tabella con un unico campo, che contenga tutte le date che ti servono (per
esempio tutte le date dal 01/01/2004 al 31/12/2004) e poi con una query a
prodotto cartesiano (senza relazioni) la combini con la tabella che
contiene i periodi.
Impostando dei criteri in base al valore dei campi Arr e Part sul campo
che contiene le date ottieni quello che ti serve. Poi trasformi la query
in query di accodamento o creazione tabella e salvi i dati.
Namor
-- 
namor at inwind punto it
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it


Acc...ti do' un dito e ti prendi il braccio? Dai scherzo...
Allora...se vuoi farlo per il 2003, o un altro anno(ma solo un anno)
allora fai semplicemente così:
   dataIns =  #1/1/2003#
 
   Do While Month(dataIns) <= 12
  '*** Do While Year(dataIns) = 2003
     TabDest.FindFirst "Permanenza=#" & Month(dataIns) & "/" & Day(dataIns) & _
                       "/" & Year(dataIns) & "#"
     If TabDest.NoMatch = True Then
       TabDest.AddNew
       TabDest!Permanenza = dataIns
       TabDest!Nome = "------"  '*** ho messo i trattini per evidenziare 
       TabDest!Altro = "------" '*** le righe vuote. Se non vuoi farlo,
       TabDest.Update           '*** cancella le due righe con "----"
     End If
     dataIns = DateAdd("d", 1, dataIns)
   Loop
   TabDest.Close
   TabOr.Close
non l'ho testato, ma dovrebbe andare...fammi sapere...
se invece vuoi farlo per un arco di anni metti nelle prime due righe
   dataIns =  #1/1/2001#  '*** ad esempio partendo dal 2001
 
   Do While Year(dataIns) <= 2003 and Month(dataIns) <= 12
se vuoi arrivare al 2002 metti 2002, se vuoi arrivare ad oggi combina questa 
soluzione con quella che ti ho dato l'altra volta...
Ciauz


 ha scritto:

La provo subito.
Grazie di tutto
Giuseppe
Inviato da 
www.mynewsgate.net