IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
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

VB.NET Discussion :

[VB 2005] bug dans Requete SQL


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Inscrit en
    Février 2008
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 11
    Par défaut [VB 2005] bug dans Requete SQL
    Bonjour à tous,

    Je suis nouveau ici donc j'espère que je poste au bon endroit...
    Voici mon problème:
    j'ai une base de donnée stoquée en sql serveur, dont les manipulations se font via un programme VB 2005. Chaque année, on reçoit un fichier d'update global, que le programme VB traite. Celui-ci met à jour toutes les data base présent dans mon sql serveur. Cependant, il n'arrive pas à updater une table en particulier, pour une raison vraiment étrange (je ne suis pas informaticien pûre souche, mais j'ai discuté avec des vrais informaticiens et ils ne comprennent pas non plus).
    Voici le code de l'update:

    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
            Public Sub UpdateASSOCIATE(ByVal drAssociate As XSD_Sabam.XSD.ASSOCIATERow, ByVal AncienCodeSabam As String)
     
            Dim sqlTransac As SqlClient.SqlTransaction
            Dim sqlCommand As New SqlClient.SqlCommand
            OpenConnexionSQL()
            sqlTransac = sqlConnexion.BeginTransaction("UpdateASSOCIATE")
     
            Try
                With sqlCommand
                    .Connection = sqlConnexion
                    .Transaction = sqlTransac
                    .Parameters.AddWithValue("@AncCodeSabam", AncienCodeSabam.Trim.ToString)
                    .Parameters.AddWithValue("@CodeSabam", drAssociate.CodeSabam.ToString)
                    .Parameters.AddWithValue("@Name", drAssociate.Name.ToString)
                    .Parameters.AddWithValue("@FirstName", drAssociate.FirstName.ToString)
                    .Parameters.AddWithValue("@DateOfBirth", CDate(drAssociate.DateOfBirth.ToString))
                    .Parameters.AddWithValue("@Sex", drAssociate.Sex.ToString)
     
                    If drAssociate.IsDateFirstAmountNull Then
                        .Parameters.AddWithValue("@DateFirstAmount", SqlTypes.SqlDateTime.Null)
                    Else
                        .Parameters.AddWithValue("@DateFirstAmount", CDate(drAssociate.DateFirstAmount.ToString).ToString)
                    End If
     
                    If drAssociate.IsDateReportNull Then
                        .Parameters.AddWithValue("@DateReport", SqlTypes.SqlString.Null)
                    Else
                        .Parameters.AddWithValue("@DateReport", CDate(drAssociate.DateReport.ToString).ToString)
                    End If
     
                    .Parameters.AddWithValue("@Type", drAssociate.Type.ToString)
                    .Parameters.AddWithValue("@Nature", drAssociate.Nature.ToString)
     
                    .CommandText = "update ASSOCIATE " & _
                                   "SET CodeSabam = @CodeSabam " & _
                                   ",Name = @Name " & _
                                   ",FirstName = @FirstName " & _
                                   ",DateOfBirth = @DateOfBirth " & _
                                   ",sex = @sex " & _
                                   ",DateFirstAmount = @DateFirstAmount " & _
                                   ",DateReport = @DateReport " & _
                                   ",Type = @Type " & _
                                   ",Nature = @Nature " & _
                                   "WHERE (CodeSabam = @AncCodeSabam)"
     
                    .ExecuteNonQuery()
    Au moment d'exécuter la requête, il m'indique le message d'erreur suivant:

    "Subquery returned more than one value. This is not permitted when the subquerry follows =, !=, <, <=, >, >= or when the subquerry is used as an expression. The statement has been terminated".

    Ce que je comprend encore moins, c'est que lorsqu'il s'agit d'updater une personne qui a été insérée juste l'année d'avant (donc une fois), cela marche ! L'update intervient en fait quand la personne atteint l'age de 60 ans, car alors il touche un capital retraite et le champ "datefirstamount" et "nature" doit être updaté. Donc si qqun s'affilie à 59 ans, on insére une ligne avec ses caractéristique dans la table ASSOCIATE, et à 60 ans l'update se passe correctement. Mais si il rentre avant (50 ans par exemple). J'obtiens l'erreur ci-dessus !

    Je ne sais pas si je vous ai fourni assez de renseignements, mais si vous voulez des précisions n'hésitez pas à me les demander, et toute aide est la bienvenue !

    D'avance merci à tous,

    Bonne journée

    Christophe

  2. #2
    Membre expérimenté
    Inscrit en
    Novembre 2006
    Messages
    337
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 337
    Par défaut
    Ben si tu pouvais mettre la structure de ta table, et expliquer un peu ton code ca pourrait etre cool merci

  3. #3
    Membre habitué
    Inscrit en
    Février 2008
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 11
    Par défaut
    Alors, le data set est composé de 10 data table:

    AFFILIATION
    ASS_BENEFIT
    ASS_COTISATION
    ASS_PERIODE
    ASS_RESERVE
    ASSOCIATE
    ED_COTISATION
    ED_RESERVE
    HOMEEDITION
    SUMMARY

    Chaquée année, on reçoit un seul fichier Excel de mise à jour. Chaque ligne représente une personne ou une maison d'édition (ED). Les infos sur ces personnes sont updatées dans ces 10 tables, ou simplement insérées si elles sont nouvelles. La table ASS_COTISATION par exemple, reprend les cotisations historiques de tous les affiliés. A la mise à jour, pour chaque affilié, une ligne est insérée avec la nouvelle année (2008) et la nouvelle cotisation (chaque associé est associé à une clé: CodeSabam).
    La table ASS_RESERVE est la somme aggrégée de ces cotisations, pour chaque année (elle se met à jour automatiquement via un trigger)
    La table ASS_BENEFIT représente les paiements effectués pour les affiliés (à partir de 60 ans minimum).
    La table ASS_PERIODE indique la date d'entrée et de sortie (si il y a) pour chaque affilié.
    Les tables ED_COTISATION, ED_RESERVE et AFFILIATION sont les mêmes que les 3 précédentes mais ne traitent pas les affiliés mais les maisons d'éditions.
    La table ASSOCIATE (celle qui nous intéresse ici) reprend toutes des données d'ordre général pour chacun, comme la date de naissance, le nom, la date de premier paiement, la date de report du premier paiement, la nature du paiement (capital ou rente), etc...

    Cela t'aide-t-il ? Souhaites-tu plus d'information ?

    Merci pour ton aide,

    Christophe

  4. #4
    Membre habitué
    Inscrit en
    Février 2008
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 11
    Par défaut
    Je peux rajouter que je ne pense pas que ce soit un problème de syntaxe, car parfois elle veut bien tourner (quand une personne est rentrée l'année d'avant), mais aussi car quand je l'exécute dans SQL serveur, elle marche !

  5. #5
    Membre expérimenté
    Inscrit en
    Novembre 2006
    Messages
    337
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 337
    Par défaut
    met ta requete dans une messagebox, et affiche chaque requete envoyées, tu as peut être un caractere qui n'est pas gérer dans ta base de données (un ' ou / ou " ou autre chose....)

    sinon le reste a l'air pas trop mal..

  6. #6
    Membre habitué
    Inscrit en
    Février 2008
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 11
    Par défaut
    Heu... merci mais comment fait-on cela ?

Discussions similaires

  1. Réponses: 13
    Dernier message: 11/01/2007, 15h39
  2. Calcul BD mais dans Requete SQL
    Par forzaxelah dans le forum Bases de données
    Réponses: 5
    Dernier message: 13/05/2006, 20h35
  3. [SQL] Problème d'addition dans requete SQL
    Par cheers94wow dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 10/05/2006, 15h05
  4. erreur dans requete Sql
    Par flOZ dans le forum Requêtes
    Réponses: 2
    Dernier message: 02/05/2006, 02h49
  5. Passage de parametres URL dans requete SQL
    Par Fenryl dans le forum ASP
    Réponses: 4
    Dernier message: 14/12/2005, 13h37

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo