Newsgroup: it.comp.lang.visual-basic
Titolo: Come riempire velocemente una matrice di textbox.. ?

Innanzitutto abbiate pieta' di me, ma sto cercando di oliare la mia vecchia
mentalita' da basic del C64 per farla funzionare con 'sti maledetti
oggetti-controlli-proprieta' etc.etc...
Ecco il mio problema :
Vorrei fare in modo che (all'apertura di un form) la proprieta' "Text" di
una matrice di text-box (grande quanto il numero dei campi di un db) venga
riempita dal relativo valore contenuto nel campo corrispondente.
Esempio :
Cognome = Rossi                Text1(1).text = "Rossi"
Nome      = Mario               Text1(2).text = "Mario"
Via           = Verdi 15          Text1(3).text = "Verdi 15"
Citta         = Roma               Text1(4).text = "Roma"
etc. etc.etc.etc.....
Sul form ho messo un controllo DATA con la proprieta "RecordSource"
impostata sulla tabella che contiene i records che mi interessano.
Pensavo di realizzare la cosa utilizzando un ciclo FOR - NEXT piu' o meno
cosi' :
For a=1 to n     ' Dove n=numero totale dei campi della tabelle
    text1(a).text = data1.  ????????? (Quale proprieta' e/o metodo devo
utilizzare ????)
next a
Grazie anticipatamente a chi mi dara' una mano
Aldo

 wrote in message
fWkf6.105355$ew1.6...@news.infostrada.it...

Le textBox sono dei consumatori di dati e, di conseguenza posseggono le
proprietà DataSource e DataField
Per ogni textbox puoi quindi impostare:
DataSource => nome del tuo DataControl
DataField => riferimento al campo.
Poi fai sì che all'apertura del form, il DataControl punti al record
desiderato oppure imposti la proprietà RecordSource del tuo DataControl ad
una stringa SQL che punti il record che ti interessa.
Se tutto ciò vorresti farlo da codice...bhe, allora ne riparliamo (adesso è
tardino!)
ciao
dickie

 tardino!)
Ok ... allora ti auguro la buona notte !
Se ti va, ci sentiamo domani !!!
Ciao
Aldo


Se vuoi tenere i textbox scollegati dal database, quindi gestire manualmente 
le modifiche, e caricare a loop tali controlli, devi sapere in quale ordine
sono i campi del recordset sorgente.
Quindi l' ideale sarebbe che il sql sorgente del data control fosse
un' istruzione 
"select <lista_campi> 
from <nome_tabella> 
where <eventuale_condizione_di_filtro>
order by <eventuale_criterio_di_ordinamento>"
A qusto punto il loop diventa:
Dim i As Long
With Data1
      For i = 0 To .Recordset.Fields.Count -1
          // concatena a stringa vuota per non avere errore di Null
          Text1(i).Text = "" & .Recordset(i).Value
      Next i
End With 
Ciao
Aldo

 ha scritto nel messaggio
news:95kmjb$57p$1...@lacerta.tiscalinet.it...
--- cut---


 ha scritto nel messaggio
news:95knhv$h68pr$2...@ID-56381.news.dfncis.de...
---cut---


 next a
Non capisco se sei al corrente o meno dell'esistenza della proprieta`
"DataField" dei controlli. Nel caso consulta la guida in proposito.
La matrice di controlli Text1 viene creata in fase di progettazione o in
esecuzione? Nel primo caso, progettazione, dovrai appunto assegnare alla
proprieta` DataField di ciascun controllo il nome nel campo collegato; nel
caso tale matrice venga creata durante l'esecuzione del programma la cosa
non cambia di molto ma potrai scegliere se assegnare in base al nome o
all'indice del campo. Dato che i campi hanno indice a base zero sarebbe
conveniente che anche gli elementi della matrice partissero da tale valore.
In pratica le proprieta` fondamentali sono:
. per il controllo Data: DatabaseName e RecordSource;
. per i controlli legati ai campi, in questo caso Text1(): DataSource e
DataField.
Nel caso effettivamente dovessi legare i controlli ai campi in fase di
esecuzione, dovresti scrivere qualcosa del genere:
Option Explicit
Private Sub Form_Activate( _
)
  Dim intIndex As Integer
  With Data1.Recordset.Fields
    For intIndex = 0 To .Count - 1
      Text1(intIndex).DataField = .Item(intIndex).Name
    Next
  End With
End Sub
--
Ciao.
Maurizio
--------
?SPQR(C)
 X
--------


bisogna usare la funzione IsNull, quindi :
if isnull(data1.recordset.fields(a).value then ....
ciao
Enrico

 ALdo
Il problema è che se vuoi definire in fase di esecuzione (cioè da codice) un
riferimento alla proprietà DataField delle varie text, allora devi anche
definire per esse la proprietà DataSource...ed io non sono mai riuscito a
capire come si faccia.
cioè da codice dovresti scrivere qualcosa come
For i = 0 to numero_delle_ tue_text - 1
  text(i).DataSource = Data1.name
  text(i).DataField =  Data1.Recordset.Fields(i).Name
next i
ma il debugger di VB, sicuramente per qualche buona ragione, ti dice molto
gentilmente che hai scritto una stronzata!
Giuro che ho provato -a suo tempo- in ogni modo possibile (fra quelli a me
conosciuti), ma il debugger ha continuato a darmi del cretino!
Va da sé che dopo un po' mi sono stancato di questo rapporto sadomaso col
debugger e mi sono detto:
- Beh, se Maometto non va alla montagna, allora la montagna andrà da
Maometto! (e ho cambiato religione ;-) No, scherzo!)
Ci sarà un modo per creare una connessione al database e un riferimento ad
un recordset (una tabella, ad esempio) senza dipendere dal DataControl!?!
...non l'avessi mai detto!...una voce profonda ha tuonato dall'alto:
"Benvenuto nel meraviglioso mondo di DAO!...e mo' so cazzi tuoi!" - ha
tremato la terra e si è creato un varco nella montagna do prima.
Forse anche per te è arrivato il momento di conoscere il sig. DAO. Che fai,
entri?
Bene!
Con il controllo DataControl tu crei un riferimento ad una sorgente di dati
(un recordset) e lo fai attraverso le sue proprietà
- Database.name => che definisce la connessione al database
- RecordSource => che definisce il riferimento al recordset.
Inoltre ti muovi nei vari record del recordset (ricordi la storia del
'record corrente'?) con i tastini del controllo.
Ebbene puoi crearti una connessione ad un database ed un riferimento ad un
recordset da codice senza bisogno di un DataControl. Come? Utilizzando gli
oggetti DAO!
Da codice:
-dichiari un oggetto database e un oggetto recordset con
    Dim mioDB as Database
    Dim mioRS as Recordset
- ti connetti al tuo database con
    Set DB = OpenDatabase(" indirizzo completo del tuo database -del tipo
'C:\...' ")
- e alla tua tabella con
    Set RS = DB.OpenRecordset(" nome della tua tabella o stringa SQL ")
...e da questo momento in poi puoi:
- muoverti nei vari record di RS con i metodi Move (MoveFirst, MoveLast,
MoveNext, MovePrewius)
- accedere ai nomi dei campi di RS con RS.Fields(indice -che inizia da
0-).Name
- accedere ai valori dei campi di RS con RS.Fields(indice -che inizia da
0-).Value [ma 'value è la proprietà predefinita, quindi puoi ometterla!]
- ecc. ecc.
ma ciò che è più importante, visualizzare i tuoi valori in una matrice di
controlli con un ciclo del tipo
For i = 0 to tuamatrice.Count - 1
    tuamatrice(i) = RS.Fields(i)
next i
naturalmente per 'muoverti' nei vari record dovrai disporre di pulsante con
del codice adatto, che comprenda qualcosa del tipo:
RS.MoveNext
Dico 'del codice adatto, perchè dovrai anche dirgli cosa deve fare quando si
trova nell'ultimo record (EOF) e cerca di andare avanti verso un record che
non esiste.
Ma questo e molto altro, alla prossima!
Benvenuto nel meraviglioso mondo del DAO e...Buon divertimento!
dickie

 "Benvenuto nel meraviglioso mondo di DAO!...e mo' so cazzi tuoi!" - ha
tremato la terra e si è creato un varco nella montagna do prima.
[...]


 ha scritto nel messaggio
news:95m2qj$gat$1...@lacerta.tiscalinet.it...
---- super cut ----


 End Sub
Io ho realizzato la cosa in questo modo, ho sbagliato forse ?
For a = 1 To Data1.Recordset.Fields.Count - 1
Text1(a - 1).Text = "" & Data1.Recordset.Fields(a).Value
Next a
Il ciclo l'ho fatto iniziare da 1 in quanto il primo campo del db e' un
contatore.
Per aggiustare la relazione tra le Textbox ed i campi del db, diminuisco di
1 l'indice di riferimento delle textbox .... un po' contorto ma funziona. ..
spero .... !
Ciao
Aldo

 spero .... !
Piu` che contorto direi che e` normale. Da un certo punto di vista e`
"contorta" tutta l'attivita` del programmare. :-)


 "contorta" tutta l'attivita` del programmare. :-)
Se quello che dici e' vero, credo che ho buone possibilita' di diventare un
grande programmatore !!!
:-)
Ciao e ancora grazie
Aldo
P.S.
Complimenti per il tuo spiccato senso dell'umorismo.
Lo hai sempre avuto oppure e' una reazione di difesa della tua psiche
avvenuta successivamente alla qualifica di programmatore di VB ???
:-))

     [...] Non disponibile in fase di esecuzione."
Leggere? Scherzi!
Ho appena imparato a scrivere. Dammi tempo.
Per adesso mi limito a guardare le figure!
;-) cià
dickie

 Dato che mi ritengo un medio mi fermo e taglio. :-)))
Il solito modesto ..............      :-)
Ciao
Aldo

 Scusa la mia ignoranza ... ma cosa dice questo principio ?
E` il cd "principio di conservazione dell'energia" o dell'equivalenza tra
calore e lavoro.
Siccome la termodinamica e` la "parte della termologia che studia le leggi
relative a scambi di energia (sia sotto forma di lavoro sia sotto forma di
quantita` di calore) tra corpi o tra sistemi termodinamici. Piu`
semplicemente, seguendo la tradizione, si puo` dire che la t. si occupa
delle trasformazioni di calore in lavoro o viceversa;" (1) talvolta si fa
scherzosamente riferimento ad essa a proposito della trasformazione del
lavoro in... sudore e viceversa. ;-)
__________
(1) _Enciclopedia Scientifica Tecnica Garzanti_
