Newsgroup: it.comp.appl.access
Titolo: Istanziare Form da VBA

Buongiorno,
speriamo di non dire 'bischerate'.
Uso Access 2007 e VBA.
In un'applicazione vorrei aprire una nuova FORM di inserimento dati che non 
sia quella che l'utente potrebbe avere gi� aperto perch� potrei eliminargli 
i dati che magari aveva iniziato ad inserire.
Mi spiego meglio.
Per non fare il controllo se la form � gi� aperta e dato che devo fargli 
inserire al volo dei dati che mancano, vorrei istanziare praticamente una 
copia della form per fare l'inserimento al volo e richiuderla appena fatto.
Ho iniziato con:
Dim newform as form
Set newform = new form_nomeform
docmd.openform newform, acNormal
adesso come faccio a passargli il focus fargli fare l'inserimento e tornare 
ad un focus su una textbox ? forse quest'ultimo passaggio non � possibile.
Forse � meglio prima di passare il focus chiudere eventuali Recordset, 
azzerare le variabili etc  etc
Grazie mille. 

 ...

Per me non � chiaro la situazione e ragione.
Prima di tutto la logica nella tabella e la maschera deve
assicurare che l'utente inseri i dati giusti. Se vuoi inserire
dati aggiuntivi devi farlo nello stesso processo, cio� un
evento adeguato nella stessa maschera o dopo tramite
una query o un recordset.
In ogni caso non con un'altra istanza della stessa maschera.
Questo sarebbe una situazione d'inserimento concorrente
e pasticciona per l'utente, per il programma e soprattuttto
per i dati.
-- 
HTH
Karl
*********
Access FAQ: 
www.donkarl.com/it
 


Ciao KARL, evidentemente non sono stato chiaro cerco di spiegarmi meglio il 
motivo di aprire una nuova FORM.
Fai conto di avere delle Anagrafiche e la FORM di inserimento Anagrafiche, 
con la quale l'utente generalmente interagisce SEMPRE quindi di sicuro � 
quasi sempre aperta ma io non POSSO e non voglio controllare se � aperta, se 
ci sono gi� dei dati che deve ancora salvare etc etc..
Ho un'altra FORM che gestisce magari gli ORDINI , all'inserimneto di 
un'anagrafica, questa non esiste e devo proporgli se vuole inserirla, a 
questo punto devo aprire la FORM di INSERIMENTO anagrafica ed � qui che 
vorrei aprire una nuova ISTANZA della form per non toccare quella gi� 
aperta.
Mi dirai, perch� ha sempre le anagrafiche aperte ? (perch� � quella con cui 
lavora SEMPRE, in realta sono altri dati che non st� a spiegare qui perch� 
un p� lungo e complicato) comunque � la maschera di inserimento principale.
Comunque grazie KARL per il tuo aiuto.
Saluti


capito...
allora per� mi chiedo... visto che la maschera inserimento Anagrafica aperta 
servir� per tutta una serie di dati che al momento invece degli "ordini" 
nonn ti interessano (almeno credo), perch� voler a tutti i costi utilizzare 
la stessa form e non crearne una nuova ad hoc?... nel senso, se la prima da 
la possibilit� nella sua funzione totale all'utente di inserire il dato 
A,B,C,D, mentre a te per gli ordini ti interessa di inserire "al volo" solo 
i dati A e B, perch� non fare una maschera utente che richieda solo quelli? 


Perch� i dati da inserire devono essere tutti, non posso inserire solo 
quelli ad HOC e dopo gli altri, l'operatori se ne scorderanno dato che sono 
sempre sotto pressione dai clienti,
lo devono fare al momento.
Come ho specificato NON si tratta di Dati Anagrafici, ho fatto solo un 
esempio. E' un p� complicato spiegarlo qui, comunque ho questa necessit� e 
comunque il tuo
consiglio era giusto se in altra situazione, poi come sapete chi immette i 
dati lo devi guidare passo passo, non devi lasciar loro la propria libert� o 
quasi.....
Comunque grazie.
Saluti 


