Newsgroup: it.comp.lang.visual-basic
Titolo: UPDATE SU RECORD CON ADO

ciao a tutto il news
ho un problemino con l' uso di ADO   il codice e' il seguente :
If DE2.rscmdrap.State = adStateClose Then
DE2.rsCMDRAP.Open                                        'apertura
recordset database da aggiornare
End If
DE3.rscmd_all.MoveFirst                                     ' posizione
primo record database di lettura  con accesso sequenziale sui record
DE2.rscmdrap.AddNew
DE2.rscmdrap.Fields("cdpar").Value = DE3.rscmd_all.Fields("cdpar").Value
' copia del valore codice prodotto e descrizione prodotto su database da
aggiornare
DE2.rscmdrap.Fields("depar").Value = DE3.rscmd_all.Fields("depar").Value
Do Until DE3.rscmd_all.EOF
' inizio ciclo lettura database
 If DE3.rscmd_all.Fields("cdpar").Value = DE2.rsCMDRAP.Fields("cdpar").Value
Then      ' controllo che il valore del campo codice parte si uguale
  Allinea
  Else
    Exit Do
 End If
    Loop
 End Sub
' routin che mi controlla i valori dei campi nei singoli record del database
di lettura e li va a posizionare  sui campi del record corrente
Private Sub Allinea()
If DE3.rscmd_all.Fields("ggesi") = "15" And DE3.rscmd_all.Fields("meesi") =
"10" Then
      DE2.rsCMDRAP.Fields("1510").Value =
DE3.rscmd_all.Fields("esisf").Value
      DE2.rsCMDRAP.Update
       End If
   If DE3.rscmd_all.Fields("ggesi") = "28" And DE3.rscmd_all.Fields("meesi")
= "10" Then
      DE2.rsCMDRAP.Fields("2810").Value =
DE3.rscmd_all.Fields("esisf").Value
      DE2.rsCMDRAP.Update
' (***> posizione errore "impossibile individurare la riga specificata per
l'aggiornamento e' p
ossibile che alcuni valori siano stati modificati dopo l'ultima operazione
di lettura")
      End If
   If DE3.rscmd_all.Fields("ggesi") = "15" And DE3.rscmd_all.Fields("meesi")
= "11" Then
      DE2.rsCMDRAP.Fields("1511").Value =
DE3.rscmd_all.Fields("esisf").Value
      DE2.rsCMDRAP.Update
      End If
   If DE3.rscmd_all.Fields("ggesi") = "28" And DE3.rscmd_all.Fields("meesi")
= "11" Then
      DE2.rsCMDRAP.Fields("2811").Value =
DE3.rscmd_all.Fields("esisf").Value
      DE2.rsCMDRAP.Update
      End If
   If DE3.rscmd_all.Fields("ggesi") = "15" And DE3.rscmd_all.Fields("meesi")
= "12" Then
      DE2.rsCMDRAP.Fields("1512").Value =
DE3.rscmd_all.Fields("esisf").Value
     DE2.rsCMDRAP.Update
     End If
     DE3.rscmd_all.MoveNext
  End Sub
Ora questo e' il contenuto del recordset  DE3
CDPAR                                    DEPAR
ESISI  ESISF  ANESI   MEESI     GGESI
0002004     CILINDRO DI ESPULSIONE TUBO QUADRO
0        12      02            10             15
0002004     CILINDRO DI ESPULSIONE TUBO QUADRO
0        30      02            10             28
0002004     CILINDRO DI ESPULSIONE TUBO QUADRO
0        12      02            11             15
0002004     CILINDRO DI ESPULSIONE TUBO QUADRO
0          5      02            11             28
0081124     PANNELLO VERNICIATO ROSSO
0          0      03            12             15
E questo e' il risultato che vorrei ottenere
Contenuto del DE2
CDPAR                                   DEPAR
1510            2810             1511       2811    11512
0002004          CILINDRO ECCC..
12                30                 12           5            0
Il problema e' che una volta che lui a fatto il primo ciclo  e ha scritto su
DE2 il codice la descrizione e il valore 12 nel campo 1510 qundoesegue per
la seconda volta il ciclio e dovrebbe
scrivere il valore 30 del campo 2810 e dovrebbe fare l'update del record in
questo caso ci troviamo qui  (***>>)  Domanda perche' questo messagio??? a
cosa e' dovo hai puntatori ??
Vi ringrazio anticipatamente  !!!!

 ciao a tutto il news
cut
come hai notato nessuno ti risponde.....
non siamo cattivi....
è che hai postato una quantità immane di codice....senza in realtà spiegare
nulla
DE sarà un dataenvironment...ma solo tu sai a cosa è collegato
Come diciamo a molti
se la fretta ti conduce a fare uno "Spaghetti-code" oh beh solo tu e un bel
po di valium ti aiuteranno!
nello specifico....
costruisciti semplici funzioni che usano ADO
a)Una per connettere un database
b)Una per aprire un recordset (caso mai con default già settati i cursori il
lock etc etc)
c)Una per eseguire codice SQL e basta (con o senza ritorno di recordset)
a questo punto ai i tuoi mattoncini lego da combinare...e risolvere il
problema
che se ho capito qualcosa potrebbe essere
Apro la connessione
do
    leggo i dati da una query
    preparo una stringa SQL per l'update/insert
    eseguo l'sql
loop fino a EOF
Chiudo la connessione
bye man!
--
Il Wodkino Nazionale è a : 
www.martek.it
Bestiario del ng: 
http://www.martek.it/go.asp?PortamiA=2
Download programmi Quotefix ed altro:
http://www.martek.it/go.asp?PortamiA=4
User: ICLVB  pw:  amici

