Newsgroup: it.comp.appl.access
Titolo: Contare i record in una sottomaschera continua con VBA.

Ho una maschera (frmAggiornaDateUscitaFilm) con 4 sottomaschere
continue(sfrmSettimana1/2/3/4 con un'unica casella di testo
TitoloFilm). Come conto i record in VBA per impostare 4 variabili da
utilizzare nella maschera principale?
Grazie mille!!!!!!!!!!!

leev ha scritto:

Proprietà RecordCount membro di RecordSetClone.
@Alex

 @Alex
Ci ho già provato e non ci sono riuscito.
Ora ci riprovo poi trascrivo qua il codice così vediamo dov'è che
commetto l'errore.....bontà tua.
Grazie Alex.

leev ha scritto:

lngSub1=Me!NomeSub1.Form.RecordsetClone.RecordCount
lngSub2=Me!NomeSub2.Form.RecordsetClone.RecordCount
lngSub3=Me!NomeSub3.Form.RecordsetClone.RecordCount
lngSub4=Me!NomeSub4.Form.RecordsetClone.RecordCount
Ciao
@Alex

 Alessandro Baraldi ha scritto:
lngSub1=Me!NomeSub1.Form.RecordsetClone.RecordCount
lngSub2=Me!NomeSub2.Form.RecordsetClone.RecordCount
lngSub3=Me!NomeSub3.Form.RecordsetClone.RecordCount
lngSub4=Me!NomeSub4.Form.RecordsetClone.RecordCount
Ciao
@Alex
Ma senti Alex, è possibile che prima di leggere la proprietà RecordCount di RecordsetClone, vi sia 
la necessità di fare un "recordsetclone.movelast" per rendere effettivo il conteggio? Leggevo su un 
manuale che la proprietà Recordcount dell'oggetto DAO.recordset ha bisogno per essere valida di far 
fare al recordset il caricamento di tutti i record, e questo con movelast. O mi sbaglio?
Michele

 @Alex
Ok, sono riuscito ad arrangiarmi (molte felicemente e grazie al tuo
spunto) ed il risultato è stato di poco differente dal tuo, inoltre ho
completato il codice perchè nella maschera principale sono presenti
oltre alle 4 sottomaschere, anche 4 Titoli e 4 linee di separazione.
Il codice non sarà perfetto perchè sono alle primissime armi però
sono felice come un pirla che comunque funzioni. Se c'è qualche
appunto da fare, fate pure, GRAZIE!!!
Eccovi il mio capolavoro (hehehehehe):
'DIMENSIONIAMO LE SOTTOMASCHERE...
'...a seconda dei record visualizzati in ciascuna di esse. Per
cominciare
'si assegna alla variabile "NumRec" i valori corrispondenti al numero
di film visualizzati nella maschera
    Dim NumRec1 As Integer
    Dim NumRec2 As Integer
    Dim NumRec3 As Integer
    Dim NumRec4 As Integer
    Set rst1 = sfrmSettimana1.Form.RecordsetClone
    rst1.MoveLast
    NumRec1 = rst1.RecordCount
    Set rst2 = sfrmSettimana2.Form.RecordsetClone
    rst2.MoveLast
    NumRec2 = rst2.RecordCount
    Set rst3 = sfrmSettimana3.Form.RecordsetClone
    rst3.MoveLast
    NumRec3 = rst3.RecordCount
    Set rst4 = sfrmSettimana4.Form.RecordsetClone
    rst4.MoveLast
    NumRec4 = rst4.RecordCount
' e alla variabili
'"AltTxtTitolo" l'altezza della casella di testo "TitoloFilm"
' "Twip" il valore di twip (unità di misura di MS Access) che
occorrono per fare un centimetro
' "AltFrm1" (2/3/4) le altezze calcolate delle 4 sfrm
' "DistTit" la distanza del titolo dalla rispettiva maschera
' "DistLin" la distanza della linea dalla rispettiva maschera
' "MrgFrm" il margine della subfrm da ciò che gli sta sopra, che si
tratti della subfrm precedente
' o del top del corpo della maschera principale
    Dim AltTxtTitolo, Twip, AltFrm1, AltFrm2, AltFrm3, AltFrm4,
DistTit, DistLin, MrgFrm
    AltTxtTitolo = 0.388
    Twip = 567
    AltFrm1 = AltTxtTitolo * NumRec1 * Twip
    AltFrm2 = AltTxtTitolo * NumRec2 * Twip
    AltFrm3 = AltTxtTitolo * NumRec3 * Twip
    AltFrm4 = AltTxtTitolo * NumRec4 * Twip
    DistTit = 284
    DistLin = 85
    MrgFrm = 400
