Newsgroup: it.comp.appl.access
Titolo: Help Me

Cercherò di essere più chiara possibile e spero sintetica
Ho creato un DB per la registrazione ed archiviazione dei contratti di
locazione con relativo calcolo delle fatture.
Le tabelle chiave create sono TBCLIENTI, TBCOD_REGISTRAZIONI,
TBREGISTRAZIONE_CONTRATTO, TBCANONE. Relazionate tra di loro con CodCliente
CodReg CodCanone
Procedimento:
1) I contratti vengono registrati una volta sola con relativo CodReg
(contatore univoco) dove vengono inserite le tariffe vigenti al momento
della stesura del contratto;
Poi automaticamente vengono collegati al tipo di contratto desiderato
(locazione, en-el, ecc) a WORD e salvati con numero di contratto.
2) Ho creato una maschera per il calcolo fatture dove viene riportata tutta
la lista dei contratti registrati con i relativi canoni (già precompilati al
momento della registrazione contratto) in più trovo dei campi liberi dove
andrò digitare i servizi extra e variabili mensili/trimestrali ecc).
Il problema nasce al momento del ricalcolo ISTAT delle tariffe canone (una
volta l'anno).(nella maschera con casella combinata e collegamento con
CodCanone)
Ovviamente le tariffe devono essere tutte ricalcolate.
Essendo un programma che deve essere usato da personale non esperto, vorrei
creare e non so come, una maschera che mi permetta di inserire la
percentuale di incremento e che automaticamente mi ricalcoli tutti i dati
desiderati.
Ho provato con una query di aggiornamento, ma oltre che dover entrare ogni
volta nella struttura della query per cambiare percentuale, mi costringe a
cambiare tutte le tariffe manualmente sui contratti già registrati, cosa non
buona visto che ne ho circa 600.
Mi sembra logico che l'aggiornamento deve essere fatto 1 volta all'anno ed
in un solo momento, ma sono andata in panne.
Dimenticavo sto usando ACCESS2000, e non ho molta confidenza con VB. Diciamo
che non siamo in buoni rapporti.
Cerco di farmelo sembrare simpatico ma non è così maleabile.
Spero di essermi fatta campire, ed aspetto lumi.
Grazie

 ha scritto nel messaggio
news:8m61ma$7nf$1...@pc1.spin.it...

Se non ho capito male, il tuo problema è quello, una volta l'anno, di
incrementare il contenuto di alcuni campi di tutti i record di una una
tabella di una certa percentuale.
Secondo me devi far pace con VBA; poichè però è un VBA così piccolo che puoi
considerarlo un bambino, come si fa a non avere buoni rapporti con un
bambino?
A parte gli scherzi, secondo me la cosa più logica è scorrere tutti i record
della tua tabella (che per comodità chiameremo TABELLA1) ed aggiornarne i
campi secondo un certo algoritmo.
Creati una maschera che contiene solo una casella di testo non associata
(che per esempio chiami Percentuale) nella quale digiterai l'incremento
ISTAT (1,05 se l'incremento è del 5%, 1,1 se l'incremento è del 10% ecc.).
Inserisci nella maschera anche un pulsante di comando (al quale per esempio
dai il nome Rivaluta) e a fronte dell'evento "Su clic" del pulsante genera
il seguente codice VBA piccolo, piccolo:
Private Sub Rivaluta_Click()
Dim dbAlessia As Database
Dim rcdAlessia As Recordset
Set dbAlessia = CurrentDb()
Set rcdAlessia = dbAlessia.OpenRecordset("TABELLA1")
MsgBox "Inizio Rivalutazione"
DoCmd.Hourglass True
Do Until rcdAlessia.EOF
        rcdAlessia![Campo1] = Int(rcdAlessia![Campo1] * Me![Percentuale])
        rcdAlessia![Campo2] = Int(rcdAlessia![Campo2] * Me![Percentuale])
        rcdAlessia![Campo3] = Int(rcdAlessia![Campo3] * Me![Percentuale])
        rcdAlessia.Update
        rcdAlessia.MoveNext
Loop
DoCmd.Hourglass False
MsgBox "Fine Fine"
End Sub
Nell'esempio ho indicato solo tre campi da aggiornare (chiamati Campo1,
Campo2 e Campo3), adattalo tu alle tue esigenze.
Se poi ti serve ancora una mano per far pace con quello scorbutico di VBA,
fammelo sapere.
Roberto


Mi scuso (appena mi sono accorto dell'errore mi sono dato 10 frustate) ma mi
sono dimenticato di mettere un comando nella routine che ti avevo postato
precedentemente.
Quella che segue è depurata dell'errore ed in più effettua la rivalutazione
sia su tblValori che su tblRegCont.
Naturalmente, nel frattempo il bambino è un pò cresciuto.
Il codice che segue lo ho copiato con il copia-incolla dalla routine evento
di un esempio che mi sono costruito e che a me funziona perfettamente con
Access 97.
Quanto all'errore che tu mi segnali, se non è dovuto ad un tuo errore di
digitazione, (io non ho Access 2000) potrebbe essere che con A2000 "As
Database" vada scritto in un'altra maniera.
Puoi porre il quesito al NG.
Quello che posso fare, se lo desideri, è inviarti, al tuo indirizzo e-mail,
il mio esempio.
Ecco la nuova routine evento:
Private Sub Rivaluta_Click()
Dim dbAlessia As Database
Dim rcdAlessia As Recordset
Dim rcdAlessia2 As Recordset
Set dbAlessia = CurrentDb()
Set rcdAlessia = dbAlessia.OpenRecordset("tblValori")
MsgBox "Inizio Rivalutazione"
DoCmd.Hourglass True
Do Until rcdAlessia.EOF
    rcdAlessia.Edit
        rcdAlessia![Campo1] = Int(rcdAlessia![Campo1] * Me![Percentuale])
        rcdAlessia![Campo2] = Int(rcdAlessia![Campo2] * Me![Percentuale])
        rcdAlessia![Campo3] = Int(rcdAlessia![Campo3] * Me![Percentuale])
    rcdAlessia.Update
    rcdAlessia.MoveNext
Loop
Set rcdAlessia2 = dbAlessia.OpenRecordset("tblRegCont")
Do Until rcdAlessia2.EOF
    rcdAlessia2.Edit
        rcdAlessia2![Campo4] = Int(rcdAlessia2![Campo4] * Me![Percentuale])
        rcdAlessia2![Campo5] = Int(rcdAlessia2![Campo5] * Me![Percentuale])
        rcdAlessia2![Campo6] = Int(rcdAlessia2![Campo6] * Me![Percentuale])
    rcdAlessia2.Update
    rcdAlessia2.MoveNext
Loop
DoCmd.Hourglass False
MsgBox "Fine Rivalutazione"
End Sub
Fammi sapere
Roberto