Newsgroup: it.comp.lang.visual-basic
Titolo: Aggiornamento NON VOLUTO nel DB ACCESS

Come al solito parto con la parte logica del codice che sto scrivendo
Questa volta sono alle prese con un recordset completo ossia con più record 
all'interno dove il numero dei campi è uguale a 13 ( ma questo per ora non è 
importante.
Devo sempre comparare 2 recordset per vedere se aggiornare o meno il 
database e mi sono regolato cosi
rsOld punta alla Tabella in esame con la clausola WHERE dove prelevo i 
record aventi una data
rsNew invece punta alla stessa tabella che popolo ciclando una classe 
d'insieme.
COSA, ANZI COME MI SONO ORGANIZZATO?
Letto rsOld
Popolato rsNew
Dentro una funzione tramite
    Do While Not rsOld
e
    For i = 1 to rsOld.field.Count -1
mi ciclo quello che ho prelevato dal DataBase e vedo se è uguale a rsNew e 
poi a seconda del risultato mi faccio le mie belle operazioni.
ORA COSA SUCCEDE?
Quando Leggo il DB tutto OK
Quando Popolo rsNew mi si aggiungono il record letti nel DataBase
Quindi penso che qui invece sbaglio il modo in qui istanzio il recordset.
Vi posto il codice che ho scritto:
'################################################
With Turno
  For Each Giornata In Turno.Giornate
'################################################
    ' RECORD EVENTUALMENTE PRESENTI NEL DATABASE
    Set rsOldGiornata = New ADODB.Recordset
    strSQL = "SELECT * FROM Giornate WHERE Giorno =" & "#" & 
Format(Giornata.Giorno, "mm/dd/yy") & "#"
    rsOldGiornata.Open strSQL, strCnn, adOpenDynamic, adLockOptimistic
    Set rsGiornata = New ADODB.Recordset
    rsGiornata.Open "[Giornate]", strCnn, adOpenDynamic, adLockOptimistic, 
adCmdTable
    'Popolo rsGiornata con le proprietà della Giornata. RICORDARSO CHE SONO 
DENTRO UN
    'CICLO FOR NEXT
    RS_AggiungiGiornata rsGiornata, Giornata
    'Verifica che il il DB non sia vuoto. Se rsOldGiornata è vuoto vuol dire 
che nel
    'database non c'era nulla QUINDI AGGIUNGO RSGIORNATA AL DATABASE
    If Not rsOldGiornata.EOF Then
       rs_VerificaUguaglianzaGiornata rsGiornata, rsOldGiornata
    Else
      rsGiornata.Update
    End If
'###############################################
    Set rsOldTratta = New ADODB.Recordset
   'PRELEVO I DATI PRESENTI NEL DATABASE IN BASE AL GIORNO IN ESAME
    strSQL = "SELECT * FROM Tratte WHERE Giorno =" & "#" & 
Format(Giornata.Giorno, "mm/dd/yy") & "#"
    rsOldTratta.Open strSQL, strCnn, adOpenDynamic, adLockOptimistic
    'TEORICAMENTE QUI DOVREI SOLAMENTE PUNTARE RSTRATTA ALLA TABELLA
    Set rsTratta = New ADODB.Recordset
    rsTratta.Open "[Tratte]", strCnn, adOpenDynamic, adLockOptimistic, 
adCmdTable
    If Giornata.Tratte.Count > 0 Then
      For Each Tratta In Giornata.Tratte
        ' POPOLO RSTRATTA CON I DATI RELATIVI ALLA TRATTA RELATIVA
        ' ALLA GIORNATA IN ESAME
        rs_AggiungiTratta rsGiornata, rsTratta, Tratta, Giornata  <---- QUI 
HO L'ERRORE MI VEDO AGGIUNGERE DATI
      Next 
AL DATABASE
###############################################
      If Not rsOldTratta.EOF Then
        rs_VerificaUguaglianzaTratte rsTratta, rsOldTratta <------ QUI E' 
TUTTO SFALSATO PERCHE' HO PIU DATI
      Else 
DEL DOVUTO
        rsTratta.Update
      End If
    End If
  Next
End With
Set rsGiornata = Nothing
Set rsTratta = Nothing
Set rsTemp = Nothing
End Sub

[NoFLyZone]
[SNIP]
Io spero solo che il tuo software non venga *MAI* utilizzato da un *VERA* 
compagnia aerea.
Brrr.
Lokar 

 Lokar
