Newsgroup: it.comp.lang.visual-basic
Titolo: DBCOMBO .. che proprieta' devo utilizzare ... ?

Ho creato una tabella composta da due campi :
idGenere
Genere
Ho inserito un controllo dbcombo al quale ho associato il campo "genere" da
visualizzare.
Vorrei fare in modo che, una volta selezionato un record, il controllo mi
restituisca il valore contenuto nel campo "idGenere".
Spiego con un esempio.
Se la tabella e' :
idGenere        Genere
----------------------------
1                    Romanzo
2                    Avventura
3                    Fantascienza
etc...
e seleziono dal controllo dbcombo la voce "Avventura", io vorrei restituito
il valore "2".
Quale proprieta' devo utilizzare ?
Grazie a tutti !
Aldo

 Quale proprieta' devo utilizzare ?
Dovrebbe essere BoundColumn
-- 
News2000 1.5ß Version 
http://socket2000.8m.com

 Aldo
Se imposti ListField su 'Genere' e BoundColumn su idGenere, recuperi il
valore 'id' del 'Genere' selezionato (corrente) con la proprietą BoundText.
dickie

 valore 'id' del 'Genere' selezionato (corrente) con la proprietą
BoundText.
in questo modo :   "dbcombo1.boundtext"     ???
Se si faceva cosi', non mi funziona.
Mi restituisce una stringa vuota.
Ho provato a convertire in valore (funzione Val) il valore della proprieta'
"Boundtext" ed il valore e' 0.
La proprieta' "DataField" su cosa deve essere impostata ?
Non e' che il problema e' dato dal fatto che il campo "idGenere" e' un campo
contatore (quindi numerico) e che la proprieta' "BoundText" si riferisce al
testo ?
Ciao e grazie
Aldo

 Aldo
***Guarda, dopo aver perso un mare di tempo e quel che resta della mia
salute mentale per cercare di capire come diavolo funzionino le
proprietà -per così dire- 'Dataqualcosa' (quelle "Dati", per intenderci) di
una DBCombo, mi sono affidato soltanto a quelle di "Elenco".
Ma, per quel poco che ho capito, le proprietà di 'Elenco' popolano la tua
DBCombo, mentre le proprietà di 'Dati' (DataSource, DataField e compagnia
bella) 'aggiornano', tramite un secondo DataControl e in relazione alla
scelta fatta, i dati del database.
E' un casino, ma cerco di rendere la cosa semplice. [Non è vero, lo so già!]
Premessa1: è importante tener presente che il DataControl restituisce
l'attenzione ad una tabella (o vista) di un database, puntando un record
alla volta (beh, in verità ogni riferimento ad un recordset si comporta in
tal modo).
Ciò significa che non legge l'intera tabella, ma i suoi singoli record.
Premessa2: per recuperare un *valore* da una tabella o vista è necessario
puntare ad un campo (colonna) di un record (riga), come a battaglia navale,
insomma.
Se quindi vuoi modificare il valore di un certo campo di uno specifico
record (campo2) al valore del campo di un altro record (campo1), contando su
un solo riferimento al recordset, devi necessariamente:
- puntare il primo record;
- memorizzare campo1 in una variabile d'appoggio (punti un record, quindi
campo1 equivale al suo valore);
- spostarti nel record da modificare (ovunque esso sia);
- modificare al valore della variabile d'appoggio campo2 (anche qui 'campo2'
equivale al suo valore).
oppure
- lavorare con due DataControl;
- puntare col primo DataControl (Data1) il record da cui prelevi il valore
di campo1;
- puntare col secondo DataControl (Data2) il record da modificare;
- modificare campo2 con un riferimento al campo1.
[Mi sa che mi sto già aggrovigliando!]
Ora, la DBCombo è un ottimo strumento per puntare il valore di un certo
campo (quello definito dalla proprietà DataField) di un certo record (quello
'corrente' per Data1, cioè quello attraverso il quale popoli il DBCombo in
questione)...
ma fa anche qualcosa in più: ti offre la possibilità di 'comunicare'
direttamente ad un secondo DataControl (Data2), attraverso la sua proprietà
DataSource (di Data1), e di modificare il valore di un certo campo (imposto
alla proprietà DataField sempre di Data1) nel record corrente del secondo
DataControl (Data2).
Riassumendo:
Proprietà di tipo 'Dati':
  - DataSource => Data2
  - DataField => campo2
Proprietà di tipo 'Elenco':
  - RowSource =>Data1
  - ListField => campo1
...e in automatico il valore di campo2 (o, se vuoi, campo2) del record
corrente di Data2 viene sostituito dal valore di campo1 del record corrente
di Data1, cioè quello della selezione corrente del DBCombo.
*******
Si può ottenere, però, lo stesso risultato (seppure con un passaggio in
più...ma con maggiore padronanza degli eventi) attraverso la proprietà
BoundColumn.
Inserisci un oggetto DataControl e imposti per questo le proprietà
DatabaseName ([...]) e RecordSource (selezioni la tabella in questione o
imposti la stringa SQL). Poi selezioni la tua DBCombo e imposti le proprietà
- RowSource => al DataControl in questione
- ListField => al campo "Genere"
- BoundColumn => al campo "IDGenere".
In questo modo ottieni di popolare la DBCombo con i valori di un campo e di
porre un riferimento ad entrambi i campi e ai rispettivi valori da essi
assunti nel record corrente (quello determinato dalla selezione).
Accedi ai due valori attraverso le proprietà Text e BoundText...e puoi farne
ciò che vuoi (ad esempio passarlo come valore del campo -omonimo o
compatibile- del record corrente di un secondo Recordset o in una textbox
associata o non associata o in una variabile d'appoggio).
Naturalmente ciò dovrai farlo tu (ed è questo il passaggio in più!)
ma -caspita!- almeno sei padrone di ciò che accade,
Se cioè dalla tua DBCombo selezioni "Avventura",
DBCombo1.text     restituirà "Avventura"
DBCombo1.BoundText     restituirà 2 o "2" a seconda di quale sia il 'tipo'
originario.
che fatica! Spero proprio che serva a qualcuno.
dickie

 ha scritto nel messaggio
news:95kkp5$4bn$1...@lacerta.tiscalinet.it...
-----cut-----



<CUT>
Con il Commodore quanto tempo ci avresti messo a fare un Controllo tipo
DBCombo collegato a un DB ? (Sempre che si potesse fare) 8-))
Ciao VB

 DBCombo collegato a un DB ? (Sempre che si potesse fare) 8-))
Beh ....
con qualche ciclo FOR NEXT, qualche DATA, un po' di INPUT#1, una manciata di
PRINT - TAB - CLS, una spruzzatina di PRINT#1 , credo ci si sarebbe anche
riusciti. Il problema e' che non so se avanzerebbe dello spazio in ram per
fare il resto del programma .... !!!
:-)
Ciao
Aldo