Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

  1. #1
    Candidat au Club
    Automatisation de la suppression d'une ligne sur une table en fonction d'une Date
    Bonjour à tous, c'est la premiere fois que je poste sur ce forum et j'espère que vous pourrez me donner mes indication sur mon problème.
    Comme le dit mon titre je cherche à supprimer toutes mes lignes "périmés" sur un planning.

    Mon code est le suivant

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
            Dim Connexion = GestionConnection.nouvelleConnection()
            Dim thisDay As DateTime = DateTime.Today
            Dim finSuppression As Boolean = True
            Connexion.Open()
     
            Do
                Dim RequetteSelectionMinimum = "SELECT MIN(fin_indisponibilite) FROM affectation_materiel"
                Dim CommandeSelectionMinimum As New NpgsqlCommand(RequetteSelectionMinimum, Connexion)
                MsgBox(CDate(CommandeSelectionMinimum.ExecuteScalar()).ToString("d"))
                If CDate(CommandeSelectionMinimum.ExecuteScalar()) < thisDay.ToString("d") Then
                    MsgBox(thisDay.ToString("d"))
                    Supress.supressAssociation(Connexion, CommandeSelectionMinimum.ExecuteScalar())
                Else
                    finSuppression = False
                End If
            Loop While finSuppression


    Les 2 Msg box donnent les résultats attendus.
    Et d'autre part :

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
        Public Shared Sub supressAssociation(ByVal Connexion As NpgsqlConnection, ByVal uneDate As Date)
     
            Try
     
                Dim Requete As String = "DELETE FROM affectation_materiel WHERE fin_indisponibilite=" & Format(uneDate, "dd/mm/yyyy").ToString()
                Dim Commande As New NpgsqlCommand(Requete, Connexion)
                Try
                    Commande.ExecuteNonQuery()
                Catch ex As Exception
                    Console.WriteLine("Echec de la suppression à la Base de donnée")
                    Console.WriteLine(ex.Message)
                End Try
     
                Commande.Dispose()
     
            Catch ex As Exception
                Console.WriteLine("Echec de la connection à la base de donnée")
            End Try
     
     
        End Sub


    Et là :

    Une exception de première chance de type 'Npgsql.NpgsqlException' s'est produite dans Npgsql.dll
    Echec de la suppression à la Base de donnée
    ERREUR: 42883: l'opérateur n'existe pas : date = integer

    Je suis sur que c'est une erreur bête mais je me creuse la tête depuis des heures, Merci d'avance.

  2. #2
    Membre expérimenté
    Bonjour,
    Il est préférable d'utiliser une requête paramétrée.

  3. #3
    Candidat au Club
    Merci ! Ca marche au poil en ayant juste retouché à ma classe de suppression.

    Pour ceux que ca intéresserait voilà le code corrigé:

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
            Try
                Dim Requete As String = "DELETE FROM affectation_materiel WHERE fin_indisponibilite= @ladate"
                Dim Commande As New NpgsqlCommand(Requete, Connexion)
                With Commande.Parameters
                    .Add(New NpgsqlParameter("@ladate", NpgsqlTypes.NpgsqlDbType.Date))
                End With
                With Commande
                    .Parameters("@ladate").Value = uneDate
                End With
                Try
                    Commande.ExecuteNonQuery()
                Catch ex As Exception
                    Console.WriteLine("Echec de la suppression à la Base de donnée")
                    Console.WriteLine(ex.Message)
                End Try
                Commande.Dispose()
            Catch ex As Exception
                Console.WriteLine("Echec de la connection à la base de donnée")
            End Try

###raw>template_hook.ano_emploi###