' poi si ridimensionano e riposizionano le maschere a seconda dei
record contenuti
        sfrmSettimana1.Height = AltFrm1
        sfrmSettimana1.Top = MrgFrm
        lblFrmSettimana1.Top = MrgFrm - DistTit
        Linea1.Top = MrgFrm - DistLin
        sfrmSettimana2.Height = AltFrm2
        sfrmSettimana2.Top = AltFrm1 + 2 * MrgFrm
        lblFrmSettimana2.Top = AltFrm1 + 2 * MrgFrm - DistTit
        Linea2.Top = AltFrm1 + 2 * MrgFrm - DistLin
        sfrmSettimana3.Height = AltFrm3
        sfrmSettimana3.Top = AltFrm2 + AltFrm1 + 3 * MrgFrm
        lblFrmSettimana3.Top = AltFrm2 + AltFrm1 + 3 * MrgFrm - DistTit
        Linea3.Top = AltFrm2 + AltFrm1 + 3 * MrgFrm - DistLin
        sfrmSettimana4.Height = AltFrm4
        sfrmSettimana4.Top = AltFrm3 + AltFrm2 + AltFrm1 + 4 * MrgFrm
        lblFrmSettimana4.Top = AltFrm3 + AltFrm2 + AltFrm1 + 4 * MrgFrm
- DistTit
        Linea4.Top = AltFrm3 + AltFrm2 + AltFrm1 + 4 * MrgFrm - DistLin

Michele (Giò) ha scritto:

Sull'apertura di un Recordset è possibile, ma sul RecordsetClone di
Form no, altrimenti come farebbe a mostrare
tutti i Records...?
@Alex

leev ha scritto:

Non serve a nulla il MoveLast in questo caso, all'apertura o al
caricamento del Recordset di una Maschera
per riuscire a Popolare i campi il Recordset viene ciclato, quindi ti
trovi già sull'Ultimo.... TOGLILA.
Altro suggerimento...!
Questa dichiarazione è un'obrobrio:
Dim AltTxtTitolo, Twip, AltFrm1, AltFrm2, AltFrm3, AltFrm4,
DistTit, DistLin, MrgFrm
Una dichiarazione così assegna il tipo Variant a ben 9 Variabili che
forse dovrebbero essere addirittura
di tipo INTEGER.... stai bruciando un sacco di Byte in memoria...!
@Alex

 ha scritto nel messaggio 
news:1159545520.9...@m7g2000cwm.googlegroups.com...
Sull'apertura di un Recordset è possibile, ma sul RecordsetClone di
Form no, altrimenti come farebbe a mostrare
tutti i Records...?
@Alex
Per cui, il morale della favola è che un recordsetclone di form può essere trattato come un 
recordset, ma il meccanismo interno della form carica in automatico tutti i records sui propri 
recordsets, clone e non.
Pensandoci bene vi possono essere delle strette analogie tra il recordcount del recordsetclone e il 
conteggio records che appare in basso sulle maschere, già in apertura da subito corretto...
Michele 

 Michele
@Alex

 di tipo INTEGER.... stai bruciando un sacco di Byte in memoria...!
Eh si, saperlo! Purtroppo io sto cominciando adesso con access e pure
con VBA, e la maggior parte delle cose riesco a farle grazie a un po di
copia e incolla e molto intuito per il successivo adattamento alla
bisogna.
Ora provo a cambiarlo ma sicuramente sbaglierò ancora qualcosa,
vediamo, così?:
    Dim Twip, DistTit, DistLin, MrgFrm As Integer
    Dim AltTxtTitolo, AltFrm1, AltFrm2, AltFrm3, AltFrm4 as Single
considerando che
nella prima riga ci sono numeri interi che vanno da +85 a + 567
nella seconda numeri con max. 3 decimali che non superano certo il
valore di 100.000 (mi son tenuto largo)
Va meglio?
Per la seconda dichiarazione di variabili, ho scartato l'integer,
avendo dei decimali, e il double, non avendo necessità di cifre
enormi. Non mi restava che il single. E' corretto il ragionamento?
Grazie ancora.

 Grazie ancora.
