Newsgroup: it.comp.appl.access
Titolo: popolare una Casella di Riepilogo

Buonasera a tutto Il NG.
Una volta ottenute le righe del Recordset, come si fa a popolare la Casella
di Riepilogo?
Come si "punta" ad essa?
Sono sulla strada giusta o sbaglio sin dalla partenza?
Su un libro ho trovato una Public Function apposita. (Anche se un pò troppo
complicata...)
Il libro dice di copiare il nome della funzione nella proprietà "Tipo
origine Riga" della casella
ma la cosa non funziona. Qual'è la strada corretta?
--------------------------------
Inviato via 
http://arianna.libero.it/usenet/


contrariamente a VB, su Access non si può associare ad un controllo un
recordset già creato a livello di oggetto. E' però possibile,
sfruttando la proprietà Origine Controllo (ControlSource) impostare
una query o una tabella per popolare il controllo (Guarda sull'help per
ulteriori informazioni)
ciao

wlady ha scritto:

Sbagli, anche con VBA(Access) dalla versione 2000 è possibile.
Verifica e vedrai che Combo, List ed anche Form espongono la proprietà
Recordset
che può essere usata per popolarli.
Set Rs=CurrentDb.OpenRecordset(...........)
Set Me!NomeListBox.Recordset = Rs 
@Alex

Alessandro Baraldi ha scritto:

In effetti essendo da sempre applicatomi esclusivamente su VB non
notai, ai miei primi approcci in Access (versione 97), la possibilità
di associare un recordset come origine dati.
Grazie della dritta Alex :-)
ciao

 >
Scusate ma non ho capito quasi nulla.
Questo codice è Ado o Dao? Se non ricordo male è Dao...
Io uso:
Dim Rs As ADODB.Recordset
Set Rs = New ADODB.Recordset
...funzionerà?...E poi il recordset è costituito da una Query Parametrica
aperta in VBA.
...Funzionerà? LO Provo. Ciao grazie.



No non funziona!
Proprietà o metodo non supportati dall'oggetto
Set [Forms]![Clienti1]![DettAttività Sottomaschera1].[Form]![Casella
DiRielpilogo] = RS
Che fare?


marioP ha scritto:

Perchè usi ADO...?
Access al suo interno usa(a meno di un lavorare con ADP) DAO, quindi
usare
ADO è una perdita di tempo per il sistema nonchè un modo facile per
non far funzionare le cose.
In ogni caso non hai nemmeno detto come carichi il Recordset....
cheversione
di Access stai usando ecc...!
Quando sarai più chiaro tecnicamente possiamo aiutarti.
@Alex

C'era una volta un paradiso tranquillo chiamato DAO
Poi venne il serpente tentatore e disse "Mangia di questo frutto e sarai
LIBERO"
Niente di più falso! E' vero, sono anni che mi schiavizza.
1° domanda:
Mi consigliate di togliere la Libreria ADO, oppure, (visto che molti
progetti ormai sono sviluppati con quella libreria), basta dare la priorità
a DAO?
2° domanda :
Qualcuno mi ha consigliato
Set Rs=CurrentDb.OpenRecordset(...........)
Set Me!NomeListBox.Recordset = Rs
Ho provato a dare priorità a DAO (senza disattivare la lib. ADO)
ed usare questo codice ma nella mia versione di Access 2000 (9.0 etc)
la casella di Riepilogo non ha la proprietà .Recordset e quindi non mi fa
andare avanti.
...Non credevo che caricare una List Box mi avrebbe quasi rovinato l'estate.
Sto letteralmente impazzendo!


 DiRielpilogo] = RS
Qui, ad occhio, gli stai dicendo che la listbox deve diventare un 
recordset (dao o ado poco importa) non credo che sia una cosa permessa.
Immagino che tu fai questa cosa sulla open del subform (e/o dovresti 
farla ad ogni modifica dei parametri previsti dalla query).
Scrivere set caselladiriepilogo.Recordset = rs non e'piu' breve?
Ho compreso che hai una query salvata ma mettere quel codice (sql) nel 
rowsource, no?
caselladiriepilogo.rowsource = stringasql, dove probabilmente la stringa 
si dovrebbe ridurre a : "Select * from query where par1=" & 
valrecontrollo1 & "and ....... and parn=" &  valorecontrollon
(togliendo i parametri dalla query)
Capisco che la possibilita' di assegnare un rs e' importante ma tutto 
cio' lo vedo se il tuo rs e' gia' bello e pronto.
Aprire un rs specifico (dao o ado che sia)  per poi assegnarlo al 
recordset del list box mi sembra un tantino contorto.
a seguire un esempio di impostazione dinamica del rowsource
Private Sub setRowSource()
Dim sSql As String
If "" & OpenArgs = "Fatture" Then
     sSql = "select idfattura as Fattura ,soci as 
