Newsgroup: it.comp.appl.access
Titolo: Saltare alla n riga in un ciclo For....

Salve a tutti,
vengo subito al nocciolo della questione.
Sto sviluppando un programma per la gestione delle campagne tramite
telemarketing.
Ogni campagna ha diverse domande, e ogni domanda ha di default più
risposte.
Io devo creare una procedura per duplicare la campagna in toto, sono
riuscito a duplicare la campagna le domande e in parte anche le
risposte usando questo codice:
Dim db As DAO.Database
Dim rst As DAO.Recordset
Dim varItem As Variant
Dim avv As String
Dim NewCampa As Integer
avv = MsgBox("Continuare ?", vbQuestion + vbYesNo, "-")
If avv = vbNo Then
Exit Sub
End If
If Me.CmbCampagna.ItemsSelected.Count = 0 Then Exit Sub
Set rst = CurrentDb.OpenRecordset("Tbl_Campagne")
For Each varItem In Me.CmbCampagna.ItemsSelected
    rst.AddNew
    rst!Titolo = Me.CmbCampagna.Column(1, varItem)
    rst!DataInizio = Me.CmbCampagna.Column(2, varItem)
    rst!DataFine = Me.CmbCampagna.Column(3, varItem)
    rst!MaxChiamate = Me.CmbCampagna.Column(4, varItem)
    rst!IDCliente = Me.CmbClienti.Column(0)
    rst.Update
Next varItem
Set rst = Nothing
NewCampa = DMax("[IDCampagna]", "Tbl_Campagne")
' duplica le domande
Dim ContDom As Variant
Dim NewDom As Integer
Dim NumDom As Integer
Dim NumDom_OK As Integer
Dim nriga As Integer
Dim dbDom As DAO.Database
Dim rstDom As DAO.Recordset
Set rstDom = CurrentDb.OpenRecordset("Tbl_Campagne_Domande")
ContDom = Me.CmbDomande.ListCount - 1
For i = 0 To ContDom
    With rstDom
        rstDom.AddNew
        rstDom!IDCampagna = NewCampa
        rstDom!Numero = Me.CmbDomande.Column(2, i)
        rstDom!Descrizione = Me.CmbDomande.Column(3, i)
        rstDom.Update
    End With
NewDom = DMax("[IDDomanda]", "Tbl_Campagne_Domande")
nriga = i + NumDom_OK
NumDom = Me.CmbRisposte.Column(2, nriga)
NumDom_OK = DCount("[IDRispostaDefault]",
"Tbl_Campagne_RisposteDefault", "[IDDomanda]=" & NumDom)
' duplica le risposte
Dim ContRis As Variant
Dim nrigaRisp As Integer
Dim dbRis As DAO.Database
Dim rstRis As DAO.Recordset
Dim strSQL As String
Set rstRis = CurrentDb.OpenRecordset("Tbl_Campagne_RisposteDefault")
ContRis = Me.CmbRisposte.ListCount - 1
For r = 0 To NumDom_OK - 1
    With rstRis
        rstRis.AddNew
        rstRis!IDDomanda = NewDom
        rstRis!IDRisposta = Me.CmbRisposte.Column(3, nrigaRisp)
        rstRis!Descrizione = Me.CmbRisposte.Column(4, nrigaRisp)
        rstRis.Update
    End With
Next r
Next i
rst.Close
rstDom.Close
rstRis.Close
MsgBox "Campagna duplicata", vbOKOnly, "-"
Il problema sta nelle risposte, di per se il ciclo funziona però cosa
fa:
prende la prima domanda, conta le risposte che ci sono e le duplica
utilizzando il ciclo for
prende la seconda domanda, conta le risposte le duplica però iniziando
sempre dalla prima riga.
E' qui il problema, nel ciclo for delle risposte devo fare in modo che
la variabile parta dal numero di riga corrispondente alla prima
risposta di quella domanda.
Ho pensato alla proprietà ListIndex che mi da il numero di riga
selezionato, però nel mio caso deve essere tutto automatico cioè non
devo essere io a selezionare la riga della risposta.
Spero di essere stato abbastanza chiaro.
Grazie x l'aiuto
Massimo

 Massimo
dov'� impostato nrigaRisp ?

 - Mostra testo citato -
L'avevo usato per contare il numero di riga.... ma ritorno sempre li:
come faccio a valorizzarlo senza selezionare la riga specifica?
In pratica quando passo alla domanda 2 e così via, la variabile
nrigaRisp dovrebbe darmi il numero di riga della prima risposta
corrispondente alla domanda 2 e così via... Solo che questo lo so fare
se seleziono la riga......

 Massimo
Non ho letto ed esaminato a fondo tutto il codice, ma se si tratta di
duplicare record credo faresti molto prima con delle query, con una decina
di righe fai tutto il lavoro, funzionano con qualsiasi numero di record e
ti eviti di dovreli contare e scorrerli con il For.
Vedi sull'help INSERT INTO, nella sintassi
  INSERT INTO ... SELECT ... FROM ...
Ciao.
-Marco-
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 se seleziono la riga......
In un database il 99,9% delle operazioni modifica dati sulle tabelle si 
possono eseguire con gli statement query.
Io seguirei questa strada
CurrentdDB.Execute
 alias ADODB CurrentProject.Connection.Execute
Ciao 

 - Mostra testo citato -
Effettivamente non ci avevo pensato, sono andato a cercarmi la strada
più tortuosa....
Grazie per il consiglio
Ciao
Massimo