Continuo a dire che invece di andare a tentoni..... serve una BASE di
teoria avanzata che puoi acquisire solo studiando.
Tieni poi presente che non sempre il codice che trovi in rete è
Error_Free, quindi se non sei in grado di capirlo assorbi gli
errori....
@Alex

 errori....
Non credo sia il caso di elencare il mio curriculum studii (latino
inventato) riguardo ad access, ma a questo punto è giusto che precisi
alcune cose.
Ho acquistato 3 libri su access e 2 su Visual Basic già da parecchi
anni. Un semplice manuale Quick Start e quei maxi tomi dell'Apogeo e di
Mondadori, per quanto riguarda access. Uno della Mondadori sul VBA e
un'altro sullo stesso argomento di un'altra casa editrice.
Quelli sul VBA li ho letti una volta e a breve li rileggerò
nuovamente. Quelli su access li ho letti tutti, alcuni anche due volte
e mi sto rileggendo per la 3a volta i due tomi più grandi. Solo ora
sto cominciando a ricavarci qualcosa di interessante che mi permetta di
utilizzare il programma al meglio. Purtroppo il problema di chi è
autodidatta (e alla mia età, per vari motivi, non posso fare
altrimenti) è che se c'è una cosa che non ti è chiara nessuno te la
spiega (almeno fino a che non ho "conosciuto" teed i
tuoi....."colleghi"), o te la trovi sui libri, leggendo e rileggendo, o
ti tieni la lacuna.
D'altro canto considera che non posso aspettare di saper usare alla
perfezione sia access che il VBA prima di fare un DB, altrimenti lo
avrei disponibile giusto per lasciarlo in eredità a mia figlia. Sono
quindi costretto, mentre studio come un dannato nonostante le mie 11
ore (11effettive!!!) di lavoro al giorno, ad arrangiarmi cercando di
fare in modo che la base dati da me creata, o bene o male, funzioni,
per poterla utilizzare fin da subito.
Ti prego quindi di essere un po' più clemente nei tuoi giudizi che
sarei comunque, per altro, costretto a sopportare per ragioni
di....bisogno.   ^_*
Grazie della comprensione!
Elio

sprecato memoria....!!
Salvo ulteriori mie incomprensioni, la variabile integer non ammette
decimali. Nelle proprietà citate (TOP, HEIGHT, ecc.) access visualizza
numeri con decimali. Però il valore, controllato personalmente nel
visualizzatore oggetti (hehehehe), è di tipo integer. Perchè? Forse
perchè access converte tutto nei famosi Twip anche se visualizza
misure in cm.? O per altri motivi?
Grazie ancora, se avrai ancora la voglia di rispondermi.
Con affetto e simpatia (non sto leccando!!!!)
Elio

 Elio
Scusa ma mi sono accorto che con le variabili impostate ad integer la
finsetra non funziona. Dovrebbe elencare 4 titoli di sottomaschera più
4 sottomaschere con i film da 1 mese a questa parte, divisi per
settimana d'uscita. Se lascio le variabili a single, ho la
visualizzazione corretta, se imposto integer, nella maschera principali
vedo solo i titoli delle 4 subform senza altri dati.
Se per tua curiosità volessi dargli un'occhiata, per comodità, ti
riporto interamente il codice. Io sono troppo impegnato a capire se sta
bruciadno qualcosa o se il fumo che mi circonda la testa è uscito
tutto dal mio cervello.
Salutoni.
Elio
_____________________________________________________________________________
Private Sub Form_Open(Cancel As Integer)
' Imposta i titoli per le 4 settimane
Dim data1, data2, data3, data4 As String
data1 = FormatDateTime(Date + 6 - Weekday(Date), vbLongDate)
data2 = FormatDateTime(Date + 13 - Weekday(Date), vbLongDate)
data3 = FormatDateTime(Date + 20 - Weekday(Date), vbLongDate)
data4 = FormatDateTime(Date + 27 - Weekday(Date), vbLongDate)
lblFrmSettimana1.Caption = "Al cinema dal " & Right$(data1, Len(data1)
- 8)
lblFrmSettimana2.Caption = "Al cinema dal " & Right$(data2, Len(data2)
- 8)
lblFrmSettimana3.Caption = "Al cinema dal " & Right$(data3, Len(data3)
- 8)
lblFrmSettimana4.Caption = "Al cinema dal " & Right$(data4, Len(data4)
- 8)







    Dim AltTxtTitolo As Single  'oppure integer
    Dim Twip As Integer
    Dim AltFrm1 As Single  'oppure integer
    Dim AltFrm2 As Single  'oppure integer
    Dim AltFrm3 As Single  'oppure integer
    Dim AltFrm4 As Single  'oppure integer
    Dim DistTit As Integer
    Dim DistLin As Integer
    Dim MrgFrm As Integer
    AltTxtTitolo = 0.388






