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

IHM Discussion :

Pb Largeur Colonne - Module de recherche dvp par Loufab


Sujet :

IHM

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Février 2005
    Messages
    212
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Février 2005
    Messages : 212
    Points : 97
    Points
    97
    Par défaut Pb Largeur Colonne - Module de recherche dvp par Loufab
    Bonjour,

    Je devrais peut etre m'adresser directement à loufab mais je pense que le problème peut certainement aider d'autres developpeurs.

    J'utilise le module developper par loufab qui concerne le moteur de recherche sous access. J'en profite pour le remercier pour ce travail remarquable.

    Mais je pense avoir détecter un bug et je ne vois pas tellement comment je pourrais le résoudre.

    Ce bug se produit lorsque je séléctionne plusieurs champs (afin de les faire afficher).
    Il me semble qu'il n'arrive pas à allouer dynamiquement la largeur des colonnes.

    Le message d'erreur est le suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Run time error '2145'
    The ColumnWidths property setting must be a value from 0 through 22 inches (55.87cm) for each column in a list box or a combo box.
    Le code bug sur la ligne suivante dans le l'évenement Private Sub cmd_Recherche_Click().

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Me.lst_resultat.ColumnWidths = strLenCol    ' Affecte Largeur de colonne dynamique
    Merci de votre aide.

  2. #2
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 064
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 064
    Points : 24 673
    Points
    24 673
    Par défaut
    Bonjour,

    Je viens de regarder le code et fait de nombreux tests, je n'arrive pas à reproduire ce problème.


    Peux-tu poster ?
    le code du bouton Recherche
    le contenu de la variable strLencol

    Ce problème se produit avec toutes les tables ? Sinon peux-tu poster la structure de la table qui pose problème ?

    Cordialement,

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Février 2005
    Messages
    212
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Février 2005
    Messages : 212
    Points : 97
    Points
    97
    Par défaut
    Bonjour,

    Le problème se passe avec les deux tables que j'ai rajouté dans le système.

    Si je fait une recherche sans sélectionner de champs (à l'affichage) tout les champs s'affiche bien. Le problème survient lorsque je surligne (en maintenant la touche ctrl) plusieurs champs pour leurs affichage.

    La valeur de strLenCol="0.84cm; cm; cm; cm"

    détail de la table :
    ID (auto)
    NOM (texte)
    DESIGNATION (texte)
    ENVIRONNEMENT (texte)
    NB_CHAMPS (texte)
    SYSTEME (texte)
    KEYWORD01 (texte)
    KEYWORD02 (texte)
    KEYWORD03 (texte)
    KEYWORD04 (texte)
    KEYWORD05 (texte)

    --> Je viens de comprendre l'erreur. !!!!!!!

    L'erreur se produit lorsque tu demande de lui faire afficher un champ qui est vide. Il me semble qu'un controle peut etre rajouter.

    Soit j'oblige la saisie dans la table, soit on rajoute un controle de type
    Isnull, ou encore une met une valeur par defaut lorsque ce vide.

    En ce qui concerne mon code sur l'evenment recherche le voici. Mais il s'agit bien de la dernière version. j'ai verifié si les modifs que tu avais émises étaient bien dedans.

    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
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
     
    Private Sub cmd_Recherche_Click()
        Dim strTable As String, strField As String, strCriteria As String, strSql As String
        Dim Criter As Variant
        Dim intTypChamp As Integer
        Dim intOpeChamp As Integer
     
     
        If IsNull(Me.cbo_table) Or IsNull(Me.cbo_champ) Then
            MsgBox "Vous devez renseigner la table et le champ pour effectuer une recherche !", vbExclamation + vbOKOnly, "Recherche"
            Exit Sub
        End If
     
        strTable = "[" & Me.cbo_table & "]"        ' recupère le nom de la table
        strField = "[" & Me.cbo_champ & "]"         ' recupère le nom du champ
     
        ' compose le critere de recherche
     
        intTypChamp = lf_GetTypeField(strTable, strField)  ' pour trouver le type du champs ...
        intOpeChamp = Me.opt_recherche
     
        Select Case intTypChamp
     
        Case dbBoolean                       ' bool
            Select Case intOpeChamp
            Case 1   ' oui
                strCriteria = strTable & "." & strField & "=-1"
            Case 2   ' non
                strCriteria = strTable & "." & strField & "=0"
            Case 3
                strCriteria = "ISNULL(" & strTable & "." & strField & ")"
            Case 4
                strCriteria = "NOT ISNULL(" & strTable & "." & strField & ")"
            End Select
     
        Case dbByte To dbBinary, dbLongBinary, dbBigInt To dbVarBinary, dbNumeric To dbTimeStamp                  ' traite les numeriques
            If Not IsNull(Me.txt_critere) Then   ' si le null n'est pas la valeur à traiter
                strCriteria = Me.txt_critere
                ' traite la virgule si elle existe
                If InStr(1, Me.txt_critere, ",") > 0 Then strCriteria = Replace(Me.txt_critere, ",", ".", 1)
                ' pour les versions antérieure à la 2000
                'If InStr(1, Me.txt_critere, ",") > 0 Then strCriteria = Left(Me.txt_critere, InStr(1, Me.txt_critere, ",") - 1) & "." & Right(Me.txt_critere, InStr(1, Me.txt_critere, ","))
     
                If intTypChamp = dbDate And IsDate(Me.txt_critere) Then strCriteria = "#" & Me.txt_critere & "#"                   ' type champ = date
                ' rajoute les dièses
            End If
     
            Select Case intOpeChamp                    ' numerique, date
            Case 1    ' =
                If IsNull(Me.txt_critere) Then
                    strCriteria = "ISNULL(" & strTable & "." & strField & ")"
                Else
                    strCriteria = strTable & "." & strField & "=" & strCriteria
                End If
            Case 2    ' >=
                strCriteria = strTable & "." & strField & ">=" & strCriteria
     
            Case 3    ' <=
                strCriteria = strTable & "." & strField & "<=" & strCriteria
     
            Case 4    '<>
                If IsNull(Me.txt_critere) Then
                    strCriteria = "NOT ISNULL(" & strTable & "." & strField & ")"
                Else
                    strCriteria = strTable & "." & strField & "<>" & strCriteria
                End If
            End Select
     
        Case dbText, dbMemo, dbChar                      ' texte
            Select Case intOpeChamp
            Case 1    ' strictement egal
                If IsNull(Me.txt_critere) Then
                    strCriteria = "ISNULL(" & strTable & "." & strField & ")"
                Else
                    strCriteria = strTable & "." & strField & " Like """ & Me.txt_critere & """"
                End If
            Case 2    ' commence par
                strCriteria = strTable & "." & strField & " Like """ & Me.txt_critere & "*"""
            Case 3    ' contient
                strCriteria = strTable & "." & strField & " Like ""*" & Me.txt_critere & "*"""
            Case 4    ' fini par
                strCriteria = strTable & "." & strField & " Like ""*" & Me.txt_critere & """"
            Case 5    ' ne contient pas
                If IsNull(Me.txt_critere) Then
                    strCriteria = "NOT ISNULL(" & strTable & "." & strField & ")"
                Else
                    strCriteria = "NOT " & strTable & "." & strField & " Like """ & Me.txt_critere & """"
                End If
            End Select
     
        Case Else
            MsgBox "Cas non prévu."
            Exit Sub
        End Select
     
        ' debut de selection des champs
        Dim strChamps As String
        Dim entCurrLigne As Integer
        Dim strLenCol As String
        For entCurrLigne = 0 To Me.lst_champs.ListCount - 1
            If Me.lst_champs.Selected(entCurrLigne) Then
                strChamps = strChamps & "[" & Me.lst_champs.Column(0, entCurrLigne) & "], "
                ' Largeur de colonne dynamique
                If Not strLenCol = "" Then strLenCol = strLenCol & "; "
                strLenCol = strLenCol & Round((DMax(Eval("""len([" & Me.lst_champs.Column(0, entCurrLigne) & "])"""), strTable, strCriteria) * 160) / 571, 2) & " cm"
                ' Largeur de colonne dynamique
            End If
        Next entCurrLigne
     
        Me.lst_resultat.ColumnWidths = strLenCol    ' Affecte Largeur de colonne dynamique
     
        If Len(strChamps) = 0 Then
            strChamps = strTable & ".*"
        Else
            strChamps = Left(strChamps, Len(strChamps) - 2)
        End If
        ' fin de selection des champs
     
     
        ' construit la requête sql
        If Me.Opt_rechcourante And Not Len(Me.lst_resultat.RowSource) = 0 Then
            ' ancienne ligne
            'If Not Me.lst_resultat.RowSource Like "*FROM " & strTable & "*" Then
            ' remplacé par
            Dim ctrl_table As String
            ctrl_table = Left(strTable, Len(strTable) - 1)
            ctrl_table = Right(ctrl_table, Len(ctrl_table) - 1)
            If Not Me.lst_resultat.RowSource Like "*FROM [[]" & ctrl_table & "*" Then
     
                MsgBox "La recherche précédente ne porte pas sur la même table que la recherche actuelle.", vbExclamation + vbOKOnly, "Erreur"
                Exit Sub
            End If
            strSql = Left(Me.lst_resultat.RowSource, Len(Me.lst_resultat.RowSource) - 3)
            strSql = strSql & " " & Me.cbo_operateur & " " & strCriteria & "));"
        Else
            ' construit la rq sql
            strSql = "SELECT DISTINCTROW " & strChamps
            strSql = strSql + " FROM " & strTable
            strSql = strSql + " WHERE ((" & strCriteria & "));"
        End If
     
        Me.lst_resultat.RowSource = strSql  ' affecte sql a lst_Resultat
        Me.lst_resultat.Requery             ' recalcule la liste
        Me.txt_chaineSQL.Value = strSql     ' affiche le code
        Me.lbl_nbRecord.Caption = IIf(Me.lst_resultat.ListCount <= 1, 0, Me.lst_resultat.ListCount - 1) & "/" & DCount(Me.cbo_champ, Me.cbo_table)
     
    End Sub
    Merci pour ton aide.

  4. #4
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 064
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 064
    Points : 24 673
    Points
    24 673
    Par défaut
    Bonjour,

    Ce traitement existe, mais il est absent dans ton code.

    Regarde la ligne de composition des largeurs, il manque la fonction NZ().

    Sans cette fonction les valeurs null renvoyées ne sont pas transformées en 0, d'ou l'erreur.

    Cordialement,

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Février 2005
    Messages
    212
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Février 2005
    Messages : 212
    Points : 97
    Points
    97
    Par défaut
    Ok parfait et merci pour ton aide.

    Félicitation pour l'appli.


    Bonne continuation.

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

Discussions similaires

  1. [WD17] Figer largeur colonne par programmation
    Par jimmypage dans le forum WinDev
    Réponses: 2
    Dernier message: 22/02/2013, 15h38
  2. Réponses: 13
    Dernier message: 22/06/2010, 16h08
  3. Recherche Min par rapport à une colonne - awk
    Par samiy dans le forum Linux
    Réponses: 5
    Dernier message: 06/02/2008, 12h13
  4. largeur colonne excel après export
    Par scully2501 dans le forum Access
    Réponses: 6
    Dernier message: 18/06/2005, 10h52
  5. [C#] [WinForms] Définir largeur colonne DataGrid
    Par djsbens dans le forum Windows Forms
    Réponses: 14
    Dernier message: 04/04/2005, 10h14

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