Newsgroup: it.comp.appl.access
Titolo: Sottomaschera con query dinamica

Ciao a Tutti!!!!
Ho una maschera con una cornice che contiene vari controlli tipo caselle di
testo e combinate, dove si inseriscono/scelgono dei valori che io passo come
filtro ad una query.
Il risultato della query vorrei inserirlo in una sottomaschera.
Premetto che la query è dinamica, perchè ho 2 tabelle, e a seconda
dell'optionbutton che l'utente seleziona, vado ad interrogare o la tabella
del protocollo in ingresso o quella del protocollo in uscita.
Allora vedendo vari post ho notato la possibilità di gestire questo elenco
di risultato di ricerca con una sottomaschera.
Le ho passato da codice la query così:
     Me.Sottomaschera_tbIngresso2.Form.RecordSource = miaSQL (dove miaSQL è una
variabile di tipo stringa che contiene la query)
ottengo così solo il primo record, e non tutti i 18 che ho.
Inoltre la query è corretta perchè sull'SQL di ACCESS restituisce
esattamente 18 record.
Da cosa potrebbe dipendere?
e poi come potrei levare la scritta "#Nome?" che c'è su ogni casella di
testo della sottomaschera?
Grazie mille a Tutti!!!
--------------------------------
Inviato via 
http://arianna.libero.it/usenet/

 ha scritto nel messaggio
news:80Z207Z158Z122...@usenet.libero.it...

E' sufficiente impostare l'origine record della sottomaschera con:
Me.Sottomaschera_tbIngresso2.Form.RecordSource = miaSQL
solo nel caso in cui TUTTE le query descritte dai vari codici SQL con cui
imposti il valore della variabile stringa miaSQL siano composti dallo stesso
numero di campi con gli stessi nomi, in caso contrario, oltre ad impostare
l'orogine record della sottomaschera dovrai anche impostare le origini
controlli dei vari controlli della sottomaschera, in caso contrario è giusto
che nella sottomaschera venga visualizzata una sola riga i cuo controlli
associati contengano la dicitura "#Nome?.
-- 
Roberto
-----------------------------------------------------
il Sito Comune di it.comp.appl.access
http://www.sitocomune.com
----------------------------------------------------

 associati contengano la dicitura "#Nome?.
Grazie mille per la spiegazione, ma ho un problema.
Vorrei impostare da codice l'origine record della sottomaschera e le
origini controlli dei vari controlli della sottomaschera e ho scritto così:
Dim mioRs As Recordset
Dim MDB As Database
'creo la qry
per esempio
miaSQL = "SELECT * FROM tbIngresso"
Set MDB = CurrentDb()
Set mioRs = MDB.OpenRecordset(miaSQL)
Set Me.Sottomaschera_tbIngresso2.Form.Recordset = mioRs
    Do Until mioRs.EOF
     Sottomaschera_tbIngresso2.Controls("prog") = mioRs("prog")
     Sottomaschera_tbIngresso2.Controls("anno") = mioRs("anno")
     Sottomaschera_tbIngresso2.Controls("data") = mioRs("data")
     Sottomaschera_tbIngresso2.Controls("mittente") = mioRs("mittente")
     Sottomaschera_tbIngresso2.Controls("oggetto") = mioRs("oggetto")
     Sottomaschera_tbIngresso2.Controls("mezzoricezione") =
mioRs("mezzoricezione")
     Sottomaschera_tbIngresso2.Controls("note") = mioRs("note")
     mioRs.MoveNext
   Loop
Facendo il debug di questo codice leggo tutti i valori corretti che si
trovano nella tabella, (18 record), ma nella sottomaschera appaiono solo i
dati del 18esimo record....dov'è che sbaglio?
Non ho impostato qualche proprietà dei controlli della sottomaschera e/o
della sottomaschera stessa?
Grazie mille in anticipo!


 ha scritto nel messaggio
news:80Z207Z158Z122Y...@usenet.libero.it...

Certamente la routine VBA di cui sopra serve a polpolare una maschera con il
contenuto di una tabella, ma non serve certamente per impostare l'origine
record della sottomaschera e l'origine controllo dei sui controlli; il fatto
poi che nella maschera visualizzi solo l'ultimo record della tabella è
normale: con un ciclo Do ... Loop popoli i controlli del record corrente
della maschera ed è naturale che dopo aver scorso tutti i record della
tabella nel record corrente ci trovi i dati dell'ultimo record letto,
d'altra parte il record corrente può essere solo uno e non certo 18 come
vorresti tu.
Per impostare tbIngresso come origine record della sottomaschera è
sufficiente scrivere:
Me!Sottomaschera_tbIngresso2.Form.RecordSource = "tbIngresso"
o se preferisci:
Me!Sottomaschera_tbIngresso2.Form.RecordSource = "SELECT * FROM tbIngresso;"
che poi è la stessa cosa.
Per impostare le origini controllo dei vari controlli della sottomaschera
dovrai scrivere qualcosa del genere:
Me!Sottomaschera_tbIngresso2!prog.ControlSource = "prog"
nel caso vuoi impostare il campo prog come origine controllo del controllo
prog della sottomaschera.
Ciò fatto non devi assolutamente di popolare la sottomaschera visto che essa
è associata e contiene controlli associati, verrà fatto tutto
automaticamente da Access; dovrai preoccuparti tu di popolare una maschera
solo se essa è NON associata e c quindi contenente controlli NON associati,
cosa che nel tuo caso non è vera.




