Newsgroup: it.comp.appl.access
Titolo: Query di aggiornamento.

Ciao.
Un bel pò di tempo fa, Alessandro Cara mi suggerì un ottimo codice per
invertire due squadre (andata-ritorno) in un campionato di calcio ed è
sempre filato tutto liscio fintantochè mi hanno fatto notare un'
anomalia e cioè che ad un paio di squadre appartenenti a campionati
diversi ( nel db ci sono parecchi campionati ognuno con un proprio
codice di identificazione: Cod), non veniva implementata nel girone di
ritorno l'inversione partita. Premetto che nel db ci sono un sacco di
opzioni, tipo modificare le date, gli orari, l'abbandono della squadra
al campionato ecc... per cui in un modo o nell'altro ( tramite query
di aggiornamento) si mette in continuazione mano al calendario delle
partite. In poche parole, sussistendo quest'anomalia, nel momento in
cui si vuole cambiare qualcosa, il calendario esce fuori tutto
sballato. Andando per esclusione ho notato che l'anomalia (che
purtroppo non mi riesce di riprodurre) potrebbe venir fuori dal
suddetto codice:
On Error GoTo Err_Inversione_Partita_Click
Dim nG As Integer
Dim nGar As Integer
Dim sSQL As String, bx As String, bx1 As Integer
DoCmd.SetWarnings False
nG = DMax("G", "CalendarioPartite", "Cod=" & Me.Cod)
nGar = nG / 2
If G > nGar Then
     MsgBox "Partita non invertibile", vbExclamation
     Inversione_Partita = Not Inversione_Partita
     Exit Sub
End If
bx = Replace(B, "'", "''")
sSQL = "Update calendariopartite set A='" & Replace(A, "'", "''") &
"'"
sSQL = sSQL & ", B  ='" & bx & "'"
sSQL = sSQL & ",Inversione_Partita = " & Inversione_Partita
sSQL = sSQL & " where G=" & (G + nGar) & " and A ='" & bx & "'"
DoCmd.RunSQL sSQL
With Recordset
   .Edit
   !A = B.Value
   !B = A.Value
   .Update
End With
DoCmd.SetWarnings True
   Me.Refresh
Exit_Inversione_Partita_Click:
    Exit Sub
Err_Inversione_Partita_Click:
    MsgBox Err.Description
    Me.Inversione_Partita.Value = ""
    Resume Exit_Inversione_Partita_Click
Andando ad aggiungere il riferimento al Cod (codice identificativo dei
vari campionati di calcio):
bx = Replace(B, "'", "''")
sSQL = "Update calendariopartite set A='" & Replace(A, "'", "''") &
"'"
sSQL = sSQL & ", B  ='" & bx & "'"
sSQL = sSQL & ",Inversione_Partita = " & Inversione_Partita
sSQL = sSQL & " where Cod=" & Me.Cod & " and G=" & (G + nGar) & " and
A ='" & bx & "'"
potrei risolvere il problema?
o quantomeno, il "Cod" è identificato o manca qualcosa alla query?
Grazie a chi vorrà darmi una mano.
Ciao Vladimiro.


Nessun suggerimento?
Voglio precisare che ai tempi in cui a.c. mi suggerì il suddetto
codice, la variabile nG non era:
nG = DMax("G", "CalendarioPartite", "Cod=" & Me.Cod)  ma solo:
nG = DMax("G", "CalendarioPartite") in quanto il db era sviluppato
solo per un campionato la volta; è solo successivamente che ho
aggiunto il "Cod" per raggruppare ogni singolo campionato.
Comunque, per essere più precisi, "G" è il campo in cui si sviluppa il
progressivo delle giornate, "A" e "B" sono rispettivamente i campi in
cui ci sono le squadre che giocano in casa e fuoricasa.
Forse è meglio porre delle singole domande :-)
1) Funzione Replace:
bx = Replace(B, "'", "''" & " and Cod=" & Me.Cod)
è giusta? riesce a guardare solo all'interno del Cod (campionato)
specifico?
bx1 = Replace(FUORI, "'", "''" & " and Cod=" & Me.Cod)
è giusta anche se il campo "FUORI" è di tipo numerico?
2) Query di aggiornamento:
sSQL = "Update calendariopartite set A='" & Replace(A, "'", "''") &
"'"
in che modo posso inserire la condizione WHERE ( Cod = Me.Cod)
oppure ne potrei fare a meno in quanto alla fine la variabile sSQL
riceve la condizione WHERE?:
sSQL = sSQL & " where Cod=" & Me.Cod & " and G=" & (G + nGar) & " and
A ='" & bx & "'
Ciao Vladimiro.