Hai ragione saro' piu' coinciso, dunque DE3 e' una commessione a un database
MsAccess  Data Environment e scrittura e lettura e condiviso con dei dati
come questi
CDPAR                                    DEPAR
ESISI    ESISF ANESI   MEESI GGESI
0002004     pippo
0    12       02          10            15
0002004     pippo
0     30      02          10            28
0002004     pippo
0     12      02          11            15
0002004     pippo
0       5      02          11            28
0081124     lippo
0       0      03          12            15
DE2 e' sempre un database MS Access connessione DataEnvironment  accesso
scrittura lettura e condiviso  e ha una struttura cosi'
cdpar                   depar                      1510           2810
1511     2811          1512
ora il problema e' che l'applicativo de aprire ambedue i database e per
questo ho usato il Data Environment
leggere sequenzialmente il primo record del DE3  scrivere il valore di
cdpar e depar creando il primo record  e poi con un ciclo finche' il valore
del codice parte di DE3 coincide con il valoredel codice parte di DE2
leggere  il valore del contenuto dei campi meesi e ggesi di DE3  e se
meesi = 10 e ggesi =15 scrivi il valore del campo   esisf  nel campo del DE2
= 1510
ottenendo un risultato cosi
cdpar             depar                        1510     2810  1511  2811
1512
0002001       pippo                           12         30      12       5
0081124       lippo
0
Come posso procedere per otenere un risultato del genere grazie e scusate se
non sono stato abbastanza esplicativo !

 scusate se non sono stato abbastanza esplicativo !
Numero UNA virgola e numero UNO punti esclamativi.
Nient'altro, come punteggiatura.
Scusa Stefano, ma non credi che, utilizzando un italiano comprensibile,
renderesti la vita più facile a chi vorrebbe aiutarti (e quindi riceveresti
più risposte)?
Ciao
Alberto
--
E non so se avrò gli amici a farmi il coro,
o se avrò soltanto volti sconosciuti,
canterò le mie canzoni a tutti loro
e alla fine della strada
potrò dire che i miei giorni li ho vissuti...

 come questi
non c'ho capito una mazza!
in pratica vuoi leggere i dati da un db e scriverlo in un altro?
Facile da codice:
ConnessioneUNO.....su un db
ConnessioneDUE.....su un altro DB
se usi ConnesssioneUNO apri la tabella Pippo
se usi ConnessioneDUE apri la tabella Topolino
con le dovute cautele e attenzione ai tipi di variabile alla formattazione
etc etc.....
pippo.movefirst
do
    leggo controllo e se è il caso
        PROCEDURA cambiaTabellaTopolino(passali il dato da cambiare)
    ovviamnete li passerai anche un ID o un qualcosa di univoco se devono
"battere in pari" .....essere sincronizzate!
    pippo.movenext
loop until pippo.eof
fatto tutto
connessioneUNO.close
connessioneDUE.close
LASCIA stare il DE!
Buttalo via ...è ora di imparare a programmare ! :-)

Grazie Wodka4u !!!!! solo che non e' proprio un leggi e copia e' più  così
dunque DE3 e' una connessione a una tabella
chiamata TEMP di
MsAccess , tramite Data Environment con proprietà di accesso: ReadWrite e
ShareDanyNone.
 Il Contenuto del recordset di DE3 e' il seguente:
CDPAR   DEPAR   ESISI    ESISF ANESI   MEESI GGESI
-------------------------------------------------------------------------
2004          pippo          0      12           02          10     15
2004          pippo          0      30           02          10     28
2004          pippo          0      12           02          11     15
2004          pippo          0       5            02          11      28
81124        lippo           0       0            03          12      15
 DE2 e' sempre una connessione a una tabella MS Access, chiamata PROSPETTO
 tramite DataEnvironment  con proprietà di accesso: ReadWrite e
ShareDanyNone.
 La tabella è vuota e ha i seguenti campi :
cdpar         depar     1510           2810        1511     2811    1512
---------------------------------------------------------------------------
Ora, il problema e' che l'applicativo deve  aprire ambedue i database,
leggere sequenzialmente il primo record del DE3,  scrivere il valore di
cdpar e depar, creando il primo record,  poi con un ciclo(Du Until);
 finche' il valore del campo codice parte di DE3 coincide con il valore del
campo codice parte di DE2, leggere  il contenuto dei campi meesi e ggesi di
DE3,
e se meesi = 10 e ggesi =15 ,scrivere  il valore del campo  esisf  nel
campo1510della tabella Prospetto;
se meesi=10 e ggesi=28,scrivere  il valore del campo  esisf  nel
campo2810della tabella Prospetto,
cosi di seguito fino ad ottenere nella tabella PROSPETTO un risultato del
genere :
cdpar         depar                1510     2810   1511   2811   1512
-------------------------------------------------------------------
2004        pippo                    12         30      12       5
0
81124       lippo
Grazie ancora !!!

Stefano Grassi wrote:
UH!
che database sono?
hai detto access no?
Collega le tabelle dell'altro pc e fatti una query?
sai cosa ho fatto io con Access
ho fatto un DB chiamato Test.mdb in una dir....
poi son andato nelle tabelle e ho fatto
Tasto destro "collega tabelle"
e ho collegato 2 tabelle di 2 DB diversi in Dir diverse
poi ho fatto una query
SELECT Anagrafica.*, Celle.*
FROM Anagrafica INNER JOIN Celle ON Anagrafica.IDscheda = Celle.IDscheda;
ma lo sai che funziona?????
butta via il de....o modifica un po il db...o fatto un terzo db per fare ste
cose...collega le tabelle esterne...oplà!
una query di aggiornamento e ci sei!
(o di creazione tabelle)
non complicarti la vita!!!!!!!
bye man!
;-)
