Newsgroup: it.comp.lang.visual-basic
Titolo: Problemi con la modifica del datagrid

Duqnue, innanzitutto mi scuso in anticipo se non sono riuscito a trovare da
altre parti le soluzioni al imo problema...
Ho vagato nell'MSDN non so x quante ore, senza risultati validi...
Ho cercato su google, trovando cose analoghe, ma mai abbastanza da risolvere
il mio problema...
Ho cercato nei vari NG con gli stessi risultati di cui sopra..
L'unica cosa che mi è rimasta, è di chiedere il vostro aiuto.
Se non avete voglia di perdere tempo, vi pregherei almeno di darmi
l'indicazione giusta su dove cercare xchè magari è quello il mio errroe...
Inizio col dire che uso VB6, e faccio uso del componente DataGrid collegato
ad un adodc, il tutto tramite ADO.
Fino alla visualizzazione dei campi e dai dati non c'è problema...
Il problema sorge quando cerco di modificare i dati o meglio...farò un
esempio x cercare di farvi capire..:
Il mio DataGrid è composto da 5 colonne, la 1° di campo testo e le altre
numerico.
Mettiamo che io non riempia obbligatoriamente tutti i campi di ogni
record(in pratica sarebbero dati di un articolo di una fattura, e non è
detto che debbano essere usati tutti).
Quindi aggiungo solo 2 campi, lasciando vuoti gli altri 3, e passo alla riga
successiva...
faccio la stessa operazione x un po' di recrd...e poi decido di modificarne
uno(1 o + campi\colonne) lasciato in bianco precedentemente...
Beh, nel momento in cui modifico un record, non ne posso + uscire...posso
modificare solo quello e se tento di andare sugli altri, mi dice (mex di
errore)che probabilmente i dati sono in sola lettura e non possono essere
modificati un'altra volta...
Ho provato ad usare la funzione requery, ma dopo un po' di recrd, non so x
quale motivo, mi dice che l'azione è annullata(mah...)...errore...
E cmq ogni volta che si aggiorna il recordset il puntatore mi torna
all'inizio e non al record che sto modificando...
Ho provato quindi ad usare i segnalibri, ma come già detto anche  riuscendo
a stare nel record che sto modificando(ma non alla colonna giusta) poi mi da
errore di azione annullata...
Non so propiro come fare,e vorrei evitare di buttare altro tempo..
Forse sbalgio ad usare il datagrid, ma con altri tipi di griglia è ancora
peggio...qualcuno i può indicare il componente + corretto?
Mi spiace di non pter riportare il codice, ma non l'ho a portata(è sul
computer al lavoro)...
Scusandomi x il tempo che vi ho portato via, aspetto qualche lume da chi ne
sa + di me(e non è difficile..)

 ancora peggio...qualcuno i può indicare il componente + corretto?
CUT
.....Il tuo cervello!
cominciamo dall'inizio:
a) tuo livello di conoscenza VB?
b) presumo che a) non abbia riportato una grande risposta....
perchè?
perchè io ti faccio una domanda...che vantaggi hai ad usare adodc +
datagrid?
Ci sarebbero svantaggi a sostituire almeno l'adodc con routine tua???
c) Perchè lavori bound? che vantaggi ne derivi?
d) Filtri almeno le tabelle che usi?...e quindi...conosci un po di SQL?
Se usi un adodc bound ad una datagrid a prima vista sembra carino in realtà
è scomodo...quando entri in una riga il record viene posto in
editmode...devi rimanere su quello...ma la griglia lo aggiorna SOLO quando
fisicamente ti sposti nella griglia...talvolta l'adodc li rimane
"indietro"...e anche a forzare requery non ottieni nulla! E' un vecchio
problema...c'è una latenza quando Adodc aggiorna.
Considera poi che "vivi" in un ambiente asincrono...quindi che succede?
Succede che la griglia va per i cazzi sua e chiede dati all'adodc che ancora
deve aggiornarsi i sua...e quindi lavori (e mostri) dati vecchi....
Cosa fa allora l'utonto? si fa prendere dalla "fregola clikkatoria" e ti
ritrovi : O 10 record uguali ...O siccome duplicano la chiave...il messaggio
di chiave duplicata.
Cosa si può fare...mah!
mi ci son scontrato tante volte all'inizio!
e) Se hai fatto una query con tabelle a cui hai impostato l'integrità
referenziale...non puoi cancellare o modificare a vanvera!
QUINDI....
Butta via ADODC...usa una griglia Unbound...pensa all'utonto che userà il
programma ....pensa che potrebbe come me essere miope....oppure non proprio
giovane...pensa a quanto ti potrebbe maledire perchè lo costringi a scrivere
"piccolo" in un buchetto di griglia (casomai con colori orrendi) con un
sacco di righe sopra e sotto uguali.
Nel tempo mi son reso conto che le griglie vanno bene solo per riepilogo!
mi spiego...una griglia mostra una query dei dati....nella prima colonna
compare un pulsante..(oppure li fai premere f3 o doppio click(brutto)..o
quello che vuoi tu)...clikkando li si becca nella colonna nascosta l'ID di
quella riga e ti fa apparire una form FILTRATA e se proprio non puoi
resistere con ADODC e controlli bound...per modificarsi quel
record....chiude la finestra ...requery della griglia (e spostamento...se
necessario al record voluto) .
La griglia va bene SOLO se ci son pochi dati e non c'è verso farne
senza.....(ad esempio una lista di immagini di una slideshow che trascinando
le righe sposti la sequenza).
Ti lascio uno spunto.....narcisistico.....
http://www.it-lang-vb.com/wodka/default.asp?cosa=area13&nome=Articoli
Ciao e buon lavoro!
-- 
Il Wodkino Nazionale è a : 
www.martek.it
Pagina Vb/Bestiario/Lamer Experience :
http://www.martek.it/go.asp?portamia=2
 New Entry nel bestiario!