Cliente,DataFattura,right(space(10) & 
format(sommadiimporto,'#,##0.00'),10) as Importo"
     sSql = sSql & " from FT_Fatture where left(idfattura,2) = '" & 
Right(tAnno, 2) & "'"
Else
     sSql = "select idnota as 
NumeroNota,Anagrafica,DataNota,right(space(10) & 
format(importo,'#,##0.00'),10) as TotImporto"
     sSql = sSql & " from NS_listanotaspese where left(idnota,2) = '" & 
Right(tAnno, 2) & "'"
End If
eTitolo.Caption = "Elenco " & OpenArgs
lLista.RowSource = sSql
End Sub
nell'esempio sia FT_Fatture che NS_listanotaspese sono due query
--
ac


_____________________________________________________
Dimenticavo:
Il recordset da usare per popolare la ListBox è
una query Parametrica (il che complica le cose!?)
Qualche giorno fa Ms. Giorgio Rancati (che ringrazio)
 mi ha passato la routine per aprire la Query Parametrica
 
Dim rs As New ADODB.Recordset
   Dim Cn As ADODB.Connection
 
Dim Anno, Porto, Servizio As String
 
   Set Cn = CurrentProject.Connection
'Parametri
Anno = [Forms]![Clienti1]![Anno]
Porto = [Forms]![Clienti1]![Porto]
Servizio = [Forms]![Clienti1]![DettAttività
Sottomaschera1].[Form]![Servizio]
   'Apro il recordset
    Cn.[QueryArrivo] Anno, Porto, Servizio, rs
 
cut
Ammesso che trovi il modo di passare i valori alla mia ListBox con DAO,
Funzionerà questo codice (Che mi sembra usare libreria ADO?)
...Sto per suicidarmi :-)


 ac
Non ho mai composto una srtinga SQL così, è un po complessa per le mie
conoscenze ma proverò; grazie!


    dei Campi che nella listBox diventeranno Record!
Non urlare, per favore, ci sento benissimo ;<)
Quello che dici si era capito
La cosa che vuoi e':
Tipo origine riga: Tabella/query
Origine Riga: Una tabella o una query o un sql (diretto)
Nel tuo caso  l'unico problema e' che hai una query parametrica e quindi 
e' necessario costruire l'sql in modo dinamico e metterlo nel rowsource 
(Origine Riga)
Io ho un ambiente ac2003 con db di tipo ac2000 e ti posso assicurare che 
la proprieta' recordset sulla listbox c'e'.
Nella listbox i campi "non" diventano record. I campi, di ciascun 
record, vanno a formare una collezione che si chiama "column"
questo e' l'help relativo
---------proprietà Column
È possibile utilizzare la proprietà Column per fare riferimento a una 
determinata colonna o a una combinazione di colonna e riga contenute in 
una casella combinata o casella di riepilogo a più colonne. Elemento 
Variant in sola lettura.
espressione.Column(Indice, Riga)
espressione      Obbligatorio. Espressione che restituisce uno degli 
oggetti indicati nell'elenco Si applica a.
Indice     Elemento Long obbligatorio. Numero intero Long compreso tra 0 
e l'impostazione della proprietà ColumnCount meno uno.
Riga     Elemento Variant facoltativo. Numero intero compreso tra 0 e 
l'impostazione della proprietà ListCount meno uno.
È possibile impostare questa proprietà solo utilizzando una macro o 
Visual Basic. L'impostazione di questa proprietà non è disponibile in 
visualizzazione Struttura ed è di sola lettura in altre visualizzazioni.
Osservazioni
Utilizzare 0 per fare riferimento alla prima colonna, 1 per fare 
riferimento alla seconda e così via. Utilizzare 0 per fare riferimento 
alla prima riga, 1 per fare riferimento alla seconda e così via. In una 
casella di riepilogo che include, ad esempio, una colonna con gli ID dei 
clienti e una colonna con i nomi dei clienti, è possibile fare 
riferimento al nome del cliente presente nella seconda colonna e nella 
quinta riga come indicato di seguito:
Forms!Contatti!Clienti.Column(1, 4)
È possibile utilizzare la proprietà Column per assegnare il contenuto di 
una casella combinata o di una casella di riepilogo a un altro 
controllo, quale una casella di testo. Per impostare, ad esempio, la 
proprietà ControlSource di una casella di testo al valore presente nella 
seconda colonna di una casella di riepilogo, è possibile utilizzare la 
seguente espressione:
=Forms!Customers!CompanyName.Column(1)
 
Se non si effettua alcuna selezione quando si fa riferimento a una 
colonna in una casella combinata o in una casella di riepilogo, 
l'impostazione della proprietà Column sarà Null. È possibile utilizzare 
la funzione IsNull per determinare se è stata effettuata una selezione, 
come nell'esempio seguente:
If IsNull(Forms!Customers!Country)
     Then MsgBox "No selection."
End If
 
--
ac


Si conosco questa proprietà....ma sono ancora lontano dal capire il suo
utilizzo nella mia faccenda.
Per ora sono tutto preso dal popolare la casella e non leggerla.
E' importante conoscere la risposta di cui sopra:
Una volta creata la Stringa parametrica SQL , con qual comando devo aprire
il Recordset?
.Open no xchè apre una query non parametrica
.RunSQL no perchè è una Query SELECT
Forse hai detto così:
CasellaRiepilogo.rowsource = sSQL
dove sSQL è una variabile creata in precedenza?
Scusa sono cun pò confuso.

--------------------------------
Inviato via 
http://arianna.libero.it/usenet/

 il Recordset?
Non devi aprire alcun recordset devi solo mettere la stringa corretta 
nel rowsource della listbox. Al resto ci pensa access.
[cut]


OK Alessandro! Ci sono riuscito. Mi sono illuminato! Grazie.
Ora il problema è che quando un campo è vuoto mi dice che non accetta il
Null
ma a me non serve che mi restituisca un msgbox come nell'esempio ma che
metta null.
Provo a dirglielo ; vediamo che se s'incazza. GRAZIE!


Noooo! Ho parlato troppo in fretta. Guarda a che punto sono:
Dim sSql As String
Dim d1, d2, d3, d4 As String
sSql = "SELECT DISTINCTROW Capitolato.Anno, Capitolato.Porto,
Capitolato.Servizio, Capitolato.Appr_Mov, Capitolato.Descr,
Capitolato.Descr2, Capitolato.Descr3, Capitolato.Descr4, Capitolato.Descr5 "
_
& "FROM Capitolato INNER JOIN TariffaBase ON Capitolato.IDCapitolato =
TariffaBase.IdNomeTariffaBase " _
& "WHERE (((Capitolato.Anno)=[forms]![Clienti1]![Anno]) AND
((Capitolato.Porto)=[forms]![Clienti1]![Porto]) AND
((Capitolato.Servizio)=[forms]![Clienti1]![DettAttività
Sottomaschera1].[form]![Servizio]) AND ((Capitolato.Appr_Mov)=2));"
A me serve il contenuto dei campi Descr, Descr1,Descr2,Descr3,Descr4,Descr5
OK?
ed inserire il loro valore (Come "Righe") nella Lista
Me.Elenco68.RowSource = sSql
d1 = Me.Elenco68.Column(4)
d2 = Me.Elenco68.Column(5)
d3 = Me.Elenco68.Column(6)
d4 = Me.Elenco68.Column(7)
OK . Legge tutti i valori ma la list Box li visualizza come colonne.
Posso convincerla di popolarsi sottoforma di Records?


 Posso convincerla di popolarsi sottoforma di Records?
No usa un form di tipo "Maschere Continue" o "Foglio dati".
Sempre che abbia capito cosa vuoi fare.
Continui a parlare di records. Non capisco che cosa intendi e cosa vuoi 
ottenere.
--
ac

Alessandro Cara ha scritto:

Auguri leggi il nuovo 3D...!
@Alex


Si l'ho visto. Grazie.
Stiamo andando in loop. Ora Roberto ha ricominciato con la solfa del 
recordset.
--
ac

 ac
Si ho troppo caldo per riuscire a discriminare la volontà altrui...!
@Alex