Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

VBA - recordset aprire connessione a due tabelle

125 views
Skip to first unread message

esseAemme

unread,
Sep 20, 2007, 11:12:34 AM9/20/07
to
Ciao a tutto L'ng,

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

esseAemme

unread,
Sep 20, 2007, 12:59:36 PM9/20/07
to

Ciao a tuttti,

la domanda, probabilmente da ignurant è

devo aprire un db x ogni recordset che mi serve?

Samantha

Cinzia

unread,
Sep 20, 2007, 5:22:20 PM9/20/07
to
Ciao Samanta
>"esseAemme" <samanth...@gmail.com> ha scritto nel messaggio
>news:1190301154.2...@22g2000hsm.googlegroups.com...

>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
----------------------------------------


esseAemme

unread,
Sep 21, 2007, 3:45:28 AM9/21/07
to
On 20 Set, 23:22, "Cinzia" <cinziapagani-no-spam_ple...@tiscali.it>
wrote:
> Ciao Samanta
>
> >"esseAemme" <samantha.ci...@gmail.com> ha scritto nel messaggio

> >news:1190301154.2...@22g2000hsm.googlegroups.com...
> >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?
>
La prima volta che ho avviato il comando, nella finestra immediata mi
scriveva NULLO
Dalla seconda volta invece, non eseguiva nessuna operazione, come che
il comando non avesse alcuna azione impostata a evento click_. Era
troppo strano, ho chiuso e riaperto + volte il db, ma non è cambiato
nulla.

> >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

esseAemme

unread,
Sep 21, 2007, 3:52:13 AM9/21/07
to

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...

0 new messages