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 :

L'operation arithmetique a provoqué un depassement de capacité


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Auditeur informatique
    Inscrit en
    Avril 2019
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Auditeur informatique

    Informations forums :
    Inscription : Avril 2019
    Messages : 21
    Par défaut L'operation arithmetique a provoqué un depassement de capacité
    Salut tout le monde
    Svp j'ai besoin d'aide pour resoudre ce probleme.
    J'essaye d'obtenir le dernier score enregistré dans le champs (CodeOuvrier) dans ma Table1 Access et apres je l'enregistre.
    Table1 : (Id) AutoNumber , (CodeOuvrier) de Type numerique - Reelle Double : Indexé Oui - Sans doublons, (FirstName) de Type Texte, (LastName) de Type Texte
    Le (codeOuvrier) se compose de 10 ou 11 ou 12 chiffres .. comme exemple (458796548991)
    La premiere fois avec le premier record je tape le premier CodeOuvrier de 12 chiffre manuellement dans TextBox1 et j'enregistre .. sans aucun probleme
    La Deuxieme fois avec le deuxieme recors lorsque je Click Button1 pour recuperer Last_Record .. j'aurai ce message d'erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    L'operation arithmetique a provoqué un depassement de capacité
    Nom : p_12176i4pl1.jpg
Affichages : 806
Taille : 87,5 Ko
    Voici mon code utilisé :
    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
    Imports System.Data
    Imports System.Data.OleDb
    Public Class Form1
        Public ConStr As String = "Provider=Microsoft.Ace.OLEDB.12.0;Data Source=|DataDirectory|\Database1.accdb "
        Public Con As New OleDbConnection(ConStr)
        Public Function Get_Last_Record(TableName, OrderByField) As Integer
            Get_Last_Record = 0
            Dim Str = "Select * From " & TableName & " Order By " & OrderByField
            Dim Adp = New OleDb.OleDbDataAdapter(Str, Con)
            Dim Ds As New DataSet
            Adp.Fill(Ds)
            Dim DT As DataTable
            DT = Ds.Tables(0)
            If DT.Rows.Count <> 0 Then
                Dim I = DT.Rows.Count - 1
                Get_Last_Record = Val(DT.Rows(I).Item(OrderByField))
            End If
        End Function
        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
            TextBox1.Text = Format(Get_Last_Record("Table1", "CodeOuvrier") + 1, "000000000000")
        End Sub
        Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
            Con.Open()
            Dim sqlQry As String = "Insert Into Table1 ([CodeOuvrier], [FirstName], [LastName]) Values (@CodeOuvrier, @FirstName, @LastName)"
            Using cmd As New OleDbCommand(sqlQry, Con)
                cmd.Parameters.AddWithValue("@CodeOuvrier", TextBox1.Text)
                cmd.Parameters.AddWithValue("@FirstName", TextBox2.Text)
                cmd.Parameters.AddWithValue("@LastName", TextBox3.Text)
                Dim SaveOk As Integer = cmd.ExecuteNonQuery()
                If SaveOk <> -1 Then
                    MsgBox("Record enregistré avec succes")
                End If
            End Using
        End Sub
    End Class
    Merci d'avnace pour l'aide
    LAIDAROS

  2. #2
    Membre Expert Avatar de Phil Rob
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2013
    Messages
    1 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 613
    Par défaut
    Bonsoir,

    Le code ouvrier constitue un nombre beaucoup trop grand pour être affecté à un Integer, il faut utiliser un Long.

    Public Function Get_Last_Record(TableName, OrderByField) As Long.

    Note que personnellement, si ce nombre ne participe pas à des opérations arithmétiques, je le gérerais sous forme chaine de caractères.

    Bonne soirée,

  3. #3
    Membre averti
    Homme Profil pro
    Auditeur informatique
    Inscrit en
    Avril 2019
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Auditeur informatique

    Informations forums :
    Inscription : Avril 2019
    Messages : 21
    Par défaut
    Merci beaucoup Phil Rob
    Oui ca fonctionne tres bien .. et c'est bien resolu mon probleme
    Svp .. J'ai une petite observation je veux bien après votre permission prendre ton avis ..
    Au niveau de ma Table1 .. j'ai mis le champs (CodeOuvrier) : Type numerique - Reelle Double : Indexé Oui - Sans doublons ..est ce que c'est bien juste ??
    Merci .. de mes profonds .. merci
    LAIDAROS

  4. #4
    Membre Expert Avatar de Phil Rob
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2013
    Messages
    1 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 613
    Par défaut
    Bonjour,

    Attention au type : tu me parles de Double (ce sont des réels) et je t'avais conseillé Long (ce sont des entiers longs). Même si cela fonctionne, un numéro d'ordre, ou un code, ne sera sans doute jamais un nombre réel.

    Dans la DB, le Long est un numérique (bien sûr...) et dans la propriété du champs, il est possible de choisir "Entier long".

    Pour la question de l'indexé sans doublon, je suppose que ce n'est pas nécessaire mais dépend de l'usage qui est fait de cette valeur et du contrôle que tu veux bien lui programmer toi-même ...
    Dans ce cas, cela présentera l'avantage de provoquer une erreur du SGBD si on veut créer un nouvel ouvrier avec un code déjà attribué.

    A toi de voir ...

    Bonne journée,

  5. #5
    Membre averti
    Homme Profil pro
    Auditeur informatique
    Inscrit en
    Avril 2019
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Auditeur informatique

    Informations forums :
    Inscription : Avril 2019
    Messages : 21
    Par défaut
    Bonjour Phil Rob
    Merci pour tous .. tres gentil de votre part
    Bien compris .. bien entendu
    LAIDAROS

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. provoquer depassement de capacite tableau en C
    Par naetoila dans le forum Débuter
    Réponses: 7
    Dernier message: 07/12/2011, 09h26
  2. operations arithmetiques (simples) sur float
    Par sohnic dans le forum Langage
    Réponses: 5
    Dernier message: 07/02/2011, 16h43
  3. afficher la partie decimale d'une operation arithmetique
    Par vamos dans le forum Shell et commandes GNU
    Réponses: 5
    Dernier message: 04/01/2010, 18h22
  4. [VB6] Hex(Double) - depassement de capacite
    Par SErhio dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 18/05/2005, 17h09
  5. depassement de capacité
    Par jpg dans le forum ASP
    Réponses: 2
    Dernier message: 19/08/2004, 18h26

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