:-)

 mi ci son scontrato tante volte all'inizio!
CUT
se te lo mettevo nel post precedente non lo leggevi e saltavi subito alla
pappa scodellata...
per la mia esperienza con la schifezza di quei componenti
un workaround era....
staccare la spina all'adodc
ossia connection=nothing
e poi riattaccala
nel perderla e riprenderla...aggiorna subito il maledetto!
-- 
Il Wodkino Nazionale č a : 
www.martek.it


Wodka40° wrote:
(cut)
nel tempo in cui aspettavo risposte, ho riprovato a smanettare(non potendo
fare altro)...
Dopo qualche centinaio di tentativi vari, tra cui utilizzare altri tipi di
griglia e robe varie, ho adottato una soluzione che forse non è il massimo,
ma che x il mio scopo funziona egregiamente...(almeno credo...finchè non mi
salterà fuori qualche bug......O_o):
dato che i (ehm..)...dati da inserire non possono essere molti(si parla di
articoli da mettere in una fattura), ho deciso di impostare la griglia
creando nel database un numero predefinito di righe\record, e aggiungendo un
campo il cui valore combaciasse con il bookmark del datagrid.
In pratica i record non verranno mai cancellati o agigunti, sarà solo una
questione di update tramite sql, alla fine del quale verrà refreshato il
recordset, evitandomi problemi di + modifiche contemporaneamente che mi
bloccavano tutto(modifica di record in sola lettura...azz)...
Essendo un nuemro esiguo non si nota nemmeno il refresh...
Poi non mi è restato altro che riposizionare il cursore nel punto esatto(o
successivo) del record cui l'utente sta modificando, tramite il bookmark x
le righe, e l'indirizzo della colonna...
Tutto sommato, l'utente a poco da poter fare, oltre che modificare le celle
già predisposte, quindi non dovrebbero esserci ulteriori problemi, spero...
tornando alle tue domande...
a)pochissima esperienza...x intenderci ho fatto 1 corso di 300 ore di VB(che
puoi immaginare...)ed ora sto facendo un periodo di stage(hai presente la
Rancilio?quella che fa le macchine x caffè da bar...ecco...)...
Xciò oggetti come adodc, e datagrid sono frutto solo ed esclusivamente
dell'MSDN...
X me praticamente tutto è nuovo...
b)Non so che vantaggi ho ad usare l'adodc + datagrid...ma mis erviva un
oggetto x permettere all'utente di modificare direttament dei valori in una
griglia...e purtroppo non ho trovato altro di + comodo...
c)xchè lavoro ubound?beh, sarebbe già + facile capire cosa
significhi...(newbyessimo...)
d)almeno l'SQL un po' lo conosco...le query principali di selezione, update
aggiunta e delete le so fare abbastanza agevolmente...con condizione varie e
raggruppamenti, ovvaimente niente di fantascentidico, ma acnora non mi è
capitato nulla che lo richiedesse...:p
X il resto, anche se ora non mi serve +, grazie x la dritta sulla griglia
unbound...ci darò un'occhiata chissa mai che mi venga utile...anzi, x la
verità, contemporaneamente sto finendo un altro programmino di anagrafica,
in cui dopo aver filtrato un database in base a varie caratteristiche devo
stamparne il risultato...cosa  mi verrebbe + utile x il mio scopo?byez
probabilmente una routine mia dove mi immette i dati riga dopo riga
direttamente nella stampa è la csoa migliore...ma volevo sapere da chi ne sa
+ di me... consigli sono sempre bene accetti...byez
grazie ancora x la rispsota...

Matirial wrote:
cut!
Matirial premessa: Non ce l'ho con te!
detto questo: Dio ci scampi da tutti sti programmatori!
Mi spiego meglio: nessuno nasce imparato!
Ora io vorrei dire a tutti questi programmatori in erba......allargate la
mente...mettetevi nei panni di chi userà il vostro programma!
Cercate di fare una cosa agevole anche per chi odia i pc ed è costretto dal
capouffico a starci!
Fare una griglia arzigogolata....piccola con un sacco di dati...è sembre la
soluzione migliore?
(se l'utente di matirial ha un a descrizione "Chiodini in Acciaio speciale
313 con testa bronzata e punta biconica ad alta penetrazione" quanto altro
posto ci saranno per altri dati?...dev lasciare le colonne sbloccate e
l'utonto deve allrgarsi tutte le volte le colonne)
Per la mia esperienza una griglia dovrebbe essere un sommario...vedi
immediatamente la situazione....poi se vuoi modificarla o aggiungere roba
clikki sul record e si apre qualcosa che con calma e chiarezza di fa
modificare il tutto....l'utente ringrazierà alquanto! (aprire qualcosa non
necessariamente vuol dire nuova finestra...può voler dire anche (brutto)
panel che si mostra)
Il problema quale è?
Le scarse conoscenze di questi newbie....
Matirial ha fatto un corso di 300 ore....mica poche!
Il problema è....era il docente preparato per far fruttare 300 ore??? (che
son tantissime!t'è costato un leasing se fatto bene!)
probabilmente dalle risposte di Matirial no!
probabilmente ha solo scaldato un banco e perso tempo....
Almeno al differenza fra Bound ed Unbound = Collegato Scolllegato
La differenza fra Client e Server di una connessione....cosa è un
recordset...etc etc
un allievo che dichiara:
"b)Non so che vantaggi ho ad usare l'adodc + datagrid...ma mis erviva un
oggetto x permettere all'utente di modificare direttament dei valori in una
griglia...e purtroppo non ho trovato altro di + comodo..."
non ha colpe.....è una sconfitta totale del corso e della docenza!
Ma come ? fai le cose senza sapere perchè? ed il tuo tutor che faceva?
telefonava alla fidanzata?(cosa possibilissima ho visto fare anche di
peggio)
Il problema è che gente come il nostro amato newbie (che ripeto non ce l'ho
con te.....parlo di te parlando di tutti i newbie attuali) viene catapultato
subito a fare programmi....con i risultati che possiamo immaginare!
Annaspando e arrangiandosi come può....con un workaround demenziale
(aggiungi x record anche se alcuni rimarranno vuoti!).
Probabilmente non avendo li strumenti per fare di meglio...o non avendo la
voglia perchè deve stare in determinati tempi di sviluppo!
Sputtanando il mercato, diffondendo la idea che vb fa schifo, rimanendo
mortificato e credendo che vb sia una ciofeca quando purtroppo è solo una
scarsa informazione che lui non può avere e che forse manco sa dove
trovarla!
Alternative Matirial e tutti i newbie ne hanno poche....passano tutte per un
auto apprendimento...passano tutte per rompere le palle a chi ne sa più di
loro sperando che rispondano (l'unico a risponderti son stato io....ma non
per cattiveria...se cercavi nei vecchi post trovavi che questa domanda era
già stata fatta).
Per matirial posso dare solo un consiglio in base alla mia esperienza:
a) Studiati una serie di routine per aprire e gestire gli oggetti :
ADO.connection ADO.recordset ADO.command
b) Impara a riempire readonly una flexgrid (caso mai quella gerarchica) con
i dati di una query
c) Impara a formattarla da codice (ti divertirai di più)
d) Impara a richiamare routine se entri in una cella e premi un tasto o un
altro, o se fai un doppio click
metti il tutto insieme....e vivrai più felice tranquillo e soddisfatto!
sempre se ne hai la voglia...il tempo ti consiglio di trovarlo altrimenti
fra 2 mesi ti sei già rotto le palle di vb e della programmazione (perchè se
continui a programmare così prima o poi fai un "arrosto" sul serio!)
Te lo dico (lo ripeto) per insegnarti......poi fai te!
Ciao!
-- 
Il Wodkino Nazionale è a : 
www.martek.it


Te lo dico (lo ripeto) per insegnarti......
non voglio essere presuntuoso, ma anch'io ho cercato di insegnarti
qualcosa...
Tra l'altro, se presti attenzione alle risposte che di solito dà Lupo, puoi
capire cosa intendo x indirizzamenti.
Ciao e a presto.