Newsgroup: it.comp.lang.visual-basic
Titolo: [.NET][ADO.NET] Chiavi autoincrementanti

Ho un form con con 2 data adapter e dataset contenente due tabelle e
una relazione di uno a molti tra di esse. Nel form ho piazzato due
controlli datagrid uno collegato alla tabella padre ed uno alla
relazione (in modo che automaticamente carichi i contenuti correlati).
Sto lavorando con tabelle che hanno chiavi primarie numeriche
autoincrementanti (database acces).
Ora io sto facendo la parte del programma di inserzione quindi non mi
interessa minimamente eseguire il Fill dei dataadapter sul dataset,
pero' mi servirebbe qualcosa (magari una query) per sapere quale sara'
la prossima chiave primaria della tabella padre (autoincrementata dal
database) per cosi' poterla dare come campo alla chiave esterna della
tabella figlio.
Al momento non facendo questo ho una chiave primaria della tabella
padre messa ad 1,2,3,ecc. ripetuta automaticamente sullachiave esterna
della tabella figlio, quando poi vado a fare l'Update sul database la
chiave primaria della tab padre mi viene cambiata mentre quella del
figlio no portandomi cosi' a delle inconsistenze.
Un'altra domanda, conosco la modalita' di impostare gli stili e le
colonne dei datagrid, ma e' possibile non visualizzare come colonne
certi valori del datagrid ma impostarli tramite il codice (ovviamnte
questo lo farei per le chiavi esterne)
---
Matteo 79

 tabella figlio.
che nostalgia...
avevo il tuo stesso problema...
http://www.google.it/groups?hl=it&lr=&selm=b44c3t%241rjsq8%241%40ID-173193.news.dfncis.de
non l'ho risolto. o meglio, l'ho risolto abbandonando gli id
autoincrementanti e gestendo a mano l'incremento, anche se necessita di
qualche cautela nel caso di multiutenza
-- 
Salutoni
Sergio
Per rispondere... togli il group dall'indirizzo
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

qualche cautela nel caso di multiutenza
Dal tuo post vecchio ho capito che bisogna cercare una soluzione 'alla
cazzo', mah e queste sarebbero tutti i vantaggi di 
ado.net
?
E per la questione del controllo datagrid? E' possibile andare a
mettere manualmente come predefinita tutta una colonna o devo non
mostrarla sul datagrid  per poi andare manualmente su ogni riga del
dataset a modificarla manualmente?
---
Matteo 79

 dataset a modificarla manualmente?
se riuscissi a capire che cosa hai scritto, forse riuscirei a risponderti,
ma non è detto :-)


Scusa se metto un'altro post, ma una possibilita' che mi e' venuta in
mente e' quella di, una volta finita l'inserzione, andare a lavorare
sul dataset che contiene tutto, basterebbe una query per vedere la
prossima chiave da inserire, poi un ciclo su tutte le righe della
tabella padre modificandone (se te lo lascia fare) la chiave primaria,
adesso in teoria essendo la tab padre e quella figlio legate da una
relazione dovrebbero automaticamente modificarsi anche le chiavi
esterne delle righe della tabella figlio.
Qui pero' bisogna utilizzare strettamente chiavi autoincrementanti
senza effettuare il riutilizzo dei vecchi valori (ad esempio di record
cancellati) cosa che mi pareva fosse possibile leggendo lo sceppa (mi
pare assegnando a -1 la chiave sul dataset ma devo ancora
approfondire).
Un'altra cosa, chi mi da il titolo e la casa editrice del libro di
Balena? Parla solo di ado come lo sceppa?
E' un altore italiano quindi con san Mulo sara' difficile trovar
qualcosa immagino
---
Matteo 79

ma non è detto :-)
In effetti mi sono spiegato da culo :)
Mi rispondo da solo: Praticamente il datagrid e' collegato al dataset
e prima di fare l'update vado manualmente a fare un ciclo tra le
datarow e setto il campo (non vusualizzato nel datagrid) al valore che
voglio
---
Matteo 79

Allora, e' proprio destino che me le faccia e me le dica, il problema
l'ho risolto in questo modo che, sebbene non sia il massimo
dell'eleganza almeno funziona:
(Le tabella padre fa riferimento alle stanze di un'alloggio mentre la
tabella figlio ai fori (finestre e porte) di ogni stanza)
Al caricamento del form dove devo gestire l'inserimento sia della
tabella padre che di quella figlio eseguo questa query:
INSERT INTO Stanza (Altezza_Muri, Area, Area_VascaDoccia,
Base_Cartongesso, Base_RivestimentoBagno, Base_RivestimentoCucina,
Categoria, ID_Alloggio, Perimetro, Ringhiera) VALUES (0, 0, 0, 0, 0,
0, 0, ?, 0, 0)
Dove come vedete l'unico parametro (il ?) e' la chiave esterna alla
tabella padre della tabella padre (un alloggio ha molte stanze ed una
stanza ha molti fori)
Poi ho modificato il SelectCommand (il comando utilizzato dal Fill)
del dataAdapter relativo alla tabella stanze in:
SELECT Stanza.* FROM Stanza WHERE (ID_Alloggio = ?)
Gli passo come parametro lo stesso valore della query prima e faccio
il Fill del dataadapter relativo alla stanza nel dataset contenente la
tab padre, la tab figlio e la relazione di chiave esterna)
A questo punto inserisco nelle mie due DataGrid (in cui non mostro
nemmeno i campi ne di chiave primaria perche' autoincrementanti ne' di
chiave esterna) tutti i valori necessari (sovrascrivendo il primo
record inserito con tutti gli 0)
Alla fine vado manualmente a modificare tutti i valori chiave esterna
della tabella padre (ID_Alloggio) con quelli giusti che posso trovare
sia nella prima riga sia posso essermi salvato in atro modo (con una
label)
        Dim tbl As DataTable = DsStanze1.Tables("Stanza")
        Dim row As DataRow
        For Each row In tbl.Rows
            row("ID_Alloggio") = lblAlloggio.Tag
        Next row
Spero possa esser servito a qualcuno. Ciao a tutti
---
Matteo 79

 Spero possa esser servito a qualcuno. Ciao a tutti
succede spesso di cantarsele e suonarsele da soli, direi che è molto da
apprezzare il fatto che sei tornato per raccontare a tutti come hai risolto
il tuo problema.
non ci ho capito nulla, ma probabilmente è un problema mio :-), e c'è
qualcosa che non mi torna: quando fai quell'insert into iniziale, come fai a
sapere quale è l'id che viene assegnato al record?
-- 
Salutoni
Sergio
per rispondere... togli il group dall'indirizzo

sapere quale è l'id che viene assegnato al record?
Quando faccio l'insert iniziale inserisco a posta un record con tutti
i valori (tranne quello della chiave esterna) a 0 (zero), cosa che non
potro' mai avere nel mio database (sono misure edili), poi faccio la
query (messa nel selectcommand del dataadapter) ricercando tutti i
record che hanno tutti i campi a 0 (zero), ovviamente me ne trova solo
uno (quello che ho appena inserito).
Spero di esser stato chiaro, scusa per il mio modo di merda di
scrivere, questo programma lo faccio come tesi di laurea, saranno poi
cazzi per la relazione! :°°(
---
Matteo 79

 uno (quello che ho appena inserito).
ah, adesso è molto più chiaro.
che succede se il programma è in multiutenza e due operatori inseriscono,
più o meno in contemporanea, due record con i valori a zero?
