Visualizzazione dei risultati da 1 a 2 su 2
  1. #1

    [VB6] - Problema con una routine

    Allora ragazzi
    siete la mia ultima spiaggia
    ho testato e ritestato questa sub ma non riesco a capire
    se la eseguo passo passo va tutto bene ma se lancio l'esecuzione finisce in un ramo in un momento sbagliato: mi spiego meglio
    devo inserire o aggiornare delle righe in una tabella quindi prima faccio un controllo di esistenza della chiave di quella tabella;
    se la chiave esiste allora faccio l'aggiornamento altrimenti faccio l'inserimento.
    quello che succede è che questo controllo di esistenza funziona con il debug, ma non senza(infatti va in chiave duplicata)
    ho pensato che potrebbe essere un problema di commit, però access non gestisce questa istruzione; allora ho provato con begintrans e committrans ma niente.
    posto il codice (scusate se è un pò lungo
    codice:
    Public Sub calcola_classifica()
    
    Dim db As Database
    Dim rsESISTENZA As New ADODB.Recordset
    Dim rsCALENDARIO As New ADODB.Recordset
    Dim rsCLASSIFICA As New ADODB.Recordset
    
    Dim esiste As Boolean
    Dim goal_casa, goal_fuori As Integer
    Dim id_squadra As Integer
    Dim giocate_casa As Integer
    Dim punti_casa As Integer
    Dim vinte_casa As Integer
    Dim perse_casa As Integer
    Dim X_casa As Integer
    Dim giocate_fuori As Integer
    Dim punti_fuori As Integer
    Dim vinte_fuori As Integer
    Dim perse_fuori As Integer
    Dim X_fuori As Integer
    Dim g_fatti_casa As Integer
    Dim g_subiti_casa As Integer
    Dim g_fatti_fuori As Integer
    Dim g_subiti_fuori As Integer
    Dim diff_reti As Integer
    
    id_campionato = 1
    Conn_Calcetto.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & _
                                      App.Path & "\campionato.mdb;"
    Conn_Calcetto.CursorLocation = adUseClient
    Conn_Calcetto.Open
    
    Set db = OpenDatabase(App.Path & "\campionato.mdb")
    db.Execute "delete from classifica_app", dbFailOnError
    db.Close
    
    rsCALENDARIO.Open "SELECT * FROM CALENDARIO ORDER BY " & _
        "1, 2, 3", Conn_Calcetto, 1, 3
    
    rsCALENDARIO.MoveFirst
    Do Until rsCALENDARIO.EOF
        goal_casa = goal_fatti(rsCALENDARIO("id_giornata"), rsCALENDARIO("id_squadra_casa"))
        goal_fuori = goal_fatti(rsCALENDARIO("id_giornata"), rsCALENDARIO("id_squadra_fuori"))
        GoSub carica_record_casa
        GoSub controlla_esistenza
        If esiste Then
            GoSub update_classifica
        Else
            GoSub insert_classifica
        End If
        GoSub carica_record_fuori
        GoSub controlla_esistenza
        If esiste Then
            GoSub update_classifica
        Else
            GoSub insert_classifica
        End If
        rsCALENDARIO.MoveNext
    Loop
    rsCLASSIFICA.Open "SELECT * FROM CLASSIFICA_APP ORDER BY " & _
        "1", Conn_Calcetto, 1, 3
    Set F_classifica.DataGrid1.DataSource = rsCLASSIFICA
    Exit Sub
    
    insert_classifica:
    Set db = OpenDatabase(App.Path & "\campionato.mdb")
    db.Execute "INSERT INTO CLASSIFICA_APP " & _
               "VALUES( " & _
               id_squadra & ", " & _
               giocate_casa & ", " & _
               giocate_fuori & ", " & _
               punti_casa & ", " & _
               punti_fuori & ", " & _
               vinte_casa & ", " & _
               perse_casa & ", " & _
               X_casa & ", " & _
               vinte_fuori & ", " & _
               perse_fuori & ", " & _
               X_fuori & ", " & _
               g_fatti_casa & ", " & _
               g_subiti_casa & ", " & _
               g_fatti_fuori & ", " & _
               g_subiti_fuori & ", " & _
               diff_reti & ")", dbFailOnError
    db.Close
    Return
    
    update_classifica:
    Set db = OpenDatabase(App.Path & "\campionato.mdb")
    db.Execute "update CLASSIFICA_APP SET " & _
               "GIOCATE_CASA = GIOCATE_CASA + " & giocate_casa & _
               ", GIOCATE_FUORI = GIOCATE_FUORI + " & giocate_fuori & _
               ", PUNTI_CASA = PUNTI_CASA + " & punti_casa & _
               ", PUNTI_FUORI = PUNTI_FUORI + " & punti_fuori & _
               ", VINTE_CASA = VINTE_CASA + " & vinte_casa & _
               ", PERSE_CASA = perse_casa + " & perse_casa & _
               ", X_CASA = X_CASA + " & X_casa & _
               ", VINTE_FUORI = VINTE_FUORI + " & vinte_fuori & _
               ", PERSE_FUORI = PERSE_FUORI + " & perse_fuori & _
               ", X_FUORI = X_FUORI + " & X_fuori & _
               ", G_FATTI_CASA = G_FATTI_CASA + " & g_fatti_casa & _
               ", G_SUBITI_CASA = G_SUBITI_CASA + " & g_subiti_casa & _
               ", G_FATTI_FUORI = G_FATTI_FUORI + " & g_fatti_fuori & _
               ", G_SUBITI_FUORI = G_SUBITI_FUORI + " & g_subiti_fuori & _
               ", DIFF_RETI = DIFF_RETI + " & diff_reti & _
               " where ID_SQUADRA = " & id_squadra, dbFailOnError
    db.Close
    Return
    
    controlla_esistenza:
    rsESISTENZA.Open "select id_squadra from CLASSIFICA_APP " & _
                     "where id_squadra = " & id_squadra, Conn_Calcetto, 1, 3
    If rsESISTENZA.EOF Or rsESISTENZA.BOF Then
        esiste = False
    Else
        esiste = True
    End If
    rsESISTENZA.Close
    Return
    
    carica_record_casa:
        'valorizzo record per la squadra in casa
        id_squadra = rsCALENDARIO("id_squadra_casa")
        giocate_casa = 1
        giocate_fuori = 0
        If goal_casa > goal_fuori Then
            punti_casa = 3
            vinte_casa = 1
            perse_casa = 0
            X_casa = 0
        Else
            If goal_casa = goal_fuori Then
                punti_casa = 1
                vinte_casa = 0
                perse_casa = 0
                X_casa = 1
            Else
                punti_casa = 0
                vinte_casa = 0
                perse_casa = 1
                X_casa = 0
            End If
        End If
        punti_fuori = 0
        vinte_fuori = 0
        perse_fuori = 0
        X_fuori = 0
        g_fatti_casa = goal_casa
        g_fatti_fuori = 0
        g_subiti_casa = goal_fuori
        g_subiti_fuori = 0
        diff_reti = g_fatti_casa - g_subiti_casa
    Return
    
    carica_record_fuori:
        'valorizzo record per la squadra fuori casa
        id_squadra = rsCALENDARIO("id_squadra_fuori")
        giocate_casa = 0
        giocate_fuori = 1
        If goal_fuori > goal_casa Then
            punti_fuori = 3
            vinte_fuori = 1
            perse_fuori = 0
            X_fuori = 0
        Else
            If goal_fuori = goal_casa Then
                punti_fuori = 1
                vinte_fuori = 0
                perse_fuori = 0
                X_fuori = 1
            Else
                punti_fuori = 0
                vinte_fuori = 0
                perse_fuori = 1
                X_fuori = 0
            End If
        End If
        punti_casa = 0
        vinte_casa = 0
        perse_casa = 0
        X_casa = 0
        g_fatti_fuori = goal_fuori
        g_fatti_casa = 0
        g_subiti_fuori = goal_casa
        g_subiti_casa = 0
        diff_reti = g_fatti_fuori - g_subiti_fuori
    Return
    End Sub
    
    Public Function goal_fatti(id_giornata, id_squadra)
    Dim Conn As New ADODB.Connection
    Dim rsGOALFATTI As New ADODB.Recordset
    Conn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & _
                                      App.Path & "\campionato.mdb;"
    Conn.CursorLocation = adUseClient
    Conn.Open
    rsGOALFATTI.Open "SELECT SUM(TOTALE_GOAL) AS GOAL FROM MARCATORI " & _
                     "WHERE" & _
                     " ID_SQUADRA = " & id_squadra & _
                     " AND ID_GIORNATA = " & id_giornata & _
                     " AND ID_CAMPIONATO = " & id_campionato _
                     , Conn, 1, 3
    goal_fatti = rsGOALFATTI("goal")
    rsGOALFATTI.Close
    Conn.Close
    End Function

  2. #2
    non ci pensate più
    ho risolto
    invece di

    db.execute.......

    ho messo

    conn_calcetto.execute.....

    ho cioè utilizzato la stessa connessione del recordset invece di aprirne un'altra ( che poi perchè ne ho fatto un'altra non l'ho capito ^_^ )

    ciao

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.