Newsgroup: it.comp.appl.access
Titolo: Costruire dinamicamente i nomi delle variabili

E' possibile costruire in modo dinamico i nomi delle variabili in Access 97?
(Tipo: A = "01"; B = Importo&A come se NEL CODICE fosse scritto B=Importo01)
Ho trovato Me() con cui e' possibile farlo, MA SOLO per citare i controlli
su maschera o report (vedi sotto esempio su Report di "evidenziatore giallo"
di campi della riga a nome Valore_nn ove nn=01,02,.. etc.); mi servirebbe
poter citare allo stesso modo anche i campi  di una Tabella che si chiamano,
ad es.,  Nome01, Nome02 etc.
Private Sub Evidenziatore(NumCampi As Integer, RadiceNomeCampo As String)
   Dim campo As Control, nn As Integer
   For nn = 1 To NumCampi
         Set campo = Me(RadiceNomeCampo & Format(nn, "00"))
         campo.BackColor = IIf(Left(campo, 1) = "*", vbYellow, vbWhite)
       ' NOTA: Left(campo, 1) = "*" tanto per dirne una
    Next
End Sub
'ES.: in Sub Corpo_Format -> Call Evidenziatore(14, "Valore_")
C'e' un altro modo per farlo meglio? Correggete, correggete, correggete...
Saluti.
Luciano G.
-- 
Posted from 
mail-4.tiscalinet.it
 [195.130.225.150] 
via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 ad es.,  Nome01, Nome02 etc.
O crei un controllo associato al campo:
varA = "pippo"
varB = varA & me.miocontrollo
Oppure ti apri  un recordset sulla tabella, recuperi il valore che ti serve
e lo ficchi nella variabile allo stesso modo.
Saluti.
Luciano
(DOC)

[Luciano (DOC)]: Si, ovviamente devi stare attento ai tipi di dati.
[Luciano G.]: Ho paura che non ci siamo capiti. Non voglio concatenare
stringe come CONTENUTO di una variabile, ma voglio CITARE A LIVELLO
DI CODICE un campo di Tabella "dicendo" ad Access come deve
costruirsene il nome nel punto di citazione.
Esempio: ho una ipotetica Tabella con campi a nome Campo1,
Campo2, Campo3, etc.
Voglio, ad es., metterci DENTRO un progressivo, ma SENZA scrivere:
Campo1 = n
Campo2 = n + 1
e cosi' via per altre 28 volte,
BENSI' vorrei poter scrivere:
FOR n=1 to 30
        Campo...(come lo scrivo ?) = n
Next
(anche se, dal punto di vista dell'esecuzione, sarebbe piu' veloce
(infinitesimi) scritto nel primo modo!)
Se invece di essere un campo fosse un controllo potrei scrivere
(almeno, cosi' mi funziona):
FOR n=1 to 30
        Me("Campo" & Format(n, "0")) = n
Next
ma qui i controlli sono gia' "previsti a disegno", se voglio maneggiare nel
modo detto i nomi dei campi di una Tabella, non posso mica starne a creare i
corrispondenti controlli associati solo per poter risparmiare delle righe di
codice.
Da Luciano a Luciano, grazie, ciao.
-- 
Posted from 
mail-6.tiscalinet.it
 [195.130.225.152] 


Devi utilizzare gli insiemi, ovvero  Fields se sono campi di una tabella
oppure Controls se sono controlli;
in questo modo puoi riferirti ad essi costruendone il nome come stringa:
ES:        rst.Fields("Campo" & n) = 55
             Me.Controls("Campo" & n) = 55
CIAO


 wrote in message
news:002701c0da0c$d7195c00$89550b3e@usrguest...

Ecco cosa ho provato, e funziona!!
Sub test ()
   Dim db As Database
   Dim rs As Recordset
   Dim Cnt As Integer
   Set db = CodeDB()
   Set rs = db.OpenRecordset("Table1")
   rs.AddNew
   For Cnt = 1 To 30
      rs("Campo" & Cnt) = Cnt
   Next
   rs.Update
   rs.Close
   db.Close
End Sub
Ciao!
Esteban
Hosted by 
www.seber.it

Nel frettempo  ho trovato che oltre a poter scrivere per i controlli
di nome Campo_1, Campo_2 etc.
                Me("Campo_" & Format(n, "0")) = .....
posso scrivere per i campi di stesso nome:
                rst.Fields("Campo_" & Format(n, "0")) = .....
ove rst e' un recordset
e con cio' il problema sintattico,
per un loop di n evenienze, mi pare risolto
(per le variabili in memoria uso matrici).
L.G.
-- 
Posted from 
mail-4.tiscalinet.it
 [195.130.225.150] 
