il codice scritto sotto non funziona. Siccome non riesco a
debuggarlo, il problema sarà che ho aperto un'unica connessione al
database???
Io vorrei scorrere due tabelle, e confrontare due valori, se sono
uguali mi prende il campo4, copia il valore e lo trascrive nel campo
c15.
Private Sub Comando5_Click()
On Error GoTo Err_Comando5_Click
Dim db As Database
'Dim rstscrivi As ADODB.Recordset
Dim rstleggi As ADODB.Recordset
Dim tabscrivi As String
Dim tableggi As String
Dim valore As String
Set db = CurrentDb
'Set rstscrivi = New ADODB.Recordset
Set rstleggi = New ADODB.Recordset
tabscrivi = "TAB_RIEPILOGATIVO"
tableggi = "COMPLETA"
rstscrivi.Open tabscrivi, CurrentProject.Connection, adOpenDynamic,
adLockOptimistic
rstleggi.Open tableggi, CurrentProject.Connection, adOpenDynamic,
adLockOptimistic
rstscrivi.MoveLast
rstscrivi.MoveFirst
Do While Not rstleggi.EOF
If rstleggi!codice = 15 And rstleggi!idsim = rstscrivi!SIM Then
valore = rstleggi!Campo4
Debug.Print rstleggi!codice
Debug.Print rstleggi!idsim
Debug.Print rstscrivi!SIM
Else
Exit Sub
End If
Debug.Print valore
'Debug.Print rstscrivi!c15
rstscrivi!c15 = valore
rstscrivi.Update
rstscrivi.MoveNext
rstleggi.MoveNext
Loop
Set rstscrivi = Nothing
Set rstleggi = Nothing
MsgBox "Trascrizione Campo 15 completata"
Exit_Comando5_Click:
Exit Sub
Err_Comando5_Click:
MsgBox Err.Description
Resume Exit_Comando5_Click
End Sub
Grazie a tutti,
Samantha
Ciao a tuttti,
la domanda, probabilmente da ignurant è
devo aprire un db x ogni recordset che mi serve?
Samantha
>il codice scritto sotto non funziona. Siccome non riesco a
>debuggarlo, il problema sarà che ho aperto un'unica connessione al
>database???
No, xchè non riesci a debuggarlo? e cosa non funziona? da
errore(quale)? oppure non fa quello che vuoi?
>Io vorrei scorrere due tabelle, e confrontare due valori, se sono
>uguali mi prende il campo4, copia il valore e lo trascrive nel campo
>c15.
Perchè lo fai così e non usi invece una query di aggiornamento?
>rstscrivi.MoveLast
>rstscrivi.MoveFirst
> Exit Sub >>>>>>>>>>>>>>>>>>>Qui noon appena la condizione
> sopra non è verificata esci dalla sub che non mi pare sia quello
> che vuoi>>>>>>>>>>>>>>>>
>End If
>Debug.Print valore
>'Debug.Print rstscrivi!c15
>rstscrivi!c15 = valore
>rstscrivi.Update
>rstscrivi.MoveNext
>rstleggi.MoveNext
>Loop
>Set rstscrivi = Nothing
>Set rstleggi = Nothing
>MsgBox "Trascrizione Campo 15 completata"
>
>
>Exit_Comando5_Click:
> Exit Sub
>Err_Comando5_Click:
> MsgBox Err.Description
> Resume Exit_Comando5_Click
>End Sub
>Grazie a tutti,
>Samantha
Continuo a ritenere che una query di aggiornamento sia meglio ma
dovresti chiarire meglio cosa c'è in TAB_Riepilogativo e in COMPLETA
--
Cinzia [Office Access MVP]
_______________________
www.riolab.org
----------------------------------------
> >Io vorrei scorrere due tabelle, e confrontare due valori, se sono
> >uguali mi prende il campo4, copia il valore e lo trascrive nel campo
> >c15.
>
> Perchè lo fai così e non usi invece una query di aggiornamento?
La query di aggiornamento, stamattina sono ripartita da qua. Ecco gli
step che ho fatto:
1) Creo una copia della tabella COMPLETA e la chiamo COMPLE4RIEP
2) creo una query di eliminazione dove elimino i record con codice
1,2,3,90,91,92,93,94
3) Nelle relazioni creo una relazione tra:
Tab_riepilogativo.SIM 1-> a molti Completa.IDSIM
Ora le tabelle sono collegate, mentre prima nei codici sopra citati
(da 1 a 94) il campo Completa.IDSIM era vuoto, e quindi non riusciva a
creare una relazione.
Creo una query di accodamento:
INSERT INTO TAB_RIEPILOGATIVO ( C15 )
SELECT COMPLE4RIEP.Campo4
FROM TAB_RIEPILOGATIVO INNER JOIN COMPLE4RIEP ON
TAB_RIEPILOGATIVO.SIM=COMPLE4RIEP.IDSIM
WHERE (((COMPLE4RIEP.CODICE)=15));
Ma quando l'avvio mi arriva l'errore:
Impossibile accodare la query di accodamento, numero di record non
aggiunti alla tabella a causa di violazione di chiave:655;
In effetti, io il TAB_RIEPILOGATIVO ho 1013 SIM = record, mentre i
valori del codice 15 sono solo 655.
Questo perchè il file da dove importo i dati, se un valore è pari a
zero, viene omesso.
Dunque, dovrei dire alla tabella di accodamento, che se 15 non esiste
per quella SIM, il valore deve essere pari a zero.
Se provo con una tabella di aggiornamento, come faccio a dirgli che il
valore in Tab_riepilogativo.C15 deve essere uguale a
Comple4Riep.Campo4 ?
Come devo costruire la query di aggiornamento??
UPDATE TAB_RIEPILOGATIVO INNER JOIN COMPLE4RIEP ON
TAB_RIEPILOGATIVO.SIM = COMPLE4RIEP.IDSIM SET
WHERE (((COMPLE4RIEP.CODICE)=15));
La tabella Completa si presenta così
328010XXXX 4 328010XXXX
328010XXXX 5 SMS NON CONSEGNATO
463393326XXX 20060930 13.33.55 0.00.00 0,01
328010XXXX 5 SMS SERVIZI INTERATTIVI I-BOX: SMS
49XXX 20061002 9.15.43 0.00.00 0
328010XXXX 5 PERSONALE VS AOM RADIOM. ALTRO OPERATORE
3383751XXX 20061002 16.51.53 0.00.15 0,0125
328010XXXX 15 Numero totale chiamate: 661
328010XXXX 25 Durata totale chiamate:
00001:42:08
328010XXXX 35 Totale importo traffico generico utenza: 2,8024
328010XXXX 6 AZIENDALE DATI I-BOX
20061026 19.05.21 3.07.36 127 0,0322
328010XXXX 16 Numero totale chiamate: 23
328010XXXX 26 Totale durata traffico dati utenza:
00082:15:25
328010XXXX 36 Totale pacchetti dati utenza: 6335
328010XXXX 46 Totale importo traffico dati utenza: 1,6083
328010XXXX 8 SERVIZI INTERATTIVI I-BOX: SMS
49XXX 20061001 9.15.30 0 0
328010XXXX 18 Numero totale chiamate:
00000046
328010XXXX 28 Totale pacchetti servizi interattivi utenza: 000000000
328010XXXX 38 Totale importo traffico servizi interattivi utenza:
000000000,0000
328010XXXX 37 Totale traffico
utenza:
4,4107
La tabella riepilogativa vorrebbe essere:
SIM C15 c25 c35 c16
328XXXX Valore valore valore valore
per ottenere in un unico record i dati riepilogativi dove la
descrizione è totale, tenendo conto che ci sono oltre 1000 SIM.
Grazie infinite,
Samantha
Cacchio, in credi bi le ci sono riuscita!!!!
UPDATE TAB_RIEPILOGATIVO INNER JOIN COMPLE4RIEP ON
TAB_RIEPILOGATIVO.SIM = COMPLE4RIEP.IDSIM SET TAB_RIEPILOGATIVO.C15 =
COMPLE4RIEP.CAMPO4
WHERE (((COMPLE4RIEP.CODICE)=15));
quando ci penso troppo mi incasino...