Io, se ho capito bene la problematica, ho risolto cos�. La maschera Anagrafica
(per citare l'esempio) � in sola lettura. Se devo inserire robbbba premo INS,
apro una form d'inserimento MODALE e alla pressione di INSERISCI, inserisco e
chiudo la form, ESCI chiudo e stop. La medesima form la posso utilizzare in
qualunque parte del programma in quanto � autonoma. Ho solo l'accortezza di
passare come OpenArgs o variabile globale il nome della form chiamante per
poter tornare li. Lo memorizzo in una variabile globale (della FORM non
globale globale....) e la uso per il rientro. Un requery della maschera
chiamante dopo  l'inserimento e tutti sono felici e contenti.....
-- 

 Grazie mille.

 azzerare le variabili etc  etc
Ma se sviluppi in VBA all' interno di Access (e' cosi' ?) tu non puoi
aprire piu' istanze AUTONOME della stessa maschera. Non e' come in
VB.
Le istanze che crei sono dei semplici "puntatori" allo stesso
oggetto.
Dunque per fare quello che vuoi tu devi creare un' altra maschera
anagrafica (identica tranne il nome all' originale) da aprire al volo
nei casi come quello da te indicati.
Non so se mi sono spiegato.

 VB.
E questo dove sta scritto?
La form e' una classe come un'altra e non e' di tipo "static"
set f = new formx
crea una nuova istanza della classe formx
Diglielo tu al mio programma/applicazione, e' li da access 95, che non 
si puo' fare ;-{)
--
ac

 crea una nuova istanza della classe formx
Ok, forse mi sbaglio, scusami.
Ma allora (te lo chiedo con la massima umilta') insegnami
come si fa ad aprire una nuova istanza della maschera
access denominata (ad esempio) "anagrafica"  ed usarla
per inserire dati nella tabella "anagrafica" avendo gia' aperta
per l' inserimento un' altra istanza della maschera "anagrafica"
senza minimamente influire con quest' ultima.
Mi servirebbe assai poter fare questa cosa, per cui se ti
dilungassi con un bell' esempio di codice effettivo te ne
sarei molto grato.
(dico sul serio, non e' ironia : imparero' una cosa molto
utile che non conoscevo)
Pendo dalle tue labbra. Siamo in VBA all' interno di access
versione 2003, windows xp professional.
Fammi sognare ! :D

radicale.002 ha scritto:

Ho gia' postato in altro ramo del 3d alcune istruzioni (28/05/2010 ore 
14:00). Anche il codice dell'OP dovrebbe funzionare, se si elimina la 
openform e' meglio.
Se vuoi osserva quel codice e poi in quel ramo, se hai bisogno di 
delucidazioni, ne scriviamo.
comunque:
set f1 = new "anagrafica"
set f2 = new "anagrafica"
dovrebbero aprire due istanze del form "anagrafica"
Ovviamente la vita di f1, f2 deve essere tale che permanga anche al di 
fuori della routine che le crea.
--
ac

 ...
 Mostrare diverse istanze di una maschera
 
www.donkarl.com/it?FAQ4.6
Si puo anche cambiare tutte le propriet� dell'istanza
p.e. il RecordSource (criteri, tabella diversa ecc.).
-- 
cu


 dovrebbero aprire due istanze del form "anagrafica"
Non funziona, mi da errore. Provalo.
E nemmeno se faccio cosi' :
Dim f1 As New Form
Dim f2 As New Form
Set f1 = "anagrafica"
Set f2 = "anagrafica"
Allora, si puo' sapere come devo fare ?
Ripeto : stiamo in VBA *dentro* access 2003
Grazie.

 p.e. il RecordSource (criteri, tabella diversa ecc.).
Non ne dubito.
Ma vi fa' cosi' schifo postarmi le 6/7 linee di codice
in modo che possa subito provare ? :-)

 in modo che possa subito provare ? :-)
Non sono solo le righe di codice. Prova di nuovo con
il link di soppra dove trovi ulteriore indicazioni.


radicale.002 ha scritto:

Se citi anche l'errore che ti da forse e' meglio.
Comunque, togli le virgolette dal nome de form.
--
ac

 Se citi anche l'errore che ti da forse e' meglio.
Non me lo fa nemmeno scrivere. Va' subito in rosso.
Ma tu,
hai *provato* il codice che mi consigli ?
Allora ancora una volta, poi desisto :
posta qui, *per favore*, il codice che serve
per aprire due istanze indipendenti di una
maschera access in modo che possa inserire
da ambedue sulla stessa tabella.
Grazie.

 da ambedue sulla stessa tabella.
a meno che tu non abbia cambiato i colori dell'editor "rosso" identifica 
errore sintattico il che significa che hai scritto qualcosa che non e' 
conforme alle regole di scrittura del VBA (ad es la new di una stringa 
immediata dovrebbe dare rosso, mi sembra di aver suggerito di togliere i 
doppi apici di delimitazione del nome formato) .
Ahhhhh...... preferisco i condizionali agli imperativi anche se conditi 
dal per favore.
--
ac


Su tutti i link di Karl, da un pò di tempo a questa parte esce il
seguente errore:
Error 404 : not found
però, diavolo, non ci vuole mica una scienza a capire che la pagina si
può aprire anche con un copia/incolla!
www.donkarl.com/it?FAQ4.6
:-)
Ciao Vladimiro.

 Grazie.
Su tutti i link di Karl, da un p� di tempo a questa parte esce il
seguente errore:
Error 404 : not found
io non ho di questi problemi....:D
ho appena riprovato
Buona domenica
Daniele 

      Set frm = New [Form_Pannello Dati]
Ok, questo finalmente non da errore :
Dim frm1 As Form
Dim frm2 As Form
Set frm1 = New Form_anagrafica
Set frm2 = New Form_anagrafica
frm1.Visible = True
frm2.Visible = True
ma nonostante chieda la visualizzazione,
non accade nulla.
Ci manca ancora qualcosa ?
Grazie.

 :-)
Gia' ... :D
Che scemo che sono.


Ho capito dove sbagliavo.
All' uscita dell' evento, le maschere vengono
distrutte perche' le variabili frm1 e frm2 sono
dichiarate locali, e quindi distrutte all' uscita.
Se le dichiaro pubbliche (o private alla maschera
chiamante, purche' non la chiuda) tutto
funziona.
Un sincero ringraziamento a te e a Karl Donaubauer.

 il link di soppra dove trovi ulteriore indicazioni.
Si.
Un link notevole. Grazie, grazie  mille.

 il link di soppra dove trovi ulteriore indicazioni.
Quel tuo sito e' una vera miniera di informazioni, oltretutto
scritte per essere comprese, e non per far sfoggio di sapere.
Congratulazioni. Sincere congratulazioni.