Ti ringrazio, ho provato il tuo codice ma nella sottomaschera vedo ora solo
il primo record:(
cmq ho bisogno di gestire i controlli e la sottomaschera da codice, perchè
la query che passo non è la semplice lettura della tabella tbIngresso, bensì
è una query formata da filtri.
Nel post precendente avevo scritto "Select * from tbngresso" solo come
esempio.
Ho così una sottomaschera non associata e di conseguenza anche i controlli
non sono associati...come potrei gestirli?


 non sono associati...come potrei gestirli?
Scusami, ma mi è sembrato di capire che la tua maschera ha una
visualizzazione a maschere continue, visto che parli di visualizzare
contemporaneamente 18 record.
Ebbene, che io sappia, non ha proprio senso di parlare di una maschera
continua NON associata.
Quello che puoi fare è invece crearti una stringa SQL più o meno complessa,
con o senza la proposizione WHERE ed impostarla come origine record della
sottomaschera, ma in questo caso non c'è assolutamente bisogno di
preoccuparsi di popolare la sottomaschera, visto che essa è associata e la
visualizzazione dei dati avverrà senza necessità di scrivere alcun codice
VBA.


 VBA.
Forse non mi sono spiegata bene, ma il mio scopo è quello di mettere
i risultati di una ricerca che l'utente fa in base a certi criteri gestiti
da caselle di testo o combinate
che riguardano la gestione del protocollo in un qualcosa simile alla
griglia.
In un primo momento ho usato la casella di riepilogo, dove tutto funzionava,
ma esteticamente
non piace al mio capo che vuole un controllo che abbia l'aspetto di una
griglia.
Così ho pensato alla sottomaschera, ma non riesco a gestirla da codice.
Ho creato la query e l'ho passata alla sottomaschera come dal tuo primo
post:
Me.Sottomaschera_tbIngresso2.Form.RecordSource = miaSQL
però se non associo ai controlli (che si trovano nella sottomaschera)
 il risultato della query, non succede nulla.
Se invece scrivo così:
Me.Sottomaschera_tbIngresso2.Form.RecordSource = miaSQL
Me.Sottomaschera_tbIngresso2!prog.ControlSource = "prog"
Me.Sottomaschera_tbIngresso2!anno.ControlSource = "anno"
Me.Sottomaschera_tbIngresso2!data.ControlSource = "data"
Me.Sottomaschera_tbIngresso2!mittente.ControlSource = "mittente"
Me.Sottomaschera_tbIngresso2!oggetto.ControlSource = "oggetto"
Me.Sottomaschera_tbIngresso2!mezzoricezione.ControlSource = "mezzoricezione"
Me.Sottomaschera_tbIngresso2!note.ControlSource = "note"
vedo nella sottomaschera solo il primo record.
La stringa miaSQL in questo caso, è la semplice SELECT dalla tabella
tbIngresso, senza filtri, perchè vorrei
vedere riempita la sottomaschera:)
non capisco dove sbaglio:(
Cmq grazie ancora per il tuo aiuto!


 non capisco dove sbaglio:(
allora forse ho risolto perchè ho impostato nei controlli della
sottomaschera i nomi dell'origine controllo, visto che le 2 tabelle che
gestisco hanno gli stessi campi.
Da codice ho scritto:
   Set Me.Sottomaschera_tbIngresso2.Form.Recordset = mioRs
non so se è corretto il tutto, ma sembra funzionare.
Volevo gestire i controlli da codice ma non ci riesco.
Adesso mi rimane da gestire la dicitura "#Nome?" che appare all'avvio della
maschera, perchè l'origine della sottomaschera la passo da codice....vediamo
che combino:)


 Cmq grazie ancora per il tuo aiuto!
-- 


 Non devi fare altro.
Ho fatto come mi hai suggerito, ma se scrivo:
Me.Sottomaschera_tbIngresso2.Form.RecordSource = miaSQL
vedo solo un record, precisamente il primo. Mentre se gli passo il recordset
come avevo scritto nei post precedenti:
Set Me.Sottomaschera_tbIngresso2.Form.Recordset = mioRS
Vedo il risultato esatto della query. Non so perché non funziona la
soluzione che mi hai detto tu, però per ora lascio quella che prevede
l’utilizzo del recordset che sembra funzionare.
Roberto, grazie mille per il tuo aiuto e la tua disponibilità!!!
