Newsgroup: it.comp.appl.access
Titolo: [2010] sfruttare una Sub esistente in un altro form

chiarisco meglio la cosa:
 
ho una tabella in un database SQL esterno, chiamata QCT, contenente oggi 
poco meno di 400 record
 
quando uso i dati di questa tabella per le stampe, ne faccio una copia in 
una tabella locale PrintSelection (non tutti i 93 campi, solo quelli che mi 
servono - una dozzina - più un campo flag): questo perché prima di fare la 
stampa vera e propria l'utente ha la possibilità di intervenire sul campo 
quantità (Qty) per fare qualche ritocco dell'ultimo secondo (si tratta di 
una simulazione di business) come pure di attivare/disattivare il flag per 
includere/escludere certi prodotti dalla simulazione: eventuali modifiche 
estemporanee in tal senso non  mi vanno quindi a toccare i dati "giusti" ma 
restano confinate nella tabella locale PrintSelection
 
ora mi chiedono di poter variare non solo la quantità/flag ma anche alcuni 
altri campi che però sono parte di una serie interminabile di calcoli vòlti 
a stabilire il prezzo finale del prodotto
 
questa sfilza di operazioni è già presente nel codice associato alla form 
che gestisce i dati: sono quasi 500 righe di roba, sebbene oltre la metà 
siano commenti per spiegare cosa cavolo fanno
 
nota che le operazioni non vengono effettuate direttamente nella tabella 
SQL ma in una tabella copia, chiamata con estrema fantasia TMP: in pratica, 
quando l'utente decide di modificare qualcosa, copio da QCT a TMP, faccio 
fare e disfare e alla fine, se confermato, copio indietro da TMP a QCT
 
la mia idea sarebbe quindi quella di sfruttare la Sub esistente per il 
calcolo in TMP per ri-calcolare i dati di PrintSelection: in pratica, per 
ogni record di PrintSelection attivato per la stampa (campo flag True) 
dovrei recuperare tutti i 93 campi da QCT (SQL), copiarli in TMP, 
modificare alcuni parametri come da scelte dell'utente, rifare il calcolo 
(le 500 righe di cui sopra) e risalvare la (sporca) dozzina di dati che mi 
servono
al termine si lancia la stampa "per vedere che effetto che fa" (cit.)
 
arrivo quindi alla *DOMANDA*: 
 
posto di riuscire a far passare tutti i dati attivi di PrintSelection 
copiandoli in TMP uno alla volta, è possibile invocare la Sub Calc_Click() 
presente nel codice del form per rifare i conti senza aprire effettivamente 
la form associata? oppure devo necessariamente prendere le 500 righe e 
copiarle in una nuova Sub nel form PrintSelection? 
 
mi è venuto in mente che, data la mole esigua di dati (i 400 record citati 
all'inizio), posso anche copiare tutto quanto da QCT a TMP e ciclare sui 
record rifacendo i calcoli, e alla fine rigenerare PrintSelection... 
 
-- 
/-\ /\/\ /\/\ /-\ /\/\ /\/\ /-\ T /-\
-=- -=- -=- -=- -=- -=- -=- -=- - -=-
........... [ al lavoro ] ...........


Al posto di usare una tabella per i dati temporanei, potresti usare un 
recordset in memoria
Quando serve, copia da qct a recordset in memoria, modifichi quel che 
serve sul recordset in memoria, e poi lo salvi su qct
 
Riguardo la domanda, si, ad esempio, se sei su frmSeconda potresti:
Forms!frmPrima.cmdTastoSuForPrima_Click

 
 
yes, lo ho trovato anche io:
 
 
 
call a sub from another form or module | Access World Forums
https://www.access-programmers.co.uk/forums/threads/call-a-sub-from-
 
another-form-or-module.63718/
 
This should do the trick:
Forms!form1.EnterNewOrder_Click
 
However, you will need to make the PRIVATE sub into a PUBLIC sub for this 
to work, I think.
 
(A better coding technique would be to create a separate (public) Enter New 
Order function in the code for form2 and call this function from both 
places.
 
 
 
 
ma il primo tentativo è miseramente fallito (dopo aver cambiato i nomi, 
averla resa Public da Private che era, etc...)
 
 
quando prova ad eseguire:
 
Forms!frmQCT.Calc_Click
 
esce l'errore:
 
QCT cannot find the referenced form 'frmQCT'.
 
 
domani mattina, a mente fresca, vedo di capire perché



Io di solito creo nell'altro form una sub pubblica e all'interno richiamo la sub privata con call...

Meglio scrivere una Function Public, non una Sub, e poi nelle Private si chiama la Public.
 
Public Function NomeFunction(param1 as Type, Param2 as Type)
   ..... bla bla bla
End Sb
 
Private Sub NomeButton_Click()
    Call NomeFunction()
End Sub
 
Dico Function in quanto la Function, contrariamente alle Sub è visibile sia da Macro, che da chiamata diretta Evento...
Es:
Su Evento Click : =NomeFunction()
cosa che con una Sub non funziona.
 
Saluti
@Alex

 
 
ho deciso di duplicare la sub: la versione riportata nel nuovo form è stata 
decurtata di una serie di orpelli e altre cose che avrei dovuto gestire 
passando un parametro aggiuntivo alla chiamata, in modo da capire se la 
stavo eseguendo dal form originale oppure da quell'altro.
 
troppo casino, ci sono decine e decine di chiamate, meglio tenere le cose 
semplici.
 
il difetto, se mai ci sarà, è quello di aggiornare eventuali formule in due 
posti diversi, ma credi di riuscire a reggere il carico di lavoro
