Newsgroup: it.comp.appl.access
Titolo: prmo gestionale/primi problemi

Ciao,
faccio in mio ingresso diretto in questo newsgroup , che lurko da parecchio.
Un saluto a tutti.
sto creando una database per gestire i dati economici ed anagrafici dei
nostri dipendenti .
Penso che ci faremo compagnia per parecchio :)  .
Primi problemi :
-      Inserisco una casella combinata in una maschera per poter scegliere i
nominativi dalla Tabella Anagrafico,
       purtroppo alcuni dipendeti hanno un ' (accento) nel loro cognome, e
mi da errore run-time 3077 . Soluzione ?
-     Ho creato, tramite macro, la stampa di una tabella pivot, come faccio
ad impostare la pagina da stampare in orientamento      orinzontale ?
grazie
--
------


non è un report......ma è una macro che "apre" una query in Visualizzazione
Tabella Pivot......
questo è il codice :
Private Sub Comando71_Click()
On Error GoTo Err_Comando71_Click
    Dim stDocName As String
    stDocName = "Tutto il Personale"
    DoCmd.OpenQuery stDocName, acNormal, acEdit
Exit_Comando71_Click:
    Exit Sub
Err_Comando71_Click:
    MsgBox Err.Description
    Resume Exit_Comando71_Click
End Sub
ho trovato nella guida : Printer.Orientation = acPROLandscape

 SELECT Anagrafico.Nominativo FROM Anagrafico;
Questo è il codice SQL dell'origine riga della casella combinata.
A me serve conoscere il codice VBA generato a fronte dell'evento "Dopo
aggiornamento" della casella combinata con il quale imposti il filtro della
maschera.
Se invece la maschera ha come origine record una query di selezione che usa
come parametro la casella combinata, posta il codoce SQL di questa query di
selezione.

Dopo che la query si è aperta, prima di pigiare il pulsante di stampa, dal
menu File seleziona Imposta pagina... e vedi quanto da me scritto nel mio
precedente messaggio. Però così dovrai impostare tutte le volte, a manina
santa, le impostazioni della pagina; per evitare questo inconveniente,
creati un report che abbia come origine record la tua query "Tutto il
personale" e quindi fai quello che ti ho indicato nel mio messaggio
precedente.


 selezione.
dovrebbe essere questo =
Private Sub CasellaCombinata100_AfterUpdate()
    ' Trova il record corrispondente al controllo
    Dim rs As Object
    Set rs = Me.Recordset.Clone
    rs.FindFirst "[Nominativo] = '" & Me![CasellaCombinata100] & "'"
    If Not rs.EOF Then Me.Bookmark = rs.Bookmark
End Sub
ciao


 ciao
[CUT]
Prova a modificare la routine così:
Private Sub CasellaCombinata100_AfterUpdate()
    ' Trova il record corrispondente al controllo
    Dim rs As Object
    Set rs = Me.Recordset.Clone
    rs.FindFirst "[Nominativo] = " & Chr$34) & _
    Me![CasellaCombinata100] & Chr$(34)
    If Not rs.EOF Then Me.Bookmark = rs.Bookmark
End Sub
--


 Prova a modificare la routine cosě:



[CUT]
Per prima cosa quando rispondi scrivi DOPO (o ad intercalare) e non prima
del testo dei messaggi precedenti.
Esistono diversi modi per ricostruire i valori di un record a quelli che
erano ad una certa data; il modo migliore dipende dal contesto in cui operi.
Penso però che la cosa più facile sia quella di avere due tabelle: una prima
tabella che contiene, per ogni matricola, i dati più aggiornati ed una
seconda tabella (quella storica) che contiene, per ogni matricola tanti
record quante sono le variazioni effettuate. Ogni record della seconda
tabella fotografa i valori dei campi alla data di una variazione.
Oltre alla Matricola, che rappresenterà la chiave primaria, la prima tabella
avrà i campi che tu hai indicato nel tuo messaggio; con questa tabella
effettuerai tutte quelle elaborazioni dove servono i valori correnti (gli
ultimi, per capirsi).
La seconda tabella (quella storica) avrà la stessa struttura dela prima ma
con l'aggiunta di due campi: un campi ID di tipo contatore e un campo
DataVariazione di tipo Data/ora; inoltre la sua chiave primaria non sarà la
Matricola ma il campo ID.
La maschera che effettuerà le variazioni dell'anagrafica dei dipendenti avrà
come origine record la prima tabella (quella NON storica); come primo
effetto avrai, abbastanza facilmente, l'aggiornamento della prima tabella.
Per agiornare la seconda tabella (quella storica), a fronte dell'evento
"Dopo aggiornamento" della maschera di cui sopra, inserirai un nuovo record
nella seconda tabella (quella storica: puoi farlo ad esempio eseguendo da
codice VBA una query di accodamento): i dati per popolare con la query di
accodamento i campi del nuovo record li prenderai dai controlli della
maschera (che ancora contegono i valori del record appena aggiornato); non
preoccuparti del campo ID (lo riempirà automaticamente Access), mentre nel
campo DataVariazione metterai il valore che hai appositamente digitato in
una casella di testo non associata della maschera, sempre che non puoi usare
il valore della costante figurativa Date().
Per avere l'archivio anagrafico ad una certa data (ipotizzaziamo al
30/6/2002), ti crerai una query di raggruppamento basata sulla seconda
tabella (quella storica): il ragguppamento lo effettuerai sul campo
Matricola (seleziona Raggruppamento nel campo Formula: della griglia di
struttura) e come DataVariazione chiederai la massima (seleziona Max nel
campo Formula: della griglia di struttura); gli altri campi della query
saranno tutti dei campi calcolati ricavati con funzioni DLookup (vedi help)
che avranno come dominio la seconda tabella ed avranno dei criteri che
verificano l'uguaglianza tra i campi della tabella Matricola e
DataVariazione e gli stessi campi della query di raggruppamento. Per questi
campi calcolati dovrai selezionare Espressione nel campo Formula:.
La query dovrà prendere in considerazione solo i record che hanno
DataVariazione minore o uguale alla tua data alla quale vuoi ricostruire
l'anagrafica; per ottenere questo, nell'ipotesi che abbiamo fatto,  creati
un'altro campo calcolato: nella riga Campo: scrivi:
Pippo: DataVariazione
Nella riga Tabella: seleziona il nome della seconda tabella.
Nella riga Formula: seleziona Dove.
Nella riga Mostra: deseleziona lo "svirgolino".
Nella riga Criteri: scrivi:
<= #30/6/2002#
Per effettuare elaborazioni retroattive, come origine record, invece di
usare la prima tabella userai questa query di ragguppamento.
Ti ricordo che una query di raggruppamento è un recordset non aggiornabile,
ovvero non potrai usarla per aggiornare i dati: gli aggiornamenti dovrai
farli come ho scritto sopra.