End Sub

 End Sub
Quello che hai fatto è decisamente confuso, e sbagliato a livello
concettuale, nonchè continuo a trovare gli errori che ti ho detto di
correggere.....
Altra cosa che non capisco è il motivo di voler ridimensionare le
SubForm in base ai Records...?
Esiste la ScrollBars appositamente per aver una visualizzazione fissa,
che per l'utente è importantissima....., perchè mai
ridimensionare...???
Quando i Records saranno 10000 che fai un monitor apposta...?
Quando le 4 SubForms hanno un Numero di records differenti cosa ottieni
4 SubForm con altezze diverse.....??????? Non dirmi di si......!!!
;-)
@Alex

 4 SubForm con altezze diverse.....??????? Non dirmi di si......!!!
Le subform sono una sopra l'altra, non allineate orizzontalmente,
quindi la differenza di misura non disturba affatto. Inoltre sono fatte
in modo assolutamente trasparente (intendo che non ci si accorge della
loro presenza, sembra di vedere un'unica maschera con le 4 settimane e
sottoelencati i film in programmazione. A 10.000 non arriveremo mai,
essendo massimo 8 10 film per settimana (ma anche 3 o 4 a volte).
Esteticamente ti garantisco che così è tutta un'altra cosa....fidati!
Ciao.
Elio
^_*

 ^_*
Elio io mi fido solo se quanto vedo o mi spiegano ha un senso....!
A mio avviso quello che mi stai spiegando non ne ha, quindi i casi sono
2:
1)Stai dando per scontato che io abbia capito la dinamica della tua
gestione.
2)Io sono di legno.
Vedendo possibili anche entrambe le cose..... non sò che fare, ma lo
switch tra le SubForm
si fà in un modo diverso, non si mettono 4 o 5 subForm in una Form per
poi visualizzarne solo 1...!
Perchè...?
Perchè come ti dissi prima ogni oggetto associato al caricamento perde
tempo nel reperire i dati ed è illogico perdere tempo per fare
qualcosa che non si deve vedere....!
Io mi ripeto, stai facendo una cosa nel modo meno corretto, ma come è
ovvio che sia, dato dall'inesperienza lo capirai...., quello che un pò
mi scoccia è che(sempre siamo nel caso 1) vuoi convincermi che è il
modo giusto...!!
Fai come OBI-ONE-CHENOBI .... allarga la tua mente...!
Ti riporto un articolo di Karl che trovi nel suo sito:
In esecuzione vuoi usare maschere diverse come sottomaschere nello
stesso controllo sottomaschera.
Soluzione
Con VBA puoi cambiare la proprietà SourceObject del controllo
sottomaschera (nell'esempio "sfcontrol") nella maschera principale:
Me!sfcontrol.SourceObject = "MiaProssimaSottoMaschera"
Se con ciò anche i campi collegati della sottomaschera e della
maschera principale sono differenti, devi cambiare le proprietà
Collega campi secondari e Collega campi master del controllo
sottomaschera:
Me!sfcontrol.LinkChildFields = "CampoInSottomaschera"
Me!sfcontrol.LinkMasterFields = "CampoInMascheraPrincipale"
Access automaticamente collega la chiave primaria (se presente). Così
se il tuo campo collegato non è chiave primaria ne devi settare le
proprietà a NULL (o a una stringa vuota) prima di poterlo cambiare ai
nuovi valori:
Me!sfcontrol.SourceObject = "MiaProssimaSottoMaschera"
Me!sfcontrol.LinkChildFields = NULL
Me!sfcontrol.LinkMasterFields = NULL
Me!sfcontrol.LinkChildFields = "CampoInSottomaschera"
Me!sfcontrol.LinkMasterFields = "CampoInMascheraPrincipale"
Ti allego 4 Link di siti che puoi consultare come e meglio dell'Help:
http://www.donkarl.com/it/
http://www.alessandrobaraldi.it/index.asp
http://www.sitocomune.com/
http://www.riolab.org/
Ciao
@Alex


http://www.riolab.org/
Grazie, li ho messi nei preferiti!
^_^
CIao
Elio