Newsgroup: it.comp.appl.access
Titolo: [VBA] REcordset che non aggiorna tabella

Private Sub cmdSorteggia_Click()
Dim rstPremio As DAO.Recordset
Dim rstConcorrente As DAO.Recordset
Dim rstPremiazioni As DAO.Recordset
Dim strPremio As String
Dim strConcorrente As String
strConcorrente = "SELECT TOP 1 tblConcorrente.id FROM tblConcorrente WHERE 
(((tblConcorrente.concPremiato)<>True)) ORDER BY Int(Rnd([id])*100);"
Set rstConcorrente = CurrentDb.OpenRecordset(strConcorrente)
With rstConcorrente
    .Edit
    !concPremiato = Vero
    .Update
End With
rstConcorrente.Close: Set rstConcorrente = Nothing
End Sub
Non si aggiorna !ConcPremiato valorizzandosi a Vero (E' un campo booleano di 
tipo Si\No) ... come mai?
-- 
MC

MC ha detto: in data 05/10/2005 15.42:

è un campo boolean??
se è così usa l'inglese (per come lo conosco io VBA parla solo inglese)
!concPremiato = TRUE
ciao
Nick

 !concPremiato = TRUE
...magari ... ho provato con VERO, TRUE, SI, 1 ... ma nada , nisba, negot da 
fare!!!!
cosa potrebbe essere?
--
MC 

[cut]
Del codice che segue, tblPremiati si compila tranquillamente mentre i with 
legati a rstPremio erstConcorrente non mi flaggano i campi booleani
!concPremiato  e !assPremio  e non capisco il perchè.
Ripeto, l'errore esce sia con -1, con TRUE, con SI, con YES ...
Private Sub cmdSorteggia_Click()
Dim rstPremio As DAO.Recordset
Dim rstConcorrente As DAO.Recordset
Dim rstPremiazioni As DAO.Recordset
Dim strPremio As String
Dim strConcorrente As String
    strPremio = "SELECT TOP 1 tblPremio.idPremio FROM tblPremio WHERE 
(((tblPremio.assPremio)<>True)) ORDER BY tblPremio.idPremio;"
    strConcorrente = "SELECT TOP 1 tblConcorrente.id FROM tblConcorrente 
WHERE (((tblConcorrente.concPremiato)<>True)) ORDER BY Int(Rnd([id])*100);"
    Set rstPremio = CurrentDb.OpenRecordset(strPremio)
    Set rstConcorrente = CurrentDb.OpenRecordset(strConcorrente)
    Set rstPremiazioni = CurrentDb.OpenRecordset("tblPremiati")
        With rstPremiazioni
            .AddNew
            !idPremio = rstPremio!idPremio
            !idConcorrente = rstConcorrente!ID
            .Update
        End With
        With rstConcorrente
            .Edit
            !concPremiato = -1
            .Update
        End With
        With rstPremio
            .Edit
            !assPremio = -1
            .Update
        End With
    rstConcorrente.Close: Set rstConcorrente = Nothing
    rstPremiazioni.Close: Set rstPremiazioni = Nothing
    rstPremio.Close: Set rstPremio = Nothing
End Sub 

 
controlla l'sql..
non hai messo il campo conPremiato nel recordset... forse è questo che 
blocca
ciao
Nick

 booleano di tipo Si\No) ... come mai?
-- 
_ _
Ciao
MAssimiliano Amendola            
www.accessgroup.it
Cisa - Conferenza Italiana per Sviluppatori Access
Info:  
www.donkarl.com/it

MC ha detto: in data 05/10/2005 16.15:

prova ad aggiungere il campo, oppure fai un SELECT TOP 1 * che risolvi i 
problemi
ciao
Nick

[cut]
Ciao MA,
stò riacquistando della logica!
Ho risolto il problema bypassando l'aggiornamento dei lag delle tabelle 
tblPremio e tblConcorrente da 2 query di aggiornamento anche perchè lo 
stesso concorrente può essere presente da 1 a infinite volte ... perchè 
certi regolamenti lo permettono se correttamente redatti ei depositati!.
Ora ho un'altro problema.
Vorrei rendere automatica la procedura per estrarre i vari vincitori dei 
premi, ti posto il codice definitivo, come posso intervenire secondo te?
Ciao!
******************************************************
Private Sub cmdSorteggia_Click()
Dim rstPremio As DAO.Recordset
Dim rstConcorrente As DAO.Recordset
Dim rstPremiazioni As DAO.Recordset
Dim strPremio As String
Dim strConcorrente As String
Dim PremiDisponibili As Integer
Dim PartecipantiDisponibili As Integer
PremiDisponibili = DCount("[idPremio]", ("tblPremio"), "[assPremio]<>True")
If PremiDisponibili > 0 Then
    strPremio = "SELECT TOP 1 tblPremio.idPremio FROM tblPremio WHERE 
(((tblPremio.assPremio)<>True)) ORDER BY tblPremio.idPremio;"
    strConcorrente = "SELECT TOP 1 tblConcorrente.id, 
tblConcorrente.codConcorrente FROM tblConcorrente WHERE 
(((tblConcorrente.concPremiato)<>True)) ORDER BY Int(Rnd([id])*100);"
    Set rstPremio = CurrentDb.OpenRecordset(strPremio)
    Set rstConcorrente = CurrentDb.OpenRecordset(strConcorrente)
    Set rstPremiazioni = CurrentDb.OpenRecordset("tblPremiati")
        With rstPremiazioni
            .AddNew
            !idPremio = rstPremio!idPremio
            !idConcorrente = rstConcorrente!ID
            !codConcorrente = rstConcorrente!codConcorrente
            .Update
        End With
        DoCmd.OpenQuery "q_agg_premio"
        DoCmd.OpenQuery "q_agg_concorrente"
    rstConcorrente.Close: Set rstConcorrente = Nothing
    rstPremiazioni.Close: Set rstPremiazioni = Nothing
    rstPremio.Close: Set rstPremio = Nothing
Else
    MsgBox "Attenzione..." & Chr(13) & Chr(10) & "non ci sono più premi da 
assegnare" & "!!!", vbInformation, "O&P Estraction Software"
End If
End Sub
******************************************************
--
MC 

PremiDisponibili = DCount("[idPremio]", ("tblPremio"), "[assPremio]<>True")
For Estrazioni = 1 To PremiDisponibili Step 1
GoTo EstrazioneVincitore
EstrazioneVincitore:
bla bla bla
Next
...e anche questa è fatta!!!!
-- 
MC