Mi ero dimenticato di dirti che se devi imparare Access come utente, penso
che con qualche settimana di studio ed impegno seri te la caverai.
Se invece vuoi diventare programmatore penso che avrai bisogno di parecchi
mesi, meglio se qualcuno ti insegna; inoltre non scambiare questo NG per un
corso per corrispondenza: è solo un supporto per gli sviluppatori di
database più o meno esperti.
Poi per progettare una buona struttura di un database ci vuole ancora altro
tempo: quindi niente fretta.


grazie x le dritte.........
č bello sapere che in un angolo del mondo c'č sempre qualcuno disposto ad
aiutarti.........
devo realizzare questo database al lavoro......dopo 3 anni  "intensi" di
excel......avendo visto che č possibile convertire tutto in access č un
investimento per il futuro
p.s.
inizio a studiare la tua risposta :))
ho (grazie a te) risolto il problema dell'accento......se volessi risolverlo
con una "funzione"? in maniera tale che non si presenti piů?

 con una "funzione"? in maniera tale che non si presenti piů?
La problematica di un apice all'interno di un campo di tipo testo, o
comunque all'interno di una stringa, va risolto usando una sintassi adeguata
nello scrivere i predicati WHERE (in una frase SQL o nei criteri); una
funzione potrebbe esserti utile solo se tu volessi risolvere il problema in
maniera drastica, ovvero eliminando gli apici dalle stringhe, sostituendoli
ad esempio con uno spazio.


 progettazione) faticherai moooolto di più nel realizzare un buon progetto.
il primo amore non si scorda mai..........

 il valore della costante figurativa Date().
Qui siamo messi proprio male :( .
La query di accodamento l'ho creata, e ho visto la nascita del mio primo
storico,
soltanto che non riesco a capire come fare a copiare solo il record
modificato.....
ho un pò di vergogna a dirlo :
 la mia query (che parte dopo l'aggiornamento della maschera) mi copia tutti
i record della mia prima tabella nello storico,
come dirgli di copiare solo quelli modificati ?
per ciò che riguarda la  data, ho creato la casella di testo nella maschera,
ma come sfruttarla ?
ho pensato, di mettere nella query di accomodamento,  nel campo
DataVariazione,  la funzione Date ()  ......
che controindicazioni ci sono ?

qui tutto ok.....ora sto studiando Dlookup
ciao

 ha scritto nel messaggio
news:anh3h4$ed6ca$1...@ID-24065.news.dfncis.de...

OK, ma attento alla pericolosità di un menage triangolare. ;-)


 ciao


 OK, ma attento alla pericolosità di un menage triangolare. ;-)
lo so........ .......ti racconto "en passant" un altro piccolo problemino mi
hanno spinto a convertire tutto in access :
ho una cartella di lavoro in excel con la quale gestico tutti i dati
anagrafici dei nostri dipendenti.
Soltanto per  stampare gli attestati di lavoro e per le comunicazioni
periodiche delle ferie, ho "collegato" una tabella access al foglio di
lavoro principale Excel per recuperare i dati ed immetterli nelle
comunicazioni da stampare con documento word.
Non so per quale motivo, periodicamente il documento word perde il
"contatto" con il database......ed adesso dopo l'ennessimo "collegamento" il
documento word mi porta le date di nascita e di assunzione all'americana con
addirittura l'ora 00.00.00
Non so dove intervenire :
In excel il formato data e quello classico  es.: 04/10/2002
In access non mi permette di modificare,  in quanto tabella
collegata;
In word penso sia inutile, xchè riceve i dati da access.
E' un  rompicapo che penso si risolva in un niente....che non riesco a
trovare :(
ciao

 > ciao
non mancheranno le occasioni...
grazie ciao.

 anagrafici dei nostri dipendenti.
[CUT]
Mi dispiace ma non ho esperienza in merito.
