Newsgroup: it.comp.lang.visual-basic
Titolo: Un oggetto ResultSet/RecordSet formato da un JOIN non e' modificabile !? quindi...

Molti clienti mi chiedono di visualizzare nelle
grid le descrizioni al posto dei codici.
Se si riempe la grid con un Join tra due tabelle
il problema sarebbe risolto tranne per il fatto
che dopo l'apertura del data entry, per salvare
i dati sarei costretto ad aprire un altro
Resultset/Recordset in quanto quello formato
dal join non e' modificabile.
Faccio presente che dopo una richiesta di modifica
(da parte dell'utente) del record selezionato
nella grid, passo questo al data entry per le
modifiche e sempre su questo
aggiorno i dati ed in ultimo la grid.
Qualcuno a risolto il problema ?
( Ovviamente utilizzando un unico oggetto dati )
Grazie per qualsiasi consiglio.
Ciao,   fabrizio.

...

Se il tuo recordset non è modificabile, la colpa non è di certo della o
delle join, per quanto complesse possano essere, ma probabilmente di
un'incongruenza nella join stessa (probabilmente, in qualche modo salta
fuori una relazione molti a molti?).
Io ti consiglierei di fare un po' a cazzotti con la tua stringa SQL, magari
sfruttando ACCESS...
Ciao,
Roberto Mannelli

Io ho utilizzato la dbgrid in modalità unbound solo che hai lo svantaggio di
dover scrivere il codice per la lettura e la scrittura dei record.
Antonio Donatiello

Ti dico quello che sò:
Qualche tempo fà avevo la convinzione che il modo migliore per inserire dati
in un DataBase
fosse proprio quello che tu persegui (credo), e trovai una soluzione:
Premetto che allora lavoravo sotto Access 2.0, ma dovrebbe andare bene anche
a te.
Avevo una tabella ESAMI (Molti), una Pazienti (Uno) ed una Medici (Uno).
La tabella ESAMI conteneva il campo CodiceMedico e CodicePaziente ed era
legata con due
relazioni Uno a Molti con le tabelle Medici e Pazienti, nei corrispondenti
campi CodiceMedico e CodicePaziente.
Per poter creare un nuovo record lavorando con un unico Dynaset, OCCORRE che
i campi CodiceMedico e CodicePaziente
nelle tabelle Uno, siano campi CONTATORE !!!(con tanto di chiave primaria)
In questo modo infatti il Jet (2.0), al momento dell'AddNew, crea
automaticamente l'AddNew anche nelle
tabelle Uno, incrementandone i campi contatore.
Chiaramente poi, dopo l'AddNew, ma PRIMA dell'Update, modificavo (con delle
ComboBox) il CodiceMedico ed il CodicePaziente,
impostandoli sul Medico e sul Paziente che in realtà volevo nel record.
Con questa tecnica c'è anche il vantaggio di poter creare al volo anche i
records Uno, per es., se per
l'Esame che si stà inserendo, c'è un Medico nuovo, basta inserire i dati
anche per quest'ultimo, e si è
inseriti, sia il nuovo Esame nella tabella Molti, sia Il nuovo Medico nella
tabella Uno.
Prova su questa strada se credi
    Spero di esserti stato utile     Ciao Maurizio
                                        Maurizio B.
 
mrzNOMMI...@tin.it
   (erase
NOMMISPAMMA)
Se ti interessa anche sapere che tecnica uso oggi continua a leggere:
Oggi tendo a fare dei Dynaset con delle gran query, ma per gli aggionamenti
poi utilizzo il metodo
 MyDb.Execute (Query Di Aggiornamento/Cancellazione/Accodamento) sulla sola
Tabella molti.
Se poi occorre inserire un nuovo Medico (Uno), c'è un bottone che apre una
nuova Form dedicata all'inserimento
dei Medici.
    di nuovo    Ciao


Scusa se rispondo con questo ritardo ma sono stato un po' via.
Innanzi tutto chiarisco che utilizzo RDO sempre in modalita'
Unbound, ho creato delle classi per la gestione dei dati:
apertura del resultset, visualizzazione dei dati in una
TDBGrid Apex, valorizzazione dei controlli del data entry,
etc...
Tra l'altro la classe che si occupa di popolare
la grid legge la struttura della tabella
( che ovviamente non puo' includere campi non suoi )
e questa e' un'altra complicazione.
Attualmente non mi sono ancora collegato ad un
Sql Server ed utilizzo gli archivi Access
tramite ODBC.
Se non ho preso un abbaglio mi e' sembrato di
leggere nell'help del VB che un resultset
basato su un join e' di sola lettura.
Dalla tua risposta intendo che se esistessero
delle relazioni tra le tabelle si ovvierebbe
al problema ?
Ciao,   fabrizio.

Non so se funziona in ODBC, tantomeno in SQLserver, so solo che per poter
avere in Jet 2.0 un Dynaset con Join, che si comporti come una tabella,
occorre che il campo di Join nella tabella Molti sia un campo contatore...
Ciao
                 Maurizio B.
 
mrzNOMMI...@tin.it
   (eraseNOMMISPAMMA)



Per la precisione, è necessario che la tabella abbia una chiave
primaria, non necessariamente contatore.
Un'altra necessità, anche se non mi ricordo più dove l'ho letto, è che
la join va specificata con un predicato INNER JOIN o simili.
Se si specifica la join dentro al predicato WHERE (alla vecchia
maniera) si ottiene un recordset di sola lettura.
Ciao
--------------------------------------------------------------------
Fulvio Senore
Eliminate "zz" dall'indirizzo e-mail per scrivermi (spammers...)
Remove "zz" from e-mail address to write me (spammers...)
--------------------------------------------------------------------


Scusami le imprecisioni, ma non uso piů questa tecnica da diverso tempo e
non sono riuscito a ricordare meglio.
Spero comunque che tu abbia risolto
