Newsgroup: it.comp.lang.visual-basic
Titolo: [VB6] combo associate a db access....

Salve ragazzi avrei un problema, dovrei inserire almeno 10 combo in un form
di inserimento dati che ho creato per la mia applicazione.
mi spiego meglio:
ho un form child
nel load di tale form apro la connessione al db che mi interessa..ok
e dichiaro tutti i recordset che mi serveno.... tutto a posto
supponiamo che la mia tabella sia composta di 5 campi: a, ab, abc, abd,
vorrei che cliccando sulla combo, associata al recordset che contiene i
campi di cui sopra, appaia solamente a,
sul click della combo devo dirgli che i dati "a" vanno poi inseriti nella
txt1.text, i dati del campo "b" nella txt2.text e cosi via
come posso fare, non ho mai utilizzato le combo con i db
ciao e grazie a tutti

Nella proprietą DataSource del Combo gli assegni un controllo Data, al quale
ai gią impostato un Db e una tabella, e nella porp. DataFild del C. gli
assegni un campo. Il combo si dovrebbe popolare automaticamente con le voci
contenute nel campo. Un altro consiglio, assegna tutto da codice usando
l'istr. 'App.Path' per il Db.
spero di averti risolto il problema.
Ciao, Luciano.







ai già impostato un Db e una tabella, e nella porp. DataFild del C. gli


Ciao Marco,
indubbiamente cosě facendo appesantisci di molto la struttura del tuo
programma. Non campisco perň, perchč hai la necessitŕ di aprire e chiudere i
recordset. Forse mi ripeto, ma non č piů facile aprirli una volta per
riempire i combo e eventualmente ti serva, aprilri quando viene selezionata
una voce?.
Con qualche chiarimento in piů forse potrei aiutarti meglio...
Ti saluto e fammi sapere.
Ciao Luciano.

Con qualche chiarimento in più forse potrei aiutarti meglio...


Allora, da quanto ho capito (e correggimi se sbaglio), tu conosci il numero
delle tabelle e anche quali sono, e ad ognuna di essa gli hai associato un
combo, di conseguenza non mi faccio capace del perchč dei aprire e chiudere
continuamente i rs, cosě facendo hai uno spreco di risorse enorme. Ora, il
mio consiglio č quello di aprire i vari rs che ti servono nell'Activate del
Form (preferibilmente piuttosto che nel Load) e popolare i combo con le voci
che ti servono. Nell'evento Click di ogni combo fai le Query di ricerca che
ti servono per aggiornare i Text.
Se ti serve un esempio pratico dimmelo che ti posto il codice.
Ciao e Fammi Sapere.
Luciano Luc...@Healthware.it .



che ti servono.
nell'Activate non mi piace tanto perchč se visualizzo una seconda Form
quando la prima riacquista il focus ricarica tutto... se proprio vuoi
metterlo nell'Activate usa una variabile booleana statica in modo che il
caricamento avvenga una volta sola
ciao
Faber
P.S.: perchč non nel Form_Load?

 ti servono per aggiornare i Text.
ciao luciano (o giovanni ? :)
perche' nell'activate ?
(io di solito riempo i combo nel load e non ho trovato particolari problemi)
ciao, a.

Allora, da quanto ho capito (e correggimi se sbaglio), tu conosci il numero
delle tabelle e anche quali sono, e ad ognuna di essa gli hai associato un
combo, di conseguenza non mi faccio capace del perchč dei aprire e chiudere
continuamente i rs, cosě facendo hai uno spreco di risorse enorme. Ora, il
mio consiglio č quello di aprire i vari rs che ti servono nell'Activate del
Form (preferibilmente piuttosto che nel Load) e popolare i combo con le voci
che ti servono. Nell'evento Click di ogni combo fai le Query di ricerca che
ti servono per aggiornare i Text.
Se ti serve un esempio pratico dimmelo che ti posto il codice.


Confermo l'idea della variabile booleana :)
Ciao Luciano.

Ciao Pal (sono Luciano... Luciano)
è preferibile nell'Activate perchè quando richiami una qualsiasi cosa di un
form dall'esterno, essa fa si che il form venga caricato in memoria. L'unico
inconveniente dell'Activate è che mentre esegue le sue istruzioni (se sono
molte e pesanti per il sistema) non visualizza correttamente la form finchè
non ha finito di eseguire le operazioni. Una possibilità per ovviare a
questo problema potrebbe essere quella di mettere un DoEventes
nell'Activate.
Luciano



 mio consiglio è quello di aprire i vari rs che ti servono nell'Activate


Private Sub Combo1_Click()
  Dim Db As Database
  Dim Rs As Recordset
  Set Db = OpenDatabase(App.Path & "\Database.mdb")
  Set Rs = Db.OpenRecordset("select * from Tebella where Campo = " &
Chr$(34) & Combo1.Text & Chr$(34) & "")
  Text1.Text = Rs.Fields("Campo1") ' fai cosě per tutti i text cambiando i
campi che ti servono
  Rs.Close: Db.Close
End Sub
Private Sub Form_Activate()
  Dim Db As Database
  Dim Rs As Recordset
  Set Db = OpenDatabase(App.Path & "\Database.mdb")
  Set Rs = Db.OpenRecordset("Tabella") 'Qui va un eventuale query
  Do While Not Rs.EOF
     Combo1.AddItem Rs.Fields("Campo") ' se volessi riempire i combo con i
nomi dei capi usa db.TableDefs("Tabella").Fields(I).Name
     Rs.MoveNext                       ' I e un Indice da incrementare per
far variare i campi
  Loop
  Rs.Close: Db.Close ' il Db lo chiudi solo quando hai riempito tutti i
combo
  'il rs lo apri e chiudi per ogni combo
End Sub
Spero che questo codice ti vada bene, se ci riesci ottimizzalo per evitare
ridondanze.
In bocca al lupo, Luciano.





