Newsgroup: it.comp.lang.visual-basic
Titolo: AddNew "disubbidiente"

Su MSDN:
Attenzione   Se si utilizza il metodo AddNew su una riga, quindi si esegue
una qualsiasi operazione di spostamento su un'altra riga senza utilizzare il
metodo Update, le modifiche apportate verranno annullate senza preavviso.
Intendente anche voi che "riga" =  riga  ?
Sto usando un oggetto DATA e degli oggetti testo collegati ai rispettivi
campi.
Se faccio un  .Recordset.AddNew e ci scrivo qualcosa o se lascio tutto vuoto
e, senza usare nessun .Update lo faccio seguire da un .Recordset.MoveFirst
oppure da un .Move 1, mi viene regolarmente salvata una "riga" con i valori
suddetti
o nel secondo caso una riga "vuota" viene aggiunta.
Come mai ?
--
Gulp
....forse mi sono perso qualcosa !

 Come mai ?
a occhio è perchè non stai direttamente usando un recordset dao, ma
attraverso il controllo data, il quale fa qualcosa "di suo" in automatico
(anche perchè, se non facesse nulla, sarebbe inutile utilizzarlo).
a ulteriore conferma dell'ipotesi, potresti analizzare il comportamento
nel caso dell'apporto di modifiche ad un record esistente: dao
richiederebbe di "aprire" il record con il metodo edit, e poi confermare
con il solito update, ciò ti è necessario anche se usi il controllo data?
-- 
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

 ha scritto

stai usando un datacontrol dao ?
Private Sub Command1_Click()
    Data1.Recordset.AddNew
    Data1.Recordset!indirizzo = "xxx"
    Data1.Recordset.Update
    Data1.Recordset.MoveLast
End Sub
se commento le due righe centrali, o anche solo l'update, non aggiunge un
bel niente.
non e' che in access hai impostato un valore di default per un qualche
campo, tipo data_ins ?
se fai qualche prova in access su una tabella in visualizzazione griglia,
vedi che se c'e' un default, quando fai addnew poi ti sposti di riga, la
nuova riga viene aggiunta; se l'unico default e' il contatore e tu non
scrivi niente, se fai addnew poi ti sposti il puntatore torna sull'ultimo
record.
o con un default o con un testo associato al dc tu stai scrivendo un valore
in un campo.
ciao, j.

 bel niente.
ehi, javalab: l'op mi ha appena dato del guru, come ti permetti di
contraddirmi?
oltretutto la cosa si fà ardua, perchè io non ho fatto prove, prima di
rispondere, mentre tu sì... quindi proviamo con un sano tentativo di
arrampicata sui vetri per salvare capra e cavoli...
se, dopo aver fatto un addnew e prima di fare l'update, il movexxx lo fai
da controllo invece che da codice (cliccando sulle freccettine apposite) i
dati vengono salvati e/o il record aggiunto, o no?
inutile dire che non ho provato neanche questa volta.


 inutile dire che non ho provato neanche questa volta.
gia', buone idee, ma il lavoraccio lo fanno poi i poveri labrador...
Private Sub Command1_Click()
    Data1.Recordset.AddNew
    Data1.Recordset!indirizzo = "xxx"
'    Data1.Recordset.Update
'    Data1.Recordset.MoveLast
End Sub
se ero su record 1, e dopo aver cliccato premo la freccina di destra, il
cursore va sul rec 2. l'ultimo rec era 20, e 20 rimane.
nb che mentre clicco il command, il cursore scompare. si sta dicendo: mo
vediamo se sto qua ha le idee chiare, seno' ghe pensi mi :)
ciao, j.

 inutile dire che non ho provato neanche questa volta.
E senza provare nemmeno io devo dire che il tuo ragionamento fa acqua :)
Un Recordset è un Recordset, sia che lo chiami direttamente che tramite
controllo.
E' impossibile che si comporti in modo differente se si accede tramite Data.
Ciao

 cursore va sul rec 2. l'ultimo rec era 20, e 20 rimane.
oibho!
io ho usato i pulsantini di sinistra, sono tornato indietro. non sarà mica
lì la differenza?
verificherò.


 E' impossibile che si comporti in modo differente se si accede tramite Data.
nessuno ha mai affermato questo.
ho semplicemente supposto, e successivamente provato, che il controllo ci
"mette del suo", chiamando silenziosamente ed in modo del tutto autonomo
l'update del recordset.


 io ho usato i pulsantini di sinistra, non sarà mica lì la differenza?
senz'altro. i pulsantini di sinistra sono disfattisti, non hanno il senso
della leadership. prova con quelli di centrodestra o direttamente di destra.
ciao, j.

 l'update del recordset.
E come?
Dato che è il Recordset a spostarsi e a fare l'Update?
Se hai provato e sei arrivato a questa conclusione hai usato un test errato.
Se hai testato la cosa come dici nel post di j. è ovvio che potresti non
avere lo stesso risultato: lo spostamento con le freccine lo gestisce il
datacontrol, però si parlava dei metodi .Move* *del*Recorset*, i quali non
variano a seconda del "container".
Ciao
--
Qualunque mentecatto può scrivere codice che un computer possa capire.
I buoni programmatori scrivono codice che gli uomini possano capire.
[Martin Fowler]

 updata lui.
beh, a mio parere questo era l'oggetto del contendere: il dc si occupa di
updatare il record.
bene, almeno questa è a posto.
però, stuzzicato da questa tua osservazione, ho provato a non valorizzare
il campo, ed effettivamente il record, a differenza di quanto segnalato
dall'op, non viene aggiunto alla tabella.
gulp, che fine hai fatto? ti sei spaventato per le nostre schermaglie?
non potresti spiegarci tu che cosa fai con i tuoi controlli, visto che ti
trovi con qualche record di troppo?


 variano a seconda del "container".
ehm...
già nel post a cui hai risposto avevo scritto "spostandoti con le
freccine"...


 trovi con qualche record di troppo?
gulp mi sa debba chiarirsi le idee sui controlli collegati :)
collegare e scollegare controlli al volo e' abbastanza pericoloso.
il dc e' quasi perfetto se lo si usa per le cose ovvie. se gli si fanno fare
i carpiati, il bordo piscina diventa molto vicino...
ciao, j.
ma ti hanno incastrato li' tutta la vigilia ? povero...

Premetto ascolterò il consiglio di non scollegare "a volo", ma intanto
vorrei capire cosa sta succedendo !
Nel Form ho alcuni (quattro) controlli testo collegati ai rispettivi
campi.Nessuno è indicizzato, nessuno è settato come "richiesto", per tutti è
consentita "lungheza zero".Poi sono presenti dei Checkbox collegati a dei
campi Boolean.
C'è il il controllo  Data1.
Senza toccare il campo Data1, da codice faccio un AddNew, poi senza
modificare nulla mi sposto, sempre da codice, con un Move oppure con
recordset.MoveNext (First o quello che vuoi) e compagnia bella...ma la riga
"vuota" viene sempre salvata e mi ritrovo sempre con un Record di troppo.


 ha scritto
