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 6 et antérieur Discussion :

Dépassement de capacité


Sujet :

VB 6 et antérieur

  1. #21
    Expert éminent
    Avatar de ThierryAIM
    Homme Profil pro
    Inscrit en
    Septembre 2002
    Messages
    3 673
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2002
    Messages : 3 673
    Points : 8 524
    Points
    8 524
    Par défaut
    On va jouer aux devinettes encore longtemps ??
    Citation Envoyé par _ChToM_
    Et j'ai encore plus marrant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
         Do While idx < size_tmp And return_value = False
            idx = idx + 1
        Loop
    Quand je fais ceci, ca me pete une erreur "Expression trop complexe" sur cette ligne la :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        ProgressBar1.value = val
    qui n'ont déjà pas de rapport, vu ce que tu nous mets comme code puis tu nous sors :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Public Sub MajProgressBar(ByVal new_val As Integer)
        ProgressBar1.value = new_val
    End Sub
    on va pas t'arracher les lignes de code une par une !!!
    Vous vous posez une question, la réponse est peut-être ici :
    Toutes les FAQs VB
    Les Cours et Tutoriels VB6/VBScript
    Les Sources VB6


    Je ne réponds pas aux questions techniques par MP. Utilisez les forums. Merci de votre compréhension

  2. #22
    Nouveau membre du Club Avatar de _ChToM_
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    111
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 111
    Points : 27
    Points
    27
    Par défaut
    Vais pas te mettre toutes mes lignes de code dans le forum.

    Le problème est "simple". Je fais ma boucle :
    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
    Private Function search_stat(ByVal idx_dest As Integer, ByVal COD_STAT As Integer) As Boolean
    'On Error GoTo err_search_stat
        'Déclaration des variables
        Dim return_value As Boolean
        Dim idx As Integer
        Dim size_tmp As Integer
     
        return_value = False
        idx = 1
        size_tmp = tab_destinataire(idx_dest).size_tab_stat_get
     
        Do While idx < size_tmp And return_value = False
            idx = idx + 1
        Loop
        search_stat = return_value
    End Function
    Il me fait 851 tour de boucles pour parcourir mes enregistrements (avant c'était 618, mais la c'est 851), puis je sais pas pourquoi à ce tour là, il continue le programme en sortant bien de ma fonction ci-dessus, continue le traitement, et au moment où je veux mettre à jour ma barre de progression, il me péte une erreur "Expression trop complexe".

    Si je l'enléve (la MAJ), ca passe nickel.

    Je sais pas où se situe le probleme, puisque j'appelle la fonction suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Public Sub MajProgressBar(ByVal new_val As Integer)
        ProgressBar1.value = new_val
    End Sub
    comme ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    EcrMain.MajProgressBar i
    avec i = 851

    Pourquoi les 850 première fois ca a marché, et pas à la 851eme je sais pas.

    Attends, ca c'est dans le cas ou je ne fais qu'un simple tour de boucle dans ma fonction search_stat

    Now, si j'essaie de faire comme au début, c'est à dire :
    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
    Private Function search_stat(ByVal idx_dest As Integer, ByVal COD_STAT As Integer) As Boolean
        Dim return_value As Boolean
        Dim idx As Integer
        Dim size_tmp As Integer
        Dim code_tmp As Integer
        Dim cod_err_tmp As Integer
        Dim cod_fct_tmp As Integer
        Dim cod_err_tmp2 As Integer
        Dim cod_fct_tmp2 As Integer
        
        return_value = False
        idx = 1
        size_tmp = tab_destinataire(idx_dest).size_tab_stat_get
       
        Do While idx < size_tmp And return_value = False
            code_tmp = tab_destinataire(idx_dest).get_value_tab(idx).code_get
            cod_err_tmp = tab_destinataire(idx_dest).get_value_tab(idx).cod_err_get
            cod_fct_tmp = tab_destinataire(idx_dest).get_value_tab(idx).cod_fct_get
            Debug.Print ModTraitErr.tab_info(2)
            Debug.Print val(ModTraitErr.tab_info(2))
            cod_err_tmp2 = val(ModTraitErr.tab_info(15))
            cod_fct_tmp2 = val(ModTraitErr.tab_info(2))
            If code_tmp = COD_STAT And cod_err_tmp = cod_err_tmp2 And cod_fct_tmp = cod_fct_tmp2 Then
                return_value = True
            Else
                idx = idx + 1
            End If
        Loop
        
        search_stat = return_value
        Exit Function
    (en bleu, c'est là ou ca pete)

    ce coup ci, il m'affiche une erreur "Dépassement de capacité" (à l'enregistrement 851 encore et toujours), au moment où j'essaie de faire ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Debug.Print val(ModTraitErr.tab_info(2))
    alors que après contrôle, je suis certain qu'il y a bien soit un 7, soit un 6 dans tab_info(2).

    Je ne sais pas ce qu'il me fait, suis totalement pommé dans son comportement.

    Si j'essaie de passer en mode Debug en mettant des points d'arrêt à la ligne 851, il ne me pete aucune erreur...

    Quelles lignes tu veux en plus???
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Debug.print ModTraitErr.tab_info(2)
    m'affiche 6
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Debug.print val(ModTraitErr.tab_info(2))
    devrait m'afficher 6 également. Mais il pete à ce moment là...

    Pourquoi au moment de l'affectation ca pete, je sais pas.

  3. #23
    Nouveau membre du Club Avatar de _ChToM_
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    111
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 111
    Points : 27
    Points
    27
    Par défaut
    Est-il possible que le programme est besoin de s'interrompre, même quelques instants, pour se "remettre les idées en place".

    Je m'explique.

    Pourquoi lorsque le programme tourne en continu, il m'affiche une erreur au bout d'un certain moment, alors que si je mets un point d'arrêt régulier dans l'éxécution du programme, celui ci ne me sort aucune erreur?

    Qu'est ce qu'il fait au moment ou il se met en pause?

    Y'a besoin de flusher quelque chose? Ou de lui dire de réinitialiser sa mémoire?

  4. #24
    Membre éclairé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    730
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 730
    Points : 876
    Points
    876
    Par défaut
    Et ton composant ProgressBar ? Comment est-il initialisé ? C'est bien beau de l'incrémenter mais si tu n'a pas une valeur de début et de fin, comment veux-tu qu'il estime une progression visuelle (ratio entre la valeur atteinte sur l'instant et la valeur max du traitement) ?

    ProgressBar.Min et .Max sont implémentés ?

  5. #25
    Nouveau membre du Club Avatar de _ChToM_
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    111
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 111
    Points : 27
    Points
    27
    Par défaut
    Ouaip, désolé de pas l'avoir précisé, mais au lancement du programme, j'appelle la procédure suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Public Sub ConfigProgressBar(ByVal max As Integer)
        ProgressBar1.Min = 0
        ProgressBar1.max = max
    End Sub
    de la manière suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    EcrMain.ConfigProgressBar rs_tram_err.RecordCount
    EcrMain étant ma fenêtre principale, et rs_tram_err étant un recordset comportant tous les enregistrements que je dois traiter.

    Mais la ProgressBar marche très bien, mais je sais pas pourquoi il m'affiche une erreur la dessus.

  6. #26
    Expert éminent
    Avatar de ThierryAIM
    Homme Profil pro
    Inscrit en
    Septembre 2002
    Messages
    3 673
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2002
    Messages : 3 673
    Points : 8 524
    Points
    8 524
    Par défaut
    j'ai pas tout détaillé mais essaie de coller un DoEvents dans ta boucle pour voir ?
    Vous vous posez une question, la réponse est peut-être ici :
    Toutes les FAQs VB
    Les Cours et Tutoriels VB6/VBScript
    Les Sources VB6


    Je ne réponds pas aux questions techniques par MP. Utilisez les forums. Merci de votre compréhension

  7. #27
    Nouveau membre du Club Avatar de _ChToM_
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    111
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 111
    Points : 27
    Points
    27
    Par défaut
    Le DoEvents n'a pas pour simple but d'intercepter les événements de l'utilisateur? Même si je lance le traitement en fond sans appeler la fenêtre, l'erreur se produit quand même.

    Je testerai demain car la je suis plus au taf. Je vous tiendrai au courant.

    Merci et bonne soirée.

  8. #28
    Membre expert
    Avatar de Delbeke
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    2 675
    Détails du profil
    Informations personnelles :
    Âge : 70
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 2 675
    Points : 3 696
    Points
    3 696
    Par défaut
    Je ne sais pas comment ca se passe en ADO , mais en DAO .RecordCount ne renvoie la bonne valeur que si, et seulement si on a fait un movelast avant.
    En général, on ne demande de conseils que pour ne pas les suivre ou, si on les a suivis, reprocher à quelqu'un de les avoir donnés
    (ALEXANDRE DUMAS)

    N'hésitez pas à visiter ma page de contributions

  9. #29
    Nouveau membre du Club Avatar de _ChToM_
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    111
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 111
    Points : 27
    Points
    27
    Par défaut
    Pas probleme en ADO pour moi. RecordCount contient bien la valeur attendue (après vérification dans la base MySQL)

  10. #30
    Nouveau membre du Club Avatar de _ChToM_
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    111
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 111
    Points : 27
    Points
    27
    Par défaut
    Le DoEvents ne change rien.

    D'apres ce que j'ai pu lire sur le DoEvents, il est à mettre dans une boucle qui fait un grand nombre de tour.

    Je l'ai mis dans ma grande boucle (celle qui parcourt mes 5000 enregistrements) mais ca ne change rien.

    J'ai également essayé de le mettre dans la boucle du search_stat, mais ca ne change rien non plus.

    Et aujourd'hui le problème n'est plus au 851... mais au 852...

  11. #31
    Nouveau membre du Club Avatar de _ChToM_
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    111
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 111
    Points : 27
    Points
    27
    Par défaut
    Est-il possible que l'endroit où il m'affiche l'erreur de capacité ne soit en fait pas la cause du problème.

    Je sais qu'en C sous Emacs, lorsque l'on debuggé un programme, il peut arriver qu'il signale une erreur qui n'en est pas une...?

  12. #32
    Nouveau membre du Club Avatar de _ChToM_
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    111
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 111
    Points : 27
    Points
    27
    Par défaut
    Bon j'ai "réussi" à contourner le problème en interceptant l'erreur et l'ignorant, plus de message d'erreur.

    En mettant un resume à la fin du traitement de mon erreur, le processus redémarre sans me remettre d'erreur...


    Je sais, c'est très moche mais j'ai pas mieux pour l'instant.

    J'ai essayé en installant le SP6 de VB mais rien n'a changé.

  13. #33
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 038
    Points
    20 038
    Par défaut
    ..? "entoure" ton 6 histoire de voir s'il n'y as pas quelque chose que tu ne vois pas..?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    
    Debug.Print "<" & ModTraitErr.tab_info(2) & ">"
    Debug.Print val(ModTraitErr.tab_info(2))
    ce qui ressemble un peu à ton code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Debug.Print "NOUVEAU!"
        Do While idx < size_tmp And return_value = False
            Debug.Print "$" & val(ModTraitErr.tab_info(2)) & "$"
            idx = idx + 1
        Loop
        Debug.Print "FIN!"
    mais évite de "filtrer" le résultat par la fonction Val

  14. #34
    Nouveau membre du Club Avatar de _ChToM_
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    111
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 111
    Points : 27
    Points
    27
    Par défaut
    <1>
    <1>
    <1>
    <1>
    <1>
    <1>
    <1>
    <1>
    <1>
    <1>




    Je l'avais déjà fait ce test mais rien devant ni derrière...

  15. #35
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 038
    Points
    20 038
    Par défaut
    ? c'est pas des 6...? et il n'y as qu'une ligne... ? tu n'as pas mis la ligne avec le val qui te provoque l'erreur..?

  16. #36
    Nouveau membre du Club Avatar de _ChToM_
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    111
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 111
    Points : 27
    Points
    27
    Par défaut
    Heu ben ca dépend de l'enregistrement que je suis en train de traiter.

    Sinon, ca peut être des 6. Tant que c'est un integer, c'est bon.

    Ceci :

    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
     
    Private Function search_stat(ByVal idx_dest As Integer, ByVal COD_STAT As Integer) As Boolean
    ...
        Debug.Print "Avant"
        Do While idx < size_tmp And return_value = False
            DoEvents
            Debug.Print "  <" & ModTraitErr.tab_info(15) & ">"
            Debug.Print " <<" & val(ModTraitErr.tab_info(15)) & ">>"
            Debug.Print "<<<" & CInt(val(ModTraitErr.tab_info(15))) & ">>>"
            code_tmp = tab_destinataire(idx_dest).get_value_tab(idx).code_get
            cod_err_tmp = tab_destinataire(idx_dest).get_value_tab(idx).cod_err_get
            cod_fct_tmp = tab_destinataire(idx_dest).get_value_tab(idx).cod_fct_get
            cod_err_tmp2 = CInt(val(ModTraitErr.tab_info(15)))
            cod_fct_tmp2 = CInt(val(ModTraitErr.tab_info(2)))
            If code_tmp = COD_STAT And cod_err_tmp = cod_err_tmp2 And cod_fct_tmp = cod_fct_tmp2 Then
                return_value = True
            Else
                idx = idx + 1
            End If
        Loop
        Debug.Print "Apres"
     
    ...
    (De plus s'il détecte une erreur, je lui demande de m'afficher "ERREUR!!!!!!!!!!!!!!!!!!!!!!!!!!")

    me donne :
    ...
    Avant
    <7>
    <<7>>
    <<<7>>>
    <7>
    <<7>>
    <<<7>>>
    Apres
    Avant
    <7>
    ERREUR!!!!!!!!!!!!!!!!!!!!!!!!!!
    Avant
    <7>
    <<7>>
    <<<7>>>
    <7>
    <<7>>
    <<<7>>>
    Apres
    Avant
    <7>
    <<7>>
    <<<7>>>
    <7>
    <<7>>
    <<<7>>>
    Apres

  17. #37
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 038
    Points
    20 038
    Par défaut
    ok ok ......
    alors peu être du coté de ton tableau de chaine..? déclaration.?...

  18. #38
    Nouveau membre du Club Avatar de _ChToM_
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    111
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 111
    Points : 27
    Points
    27
    Par défaut
    Voici la déclaration du tableau tab_info : Public tab_info(17) As String

    Je ne le redimensionne jamais pendant le traitement, et il contient que des String

  19. #39
    Nouveau membre du Club Avatar de _ChToM_
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    111
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 111
    Points : 27
    Points
    27
    Par défaut
    Je le remplis de la manière suivante (appel de la procédure stock_info) :

    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
     
    Public Sub stock_info()
    On Error GoTo internal_error
        'Sauvegarde des informations sur l'enregistrement en cours
        tab_info(1) = CStr(rs_tram_err("LIB_SERIE_CARTE"))
        tab_info(2) = CStr(rs_tram_err("COD_FCT"))
        tab_info(3) = CStr(rs_tram_err("COD_GRP"))
        tab_info(4) = CStr(rs_tram_err("NO_ZONE"))
        tab_info(5) = CStr(rs_tram_err("NO_LECTEUR"))
        tab_info(6) = CStr(rs_tram_err("DAT_OPER"))
        tab_info(7) = CStr(rs_tram_err("HEU_OPER"))
        tab_info(8) = CStr(rs_tram_err("NO_CARTE"))
        tab_info(9) = CStr(rs_tram_err("NO_CHRONO"))
        tab_info(10) = CStr(rs_tram_err("COD_STATUT"))
        tab_info(11) = CStr(rs_tram_err("COD_OPER"))
        tab_info(12) = CStr(rs_tram_err("CODE_TYP_OPER"))
        tab_info(13) = CStr(rs_tram_err("VAL_NBU_OPER"))
        tab_info(14) = CStr(rs_tram_err("VAL_NBU_PREC"))
        tab_info(15) = CStr(rs_tram_err("COD_ERREUR"))
        tab_info(16) = CStr(rs_tram_err("BL_INTEGR"))
        tab_info(17) = CStr(rs_tram_err("LIB_SIGNATURE"))
        Exit Sub
     
    internal_error:
        ModErreur.internal_error "stock_info"
    End Sub

Discussions similaires

  1. Réponses: 12
    Dernier message: 17/10/2014, 16h08
  2. Transaction, Dépassement de capacité
    Par SkYsO dans le forum MS SQL Server
    Réponses: 9
    Dernier message: 23/12/2008, 14h56
  3. Dépassement de capacité
    Par jean-pierre96 dans le forum Access
    Réponses: 2
    Dernier message: 10/05/2006, 16h04
  4. Réponses: 8
    Dernier message: 06/02/2006, 14h34
  5. détection de dépassement de capacité
    Par tut dans le forum C++
    Réponses: 10
    Dernier message: 01/12/2004, 22h11

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