Beh se questo ti puņ far piacere, questo tuo post mi ha un pņ rattristato. 
:(
Invece di prendermi in giro potevi dirmi cosa ti ha fatto rabbrividire!
Grazie

 fatto rabbrividire!
NoFLyZone, non mi fa alcun piacere rattristare chicchessia.
Ne' era mia intenzione prenderti in giro.
E' evidente, pero', che tu la programmazione (e non il Visual
Basic) non l'hai neanche iniziata ad imparare. E programmare
senza alcuna base e' un modo un po' "scriteriato" di iniziare
se si sceglie di sviluppare un prodotto, *prima* di imparare
i fondamenti dello sviluppo del software.
Non c'e' cattiveria, ne' desiderio di ferirti in questo post,
bensi' una constatazione, un po' cruda forse, delle capacita'
che hai dimostrato di avere.
Inoltre il 90% dei post che ti suggeriscono _soluzioni_ e
_motivazioni_ valide dal punto di vista programmativo, vengono
da te assai spesso sorvolati preferendo alla loro lettura la
scrittura di un _altro_ post sconnesso.
Spero che prenda questo mio post come una (giusta?) critica
e non come un tentativo di "silurarti".
Resto comunque sempre a disposizione per qualunque dubbio in
merito alla programmazione.
Lokar 

Lokar ci mancherebbe che lo facessi con la volonta di "distruggere" le 
persone!!
Io sono consapevole di essere a un livello basso in confronto a molti di voi 
però
uno può studiare quanto gli pare ma fino a quando il problema non gli si 
pone davanti
quel "determinato capitolo" rimarrà capito sempre a metà o spesso anche 
meno.
Molti di voi hanno avuto la fortuna di studiare a livelli alti la 
programmazione ( vedi Università) o
ad aver avuto degli amici o anche dei colleghi di lavori bravi nello 
spiegare le cose e ovviamente
unendo i consigli allo studio le cose riescono meglio e sono per il livello 
che vedo in questo newsgroup
molto alto.
Io ho sempre avuto la passione per l'informatica ma ahime da piccolo ho 
studiato lingue che per
quel che mi riguarda mi hanno dato molte soddisfazioni.
Il mio esser rattristato è legittimo visto che tutto quello che so l'ho 
appreso da solo e unicamente con
le mie forze e con l'aiuto di molti di voi.
Io non so cosa ti abbia fatto rabbrividire ma avrei avuto piacere sentirmi 
criticare ( cosa plausibile e che
mi aspetto ogni qualvolta che scrivo un post) con sottolineato il motivo. 
( cosi magari mi riandavo a vedere
quel determinato errore e approfondirlo)
Se tu mi dice "Io spero solo che il tuo software non venga *MAI* utilizzato 
da un *VERA* compagnia aerea."
senza sapere il motivo, scusami ma io rimango a bocca aperta senza sapere il 
motivo e con gli occhi abbacchiati.
Le risposte che mi date alcune volte hanno la soluzione li a portata di mano 
( vedi il post precedente) ma è sempre
velata da qualcosa che per i meno esperti è difficile da cogliere al volo.
Prendi come esempio il mio post precedente. Me lo avete scritto 3 volte il 
codice giusto ma fino a quando io non ho capito
che l'indice dei fields partiva da zero io quella soluzione non la vedevo. 
( io non copio mai il codice altrui, anche se lo
riscrivo uguale lo scrivo by myself)
E' come se si accende una lampadina. C'è chi va a 60Kw e chi va a 100Kw. Io 
ora vado a 40 e spero di diventare un giorno
una 100. Se non ci arriverò mai pazienza mi accendo lo stesso senza dare la 
luce che vorrei dare.
M'hai fatto diventà pure filosofo!! Hehehe...
Gentilmente potrei sapere cosa ti ha fatto rabbrividire e magari 
instradarmi sulla soluzione del mio problema?
Stefano 

Riprovo a formulare la domanda in modo piu diretto perchč rileggendola forse 
non rende molto il mio problema.
Io so ( per lo meno da quello che ho studiato...) che ADO le modifiche 
vengono slavate quando ci si sposta su una nuova riga, quando si chiama il 
metodo AddNew, o quando si chiude il RecordSet e naturalmente quando si 
esegue UpDate o UpDateBatch.
Allora mi consigliate di usare questo metodo: Importare i valori ( che forse 
devo scrivere nel database) dentro un array di tipo variant e poi, dopo aver 
verificato alcune cose scriverlo nel database oppure.... boh!! Non mi viene 
altro in mente!! Hehehe....
Ricordate quello che voglio ( anzi vorrei fare) Prendere dei dati da una 
classe d'insieme ( fonte dati), prendere i dati da un database e verificare 
se esistono, nel caso esistano verificare che siano uguali ( e se non lo 
sono modificare i dati nel DB)
Stefano
La pazienza č la virtů dei forti e il mio punto di forza č il voler capire 
le cose..
[ questa volta non ho scritto codice cosi Lokar non mi sgrida :)))   ]

 la luce che vorrei dare.
...
100 KILOWATT??? Sono le lampadine che si usano per illuminare lo stadio 
olimpico? :-D
Scusa ma non ho resistito!
:-)
ROTFL
Elef.
PS: pace all'anima dei congiuntivi... 

 olimpico? :-D
Lo so che sono potenti ma l'esempio volevo rendesse l'idea.
Per i congiuntivi " da mò ke sò morti a casa mia"
Mo me metto a parlà come magno così fate caso a tutto tranne che a li
congiuntivi. Pè quanto riguarda er problema che ciò, sto a valutà
altre soluzioni che posterò pe esse sicuro che sto annà sulla strada
bona e ve prego, se scrivo stronzate ( congiuntivi a parte) fatemelo
sapè...
Ve ringrazio de core anche se me ce fate rimanè male, ma questo lo
avevo già messo in preventivo...