Newsgroup: it.comp.appl.access
Titolo: elenco come stringa del contenuto di un campo dei record presenti in tabella

Access 2003 / 2010
 
Buongiorno a voi tutti.
 
Qualcuno può aiutarmi per creare una stringa in VBA, con tanto di virgola
separatrice, che contenga un elenco dei nomi del personale presente in
tabella. I nomi sono presenti anche nella form che utilizzo per accodare
alcuni valori. Detto elenco mi serve come messaggio alla fine
dell'accodamento.
Grazie, Bruno

 messaggio alla fine dell'accodamento.
 
Se capisco bene, puoi usare il codice che ho scritto in un articolo
per dimostrare l'utilitą della nuova funzione Join (12 anni fa ;-):
 
Dim rs As DAO.Recordset
 
Set rs = Me.Recordset
 
 
 
Dim strArr() As String
 
Dim i As Integer
 
Dim intCount As Integer
 
 
 
If rs.BOF Then Exit Sub
 
 
 
rs.MoveLast
 
intCount = rs.RecordCount - 1
 
ReDim strArr(intCount)
 
rs.MoveFirst
 
 
 
For i = 0 To intCount - 1
 
    strArr(i) = Nz(rs!NomeCampo, "nessuno")
 
    rs.MoveNext
 
Next i
 
 
 
MsgBox Join(strArr, ",")
 
 
-- 
Ciao
Karl
*********
Access FAQ:  
http://www.donkarl.com/it
 
 
 

on 29-05-13, Bruno62 supposed :

=================================
Private Sub Command8_Click()
Dim S As String
 
Recordset.MoveFirst
Do Until Recordset.EOF
    S = S & Recordset![NomeCampo] & ", "
    Recordset.MoveNext
Loop
MsgBox Mid(S, 1, Len(S) - 2)
 
End Sub
=================================
 
Bruno
 
 


Per questa volta io mi appoggerei ad ADO, precisamente al metodo
GetRows, senza Cicli ottieni un'array esattemente con una chiamata,
poi come ha suggerito Karl... JOIN...:
 
http://msdn.microsoft.com/en-us/library/windows/desktop/ms675120%28v=vs.85%29.aspx
 
 
Saluti
@Alex

 poi come ha suggerito Karl... JOIN...:
 
Senza cicli... lo dici come fosse una verità.
Le cose bisogna andarle a cercare dove si trovano.
E se si trovano all'interno di un recordset l'unica maniera
di reperirle è quella di fare una scansione sul medesimo.
Con un For...Next la scansione la fai tu, per altre vie la
scansione la fa Access.
 
Il codice è più efficiente, più compatto?
Quello di Karl non lo è, fammi vedere il tuo.
 
E poi dove metti la soddisfazione di entrar
nelle segrete cose di tuo pugno?
 
Bruno
 
 

 Bruno
 
Bruno... non ho capito nulla... ti hanno mozzato l'indice....?
;-)
 
@Alex


Grazie a tutti e tre, kart, Alex e Bruno.
Vista la mia scarsissima esperienza di codice ho trovato più chiara e
semplice la routine di Bruno che funziona alla grande anche inserito nel
mezzo dell'altro codice per l'esecuzione di query di accoramento.
Unica cosa che devo risolvere e far leggere il nome della persona anziché
l'Id. Il nome si trova nella colonna 2 della comon box.
 
Grazie,
 
BrunoM

Bruno62 used his keyboard to write :

Cioè prende l'ID dal Recordset della scheda poi deve andare a leggere 
il corrispondente nome sulla combo box?
Oppure il Recordset della scheda proprio non c'entra e si trova il 
tutto sulla combo?
Spiegati meglio...
 
Bruno
 
 


//////
 
Ciao Bruno.... Certo che fa impressione salutare se stessi. Scherzo!
Allora, cercò di chiarire meglio.
È presente una tabella tbl_MilitariCaricati usata per accodare le date del
mese con ogni militare ed altri dati d'interesse in altra tabella
tbl_servizi. La tabella tbl_Caricati contiene solo l'ID del Militare e un
altro campo numerico per accoppiare i militari nello stesso turno
desiderato. La tbl_militariCaricati è collegata ad una form
MilitariCaricati che contiene una combo con due colonne, id militare cm 0
(nascosta) e il nome del militare che viene preso come elenco dalla
relazione tra l'id della tabella militari caricati e l'id del militare
contenuto in altra tabella chiamata Tbl_Militari, ove sono presenti.tutti i
dati di ogni militare.
Nel tuo codice Ho provato ad aggiungere la form militariCaricati con il
campo idMil.column(1), ricevendo una bella pernacchia,
Grazie, Bruno

 Grazie, Bruno
 
Dunque, per farla breve, l'ID catturato dal Recordset serve solo per 
andare a pescare in Tbl_Militari il corrispondente nome.
Quindi la stringa S dovrà contenere i nomi separati da virgola (con 
anche gli ID?)
 
Bruno
 
 


/////
 
Buongiorno Bruno, o buon riposo se stai riposando; visto l'orario della tua
risposta sicuramente sei a nanna.
Si è corretto, la stringa S anziché estrapolare lID militare Dovrà
estrapolare solamente i Nomi/Cognomi dei militari dalla tbl_Militari (senza
ID).
Ciao, Bruno


/////----
 
Ciao Bruno, senza grande consapevolezza su quello che scrivevo ho risolto
modificando il tuo codice. Vedi routine.
Tieni conto che non ho molta dimestichezza con il VBA, mentre me la cavo
con il resto di Access.
Piccolo OT: Mi consiglieresti un gran bel testo completo di VBA; ho chiesto
anche ad Alex che probabilmente non ha letto il mio post d'aiuto. Ciao,
Bruno
 
Private Sub Accoda_Click()
 
    On Error GoTo Err_Accoda_Click
 
    Dim QryName As String
 
        If Me.NomeCombo = "" Then
            MsgBox ("Effettuare una selezione per creare i servizi o un
elenco giorni licenze annuali")
            Me.NomeCombo.SetFocus
 
        ElseIf Me.NomeCombo <> "" And DLookup("[Anno]", "tbl_141_Servizi",
"[Anno] = [Maschere]![frm_141_MilitariCaricati]![FiltroAnno]") =
Me.[FiltroAnno] And DLookup("[Mese]", "tbl_141_Servizi", "[Mese] =
[Maschere]![frm_141_MilitariCaricati]![FiltroMese]") = Me.[FiltroMese] Then
            QryName = Me.NomeCombo
            MsgBox ("Attenzione! Periodo già presente.")
        Else
 
            QryName = Me.NomeCombo
            DoCmd.OpenQuery QryName, acNormal, acEdit
            'MsgBox ("Creazione effettuata!")
 
 
            Dim S As String
            Dim M As String
 
            Recordset.MoveFirst
            Do Until Recordset.EOF
 
            M = DLookup("[Cogn]", "tbl_141_Militari", "[IdMil] =
[Maschere]![frm_141_MilitariCaricati]![IdMil]")
 
            S = S & "(" & Recordset![IdMil] & " - " & [M] & "), "
            Recordset.MoveNext
            Loop
            MsgBox ("Creazione effettuata per " & Mid(S, 1, Len(S) - 2))
 
        End If
 
Exit_Accoda_Click:
    Exit Sub
 
Err_Accoda_Click:
    MsgBox Err.description
    Resume Exit_Accoda_Click
 
End Sub

 anche ad Alex che probabilmente non ha letto il mio post d'aiuto. Ciao,
Non conosco testi per apprendere la programmazione di Access.
Conosco l'arte di arrangiarsi con le mani e coi piedi, con Internet e i 
NG. E soprattutto rifuggo dalle esemplificazioni di Microsoft: sanno 
costruire linguaggi ma poi li programmano alla Fantozzi.
 
Stammi bene.
Bruno
 
 

 ha scritto:

Bhe te la cavi bene nell'arrangiarti, contrariamente a me. Sei
 stato molto gentile. Grazie, Bruno