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 :

select case avec if


Sujet :

VB 6 et antérieur

  1. #1
    Membre à l'essai
    Inscrit en
    Novembre 2008
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 38
    Points : 12
    Points
    12
    Par défaut select case avec if
    Bonjour, voilà j'ai encore un petit souci avec mon code. J'ai deux listes déroulantes et une msflexgrid.

    La liste déroulante 1 comporte tous les genres de mes films : cela permet de choisir un film selon son genre exemple: action, aventure, thriller ...
    La liste déroulante 2 comporte les 26 lettres de l'alphabet : cela permet de chercher tous les films commençant par la lettre sélectionnée exemple tous les films commençant par a (angel-A...) ...

    Mon souci est que je voudrais donner la possibilité à l'utilisateur de rechercher le film en fonction soit du genre soit par l'ordre alphabétique. Pour cela, je pensais faire un select case mais cela ne marche pas (enfin juste la liste genre mais la liste par ordre alphabétique non lorsque l'on choisit une lettre).

    Voici, le code que j'avais mis :
    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
    Dim choix As String
       Select Case choix
       Case Lst_DebutLettre
     
         'si le choix du titre du film est différent du mot "Tous"
         If Lst_DebutLettre <> "TOUS" Then
                'alors on affiche le résultat correspondant à la lettre choisie
                sql = sql + " WHERE FILMS_TITRE LIKE '" & Lst_DebutLettre.List(Lst_DebutLettre.ListIndex) & "%'"
         End If
         'trie le nom par ordre alphabétique lorsque le mot "TOUS" est sélectionné
          sql = sql + " ORDER BY FILMS_TITRE"
     
       Case Else
         'si le choix du genre est différent du mot TOUS
         If Lst_GenreFilm = "TOUS" Then
                    sql = "select FILMS_NUM, FILMS_TITRE, FILMS_ACTEUR, FILMS_DUREE, FILMS_SORTIEANNEE, FILMS_FORMAT, FILMS_GENRE, FILMS_REALISATEURS FROM FILMS "
         Else
                    sql = "select FILMS_NUM, FILMS_TITRE, FILMS_ACTEUR, FILMS_DUREE, FILMS_SORTIEANNEE, FILMS_FORMAT, FILMS_GENRE, FILMS_REALISATEURS "
                    sql = sql + " FROM FILMS , GENRES"
                    sql = sql + " where FILMS_GENRE =  GENRE_CODE"
                    sql = sql + " AND GENRE_LIBELLE ='" & FilmsGenre & "'"
         End If
     
       End Select
    en cherchant sur le net il parle plus de combobox avec le msflexgrid. Cela fait plusieurs jours que je cherche mais rien. A chaque fois il n'y a qu'une seule liste qui marche sur les deux mais jamais les deux en meme temps. Et est-ce-que le select case est une bonne idée ou pas du tout ?
    Pouvez-vous m'aider car je débute en programmation merci beaucoup

  2. #2
    Modérateur
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2004
    Messages
    6 067
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6 067
    Points : 17 157
    Points
    17 157
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
       Case Else
         'si le choix du genre est différent du mot TOUS
         If Lst_GenreFilm = "TOUS" Then
                    sql = "select FILMS_NUM, FILMS_TITRE, FILMS_ACTEUR, FILMS_DUREE, FILMS_SORTIEANNEE, FILMS_FORMAT, FILMS_GENRE, FILMS_REALISATEURS FROM FILMS "
         Else
                    sql = "select FILMS_NUM, FILMS_TITRE, FILMS_ACTEUR, FILMS_DUREE, FILMS_SORTIEANNEE, FILMS_FORMAT, FILMS_GENRE, FILMS_REALISATEURS "
    '**************************************************
                    sql = sql + " FROM FILMS , GENRES" '<=======  a mon avis ,(virgule) et GENRES sont en trop
    '**************************************************
                    sql = sql + " where FILMS_GENRE =  GENRE_CODE"
                    sql = sql + " AND GENRE_LIBELLE ='" & FilmsGenre & "'"
         End If
     
       End Select
    Soyez sympa, pensez -y
    Balises[CODE]...[/CODE]
    Balises[CODE=NomDuLangage]...[/CODE] quand vous mettez du code d'un autre langage que celui du forum ou vous postez.
    Balises[C]...[/C] code intégré dans une phrase.
    Balises[C=NomDuLangage]...[/C] code intégré dans une phrase quand vous mettez du code d'un autre langage que celui du forum ou vous postez.
    Le bouton en fin de discussion, quand vous avez obtenu l'aide attendue.
    ......... et pourquoi pas, pour remercier, un pour celui/ceux qui vous ont dépannés.
    👉 → → Ma page perso sur DVP ← ← 👈

  3. #3
    Membre à l'essai
    Inscrit en
    Novembre 2008
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 38
    Points : 12
    Points
    12
    Par défaut
    Oui, mais en faite j'ai une table film, une table genre et je croise les données.
    Dans la table film, le genre est alimenté (dans la bdd) par une liste déroulante donc c'est pour cela que j'ai mis le nom des deux tables

  4. #4
    Modérateur
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2004
    Messages
    6 067
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6 067
    Points : 17 157
    Points
    17 157
    Par défaut
    J'ai donc mal lu ton premier post
    Regarde cette discussion, tous les éléments pour résoudre ton problème y sont expliqués.
    Soyez sympa, pensez -y
    Balises[CODE]...[/CODE]
    Balises[CODE=NomDuLangage]...[/CODE] quand vous mettez du code d'un autre langage que celui du forum ou vous postez.
    Balises[C]...[/C] code intégré dans une phrase.
    Balises[C=NomDuLangage]...[/C] code intégré dans une phrase quand vous mettez du code d'un autre langage que celui du forum ou vous postez.
    Le bouton en fin de discussion, quand vous avez obtenu l'aide attendue.
    ......... et pourquoi pas, pour remercier, un pour celui/ceux qui vous ont dépannés.
    👉 → → Ma page perso sur DVP ← ← 👈

  5. #5
    Membre à l'essai
    Inscrit en
    Novembre 2008
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 38
    Points : 12
    Points
    12
    Par défaut
    Non ce n'est pas cela mon problème. Mes tables sont correctement reliées. Mon problème demeure juste dans ma requête select case et non dans la construction de mes tables.

    Ma liste genre et ma liste par ordre alphabétique s'affiche correctement il n'y a pas de problème c'est juste que je n'arrive pas à construire mon select case.

    Je veux donner la possibilité à l'utilisateur de choisir soit d'afficher les films par genre ou par ordre alphabétique. Pour le moment, mes deux listes déroulantes il n'y en a qu'une à chaque fois qui marche. Je bloque sur le select case car je ne vois pas d'autres solutions possibles.

    En gros, je voudrais cela :

    Pour afficher la guerre des roses

    -> l'afficher lorsque le genre est sélectionné comédie
    -> ou bien l'affiche lorsque l'utilisateur choisit la lettre 'L'

    Selon cas choix
    cas debutLettre
    on affiche le resultat lettre selectionné
    cas genreFilm
    on affiche le resultat genreFilm
    fin selon cas.

    J'ai essayé plusieurs combinaison pour mon selon cas mais rien à faire

  6. #6
    Modérateur
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2004
    Messages
    6 067
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6 067
    Points : 17 157
    Points
    17 157
    Par défaut
    Excuse moi, je comprend trés vite quand on m'explique longtemps

    Tout de suite
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim choix As String
       Select Case choix
    tu ne donnes aucune valeur a la variable, donc case else est systématique, je regarde la suite.
    A+
    Soyez sympa, pensez -y
    Balises[CODE]...[/CODE]
    Balises[CODE=NomDuLangage]...[/CODE] quand vous mettez du code d'un autre langage que celui du forum ou vous postez.
    Balises[C]...[/C] code intégré dans une phrase.
    Balises[C=NomDuLangage]...[/C] code intégré dans une phrase quand vous mettez du code d'un autre langage que celui du forum ou vous postez.
    Le bouton en fin de discussion, quand vous avez obtenu l'aide attendue.
    ......... et pourquoi pas, pour remercier, un pour celui/ceux qui vous ont dépannés.
    👉 → → Ma page perso sur DVP ← ← 👈

  7. #7
    Modérateur
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2004
    Messages
    6 067
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6 067
    Points : 17 157
    Points
    17 157
    Par défaut
    J'espere que cela repond à ta question.
    Sur un Form, 2 ListBox "Lst_GenreFilm" et "Lst_DebutLettre" et un CommandButon
    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
    Option Explicit
    Dim sql
     
    Private Sub Form_Load()
    Command1.Move 165, 90, 2325, 255: Command1.Caption = "Afficher"
    Lst_GenreFilm.Move 105, 420, 1215, 2205
    Lst_DebutLettre.Move 1320, 420, 1215, 2205
    Me.Height = 3225: Me.Width = 2895
    Dim T As Integer
    Lst_GenreFilm.Clear
    Lst_GenreFilm.AddItem "TOUS"
    Lst_GenreFilm.AddItem "Action"
    Lst_GenreFilm.AddItem "Aventure"
    Lst_GenreFilm.AddItem "Comédie"
    Lst_GenreFilm.AddItem "Thriller"
     
    Lst_DebutLettre.Clear
    Lst_DebutLettre.AddItem "TOUS"
    For T = 65 To 90
     Lst_DebutLettre.AddItem Chr(T)
    Next T
    End Sub
     
    Private Sub Command1_Click()
    ReqetSQL Lst_GenreFilm.List(Lst_GenreFilm.ListIndex), Lst_DebutLettre.List(Lst_DebutLettre.ListIndex)
    End Sub
    Public Sub ReqetSQL(Genre As String, Critere As String)
    sql = ""
    If Genre & Critere = "TOUSTOUS" Then
     sql = "Renvoyer tous les titres de tous les genres commencant par n'importe quelle lettre"
     Else
     If Genre = "TOUS" And Critere <> "TOUS" Then
      sql = "renvoyer tous les titres de tous les genres commencant par " & Critere
     End If
     If Genre <> "TOUS" And Critere = "TOUS" Then
      sql = "renvoyer tous les titres pour le genre " & Genre & " commencant par n'importe quelle lettre"
     End If
     If Genre <> "TOUS" And Critere <> "TOUS" Then
      sql = "renvoyer tous les titres pour le genre " & Genre & " commencant par " & Critere
     End If
    End If
    MsgBox sql
    End Sub
    Je n'ai pas essayé avec SELECT, les Ifs faisant l'affaire
    Soyez sympa, pensez -y
    Balises[CODE]...[/CODE]
    Balises[CODE=NomDuLangage]...[/CODE] quand vous mettez du code d'un autre langage que celui du forum ou vous postez.
    Balises[C]...[/C] code intégré dans une phrase.
    Balises[C=NomDuLangage]...[/C] code intégré dans une phrase quand vous mettez du code d'un autre langage que celui du forum ou vous postez.
    Le bouton en fin de discussion, quand vous avez obtenu l'aide attendue.
    ......... et pourquoi pas, pour remercier, un pour celui/ceux qui vous ont dépannés.
    👉 → → Ma page perso sur DVP ← ← 👈

  8. #8
    Membre à l'essai
    Inscrit en
    Novembre 2008
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 38
    Points : 12
    Points
    12
    Par défaut
    explication vb.doc

    nan désolé tu as fait du code pour rien car ce n'est pas cela mon pb

    voici mon code en entier et un fichier joint pour mieux comprendre :
    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
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    268
    269
    270
    271
    272
    273
    274
    275
    276
    277
    278
    279
    280
    281
    282
    283
    284
    285
    286
    287
    288
    289
    290
    291
    292
    293
    294
    295
    296
    297
    298
    299
    300
    301
    302
    303
    304
    305
    306
    307
    308
    309
    310
    311
    312
    313
    314
    315
    316
    317
    318
    319
    320
    321
    322
    323
    324
    325
    326
    327
    328
    329
    330
    331
    332
    333
    334
    335
    336
    337
    338
    339
    340
    341
    342
    343
    344
    345
    346
    347
    348
    349
    350
    351
    352
    353
    354
    355
    356
    357
    358
    359
    360
    361
    362
    363
    364
    365
    366
    367
    368
    369
    370
    371
    372
    373
    374
    375
    376
    377
    378
    379
    380
    381
    382
    383
    384
    385
    386
    387
    388
    389
    390
    391
    392
    393
    394
    395
    396
    397
    398
    399
    400
    401
    402
    403
    404
    405
    406
    407
    408
    409
    410
    411
    412
    413
    414
    415
    416
    417
    418
    419
    420
    421
    422
    423
    424
    425
    426
    427
    428
    429
    430
    431
    432
    433
    434
    435
    436
    437
    438
    439
    440
    441
    442
    443
    444
    445
    446
    447
    448
    449
    450
    451
    452
    453
    454
    455
    456
    457
    458
    459
    460
    461
    462
    463
    464
    465
    466
    467
    468
    469
    470
    471
    472
    473
    474
    475
    476
    477
    478
    479
    480
    481
    482
    483
    484
    485
    486
    487
    488
    489
    490
    491
    492
    493
    494
    495
    496
    497
    498
    499
    500
    501
    502
    503
    504
    505
    506
    507
    508
    509
    510
    511
    512
    513
    514
    515
    516
    517
    518
    519
    520
    521
    522
    523
    524
    525
    526
    527
    528
    529
    530
    531
    532
    533
    534
    535
    536
    537
    538
    539
    540
    541
    542
    543
    544
    545
    546
    547
    548
    549
    550
    551
    552
    553
    554
    555
    556
    557
    558
    559
    560
    561
    562
    563
    564
    565
    566
    567
    568
    569
    570
    571
    Option Explicit
    Dim FilmsGenre As String
    Dim DebutLettre As String
    Dim ref As Integer
     
    Private Sub init_boutons()
    ' debut
        Cmd_Ajouter.Enabled = False
        Cmd_Modifier.Enabled = False
        Cmd_Valider.Enabled = False
        Cmd_Supprimer.Enabled = False
        Cmd_Imprimer.Enabled = False
        Cmd_Annuler.Enabled = False
    End Sub
     
    Private Sub init_zones()
    ' debut
        Txt_FilmsNum.Text = ""
        Txt_TitreFilm.Text = ""
        Txt_Acteurs.Text = ""
        Txt_Année.Text = ""
        Txt_Format.Text = ""
        Txt_Duree.Text = ""
        Lst_Genre.Text = ""
        Lst_Realisateurs.Text = ""
        Lbl_affichage.Caption = ""
    End Sub
     
    Private Sub Cmd_annuler_click()
    ' debut
        init_zones
        Lst_GenreFilm.Text = FilmsGenre
        Lst_DebutLettre = DebutLettre
        desactiver
        Lbl_affichage.Caption = ""
     
    End Sub
     
    Private Sub Cmd_Fermer_Click()
       Unload Me
    End Sub
     
    Public Sub Liste_DebutLettre()
    Dim i As Integer
    ' début
        ' remplir la liste des films
         Lst_DebutLettre.Clear
         Lst_DebutLettre.AddItem "TOUS"
         For i = 65 To 90
            Lst_DebutLettre.AddItem Chr$(i)
         Next i
    End Sub
     
    Public Sub Liste_GenreFilm()
    ' début
        ' remplir la liste des genres
         Lst_GenreFilm.Clear
         sql = "select GENRE_LIBELLE FROM GENRES"
         rst_genre.Open sql, cnx
         Lst_GenreFilm.AddItem "TOUS"
         If Not rst_genre.EOF Then
              Do
                   Lst_GenreFilm.AddItem rst_genre.Fields("GENRE_LIBELLE")
                   rst_genre.MoveNext
              Loop Until rst_genre.EOF
         End If
        rst_genre.Close
    End Sub
     
    Public Sub liste_Genre()
    ' début
        ' remplir la liste des genres
         Lst_Genre.Clear
         sql = "select GENRE_LIBELLE FROM GENRES"
         rst_genre.Open sql, cnx
         If Not rst_genre.EOF Then
              Do
                   Lst_Genre.AddItem rst_genre.Fields("GENRE_LIBELLE")
                   rst_genre.MoveNext
              Loop Until rst_genre.EOF
         End If
        rst_genre.Close
    End Sub
     
    Public Sub liste_Realisateurs()
    'debut
        'remplir la liste des réalisateurs
        Lst_Realisateurs.Clear
        sql = "SELECT REALISATEURS_NOM FROM REALISATEURS"
        rst_realisateurs.Open sql, cnx
        If Not rst_realisateurs.EOF Then
            Do
                Lst_Realisateurs.AddItem rst_realisateurs.Fields("REALISATEURS_NOM")
                rst_realisateurs.MoveNext
            Loop Until rst_realisateurs.EOF
        End If
        rst_realisateurs.Close
    End Sub
     
    Private Sub Lst_GenreFilm_Click()
    'début
        init_zones
        MSF_Film.Enabled = True
        FilmsGenre = Lst_GenreFilm.Text
        Lst_Genre.Text = FilmsGenre
     
        'alimentation de la grille films
        grille
        Cmd_Ajouter.Enabled = True
    End Sub
     
    Private Sub Lst_DebutLettre_click()
    'debut
        init_zones
        MSF_Film.Enabled = True
        DebutLettre = Lst_DebutLettre
        'alimentation de la grille films
        sql = "SELECT FILMS_TITRE, FILMS_ACTEUR, FILMS_DUREE, FILMS_SORTIEANNEE, FILMS_FORMAT, FILMS_GENRE, FILMS_REALISATEURS FROM FILMS"
        sql = sql + "WHERE FILMS_TITRE LIKE '" & Lst_DebutLettre.List(Lst_DebutLettre.ListIndex) & "%';"
     
        grille
    End Sub
     
    Private Sub entete_grille()
    ' debut
            'entête de la grille personnel
            MSF_Film.Clear
            MSF_Film.Rows = 2 'nb de lignes
            MSF_Film.Cols = 9 'nb de colonnes
            MSF_Film.Row = 0
            MSF_Film.Col = 0
            MSF_Film.Text = "Numéro"
            MSF_Film.Col = 1
            MSF_Film.Text = "Titre"
            MSF_Film.Col = 2
            MSF_Film.Text = "Acteurs"
            MSF_Film.Col = 3
            MSF_Film.Text = "Genre"
            MSF_Film.Col = 4
            MSF_Film.Text = "Année"
            MSF_Film.Col = 5
            MSF_Film.Text = "Durée"
            MSF_Film.Col = 6
            MSF_Film.Text = "Réalisateurs"
            MSF_Film.Col = 7
            MSF_Film.Text = "Format"
            MSF_Film.ColWidth(0) = 650
            'colwidth définit la largeur de la colonne spécifiée
             MSF_Film.ColWidth(1) = 3000
            MSF_Film.ColWidth(2) = 3000
            MSF_Film.ColWidth(3) = 800
            MSF_Film.ColWidth(4) = 800
            MSF_Film.ColWidth(5) = 800
            MSF_Film.ColWidth(6) = 900
            MSF_Film.ColWidth(7) = 3000
     End Sub
     
    Private Sub Cmd_ajouter_click()
    Dim modif As Integer
    ' DEBUT
        modif = 0 'initialisation
        init_zones
        init_boutons
        activer
     
        ' rechercher le numéro du film
        sql = "select max(FILMS_NUM) as Nb From FILMS"
        rst_films.Open sql, cnx
        If rst_films.EOF Then
            Txt_FilmsNum.Text = 1
        Else
            Txt_FilmsNum.Text = (Val(rst_films.Fields("nb")) + 1)
        End If
        rst_films.Close
     
        Frame_Films.Enabled = True
     
        Cmd_Valider.Enabled = True
        Cmd_Annuler.Enabled = True
     
        Lbl_affichage.Caption = "Saisir TOUS les informations puis valider"
     
    End Sub
     
    Private Sub desactiver() 'permet de desactiver les champs textes
    ' debut
        Txt_TitreFilm.Enabled = False
        Txt_Acteurs.Enabled = False
        Txt_Année.Enabled = False
        Txt_Duree.Enabled = False
        Txt_Format.Enabled = False
        Lst_Genre.Enabled = False
        Lst_Realisateurs.Enabled = False
     
    End Sub
     
    Private Sub activer() 'permet d'activer les champs textes
    ' debut
        Frame_Films.Enabled = True
        Txt_TitreFilm.Enabled = True
        Txt_Acteurs.Enabled = True
        Txt_Année.Enabled = True
        Txt_Duree.Enabled = True
        Txt_Format.Enabled = True
        Lst_Genre.Enabled = True
        Lst_Realisateurs.Enabled = True
     
    End Sub
     
    Private Sub Cmd_effacer_Click()
    ' debut
        Call Liste_GenreFilm
        Call liste_Genre
        Call Liste_DebutLettre
        'fonction
        grille
     
        Lbl_affichage = ""
        init_boutons
        init_zones
        MSF_Film.Enabled = True
        entete_grille
     
    End Sub
     
    Private Sub Cmd_Valider_Click()
    Dim codeGenre As Integer
    Dim codeRealisateur As Integer
     
    'début
         ' il faut vérifier les différentes informations saisies
         msg = " voulez vous vérifier : "
         verifier
         If verifok Then
                If modif = 0 Then
                    ' il s'agit d'une saisie
                        'récupérer la référence du genre
                         sql = "select GENRE_CODE FROM GENRES Where GENRE_LIBELLE = '" & Lst_Genre & "'"
                         rst_genre.Open sql, cnx
                         codeGenre = rst_genre.Fields("GENRE_CODE")
                         rst_genre.Close
     
     
     
                         'récupérer la référence du réalisateur
                         sql = "SELECT REALISATEURS_NUM FROM REALISATEURS WHERE REALISATEURS_NOM = '" & Lst_Realisateurs & "'"
                         rst_realisateurs.Open sql, cnx
                         codeRealisateur = rst_realisateurs.Fields("REALISATEURS_NUM")
                         rst_realisateurs.Close
     
     
                         sql = "insert into FILMS  "
                         sql = sql + " values (" & Val(Txt_FilmsNum.Text) & ", '" & Txt_TitreFilm.Text & "', '" & Txt_Acteurs.Text & "', '" & Txt_Année.Text & "', '" & Txt_Duree.Text & "', '" & Txt_Format.Text & "', " & codeGenre & ", " & codeRealisateur & ")"
     
                        ' execution de la requête d'insertion
                         cnx.Execute sql
                         msg = " Enregistrement effectué "
                         init_zones
                         grille
                Else
                     ' il s'agit d'une modification
                    'mise à jour des coordonnées du membre de l'emprunteur
                     sql = "update FILMS  set "
                     sql = sql + " FILMS_TITRE = '" & Txt_TitreFilm.Text & "',"
                     sql = sql + " FILMS_ACTEUR='" & Txt_Acteurs.Text & "', "
                     sql = sql + " FILMS_SORTIEANNEE='" & Txt_Année.Text & "',"
                     sql = sql + " FILMS_DUREE='" & Txt_Duree.Text & "',"
                     sql = sql + " FILMS_FORMAT='" & Txt_Format.Text & "'"
                     sql = sql + " where FILMS_NUM = " & Val(Txt_FilmsNum.Text)
                     cnx.Execute sql
     
                     msg = " Modification effectuée"
                      init_zones
                      init_boutons
                      grille
                End If
          End If
          Lbl_affichage = msg
    End Sub
     
    Private Sub verifier()
    'début
     
            verifok = True
            ' vérifier le type et la saisie des différentes informations
            If Txt_TitreFilm.Text = "" Or IsNumeric(Txt_TitreFilm) Then
                    msg = msg + " le titre ,"
                    verifok = False
            End If
            If Txt_Acteurs.Text = "" Or IsNumeric(Txt_Acteurs) Then
                    msg = msg + "les acteurs,"
                    verifok = False
            End If
            If Txt_Année = "" Then
                    msg = msg + " l'année,"
                    verifok = False
            End If
            If Txt_Duree = "" Then
                    msg = msg + " la durée,"
                    verifok = False
           End If
           If Lst_Genre.Text = "" Then
                    msg = msg + "le genre,"
                    verifok = False
            End If
     
            If Lst_Realisateurs.Text = "" Then
                    msg = msg + " le réalisateur,"
                    verifok = False
            End If
     
           If verifok Then
                ' verifier si il y a un doublon dans le cas ou la saisie des données est complète
                 If modif = 0 Then
                        sql = " select COUNT(FILMS_NUM) AS NB FROM FILMS where FILMS_TITRE = '" & Txt_TitreFilm.Text & "'"
                 Else
                       sql = " select COUNT(FILMS_NUM) AS NB FROM FILMS where FILMS_TITRE = '" & Txt_TitreFilm.Text & " '"
                     sql = sql + " and FILMS_NUM <>  " & Txt_FilmsNum.Text
     
                 End If
                 ' exécuter la requête qui vérifie le doublon
                    rst_films.Open sql, cnx
                    If rst_films.Fields("nb") > 0 Then
                           msg = Txt_TitreFilm.Text & "  existe déjà !"
                           verifok = False
                    End If
                    rst_films.Close
            End If
    End Sub
     
    Private Sub Cmd_Imprimer_Click()
        Frm_Films.PrintForm
    End Sub
     
    Private Sub cmd_modifier_click()
    ' debut
        modif = 1
        activer
        Cmd_Modifier.Enabled = False
        Cmd_Valider.Enabled = True
     
        Lbl_affichage.Caption = "Modifier puis valider"
    End Sub
     
    Private Sub Cmd_Supprimer_Click()
    ' debut
       MSF_Film.Col = 0
       ' il faudrait vérifier la présence du personnel
         confirmer
         If supp Then
            sql = "DELETE * FROM FILMS where FILMS_NUM = " & MSF_Film.Text & " "
            cnx.Execute sql
            Lbl_affichage = "Suppression réussie"
             ' maj de la grille personnel
            grille
     
         End If
     
        ' modifications des contrôles
        init_zones
        init_boutons
        Cmd_Ajouter.Enabled = True
     
    End Sub
     
    Private Sub confirmer()
    Dim var
    ' DEBUT
        'demander confirmation de la suppression
        var = MsgBox("Etes-vous sûr de vouloir supprimer ?" & Txt_TitreFilm, vbYesNo + vbExclamation, "Supprimer")
        If var = 6 Then
             supp = True
        Else
            supp = False
        End If
     
    End Sub
     
    Private Sub Form_Load()
     Dim i As Integer
     ' debut
        Connec
         'Remplir  la liste film
         Call Liste_GenreFilm
         liste_Genre
         liste_Realisateurs
         Call Liste_DebutLettre
         ' afficher entete grille
          entete_grille
     
        MSF_Film.Enabled = False
     
    End Sub
     
    Private Sub recupdetail()
    ' debut
            MSF_Film.Col = 0
            sql = "select  * FROM FILMS "
            sql = sql + " where FILMS_NUM = " & Val(MSF_Film.Text)
            rst_films.Open sql, cnx
            If Not rst_films.EOF Then
                 Txt_FilmsNum.Text = rst_films.Fields("FILMS_NUM")
                 Txt_TitreFilm.Text = rst_films.Fields("FILMS_TITRE")
     
                 If IsNull(rst_films.Fields("FILMS_ACTEUR")) Then
                    Txt_Acteurs.Text = ""
                 Else
                    Txt_Acteurs.Text = rst_films.Fields("FILMS_ACTEUR")
                 End If
     
                 If IsNull(rst_films.Fields("FILMS_SORTIEANNEE")) Then
                    Txt_Année.Text = ""
                 Else
                    Txt_Année.Text = rst_films.Fields("FILMS_SORTIEANNEE")
                 End If
     
                 If IsNull(rst_films.Fields("FILMS_FORMAT")) Then
                    Txt_Format.Text = ""
                 Else
                    Txt_Format.Text = rst_films.Fields("FILMS_FORMAT")
                 End If
     
                 If IsNull(rst_films.Fields("FILMS_DUREE")) Then
                    Txt_Duree.Text = ""
                 Else
                    Txt_Duree.Text = rst_films.Fields("FILMS_DUREE")
                 End If
                 ' rechercher le nom du genre
                 sql = "select GENRE_LIBELLE from GENRES where GENRE_CODE = " & rst_films.Fields("FILMS_GENRE")
                 rst_genre.Open sql
                 Lst_Genre.Text = rst_genre.Fields("GENRE_LIBELLE")
                 rst_genre.Close
     
                 'rechercher le nom du réalisateur
                 sql = "SELECT REALISATEURS_NOM FROM REALISATEURS WHERE REALISATEURS_NUM = " & rst_films.Fields("FILMS_REALISATEURS")
                 rst_realisateurs.Open sql
                 Lst_Realisateurs.Text = rst_realisateurs.Fields("REALISATEURS_NOM")
                 rst_realisateurs.Close
     
            End If
            rst_films.Close
    End Sub
     
    Private Sub grille()
    ' debut
         ' corps de la grille film
     
         'déclaration de la variable qui permettre d'afficher le ou les films recherché(s)
          Dim sql As String
     
         'début de la requête pour effectuer la recherche
          sql = "SELECT FILMS_NUM, FILMS_TITRE, FILMS_ACTEUR, FILMS_DUREE, FILMS_SORTIEANNEE, FILMS_FORMAT, FILMS_GENRE, FILMS_REALISATEURS FROM FILMS"
     
     
         'maj de la flexgrid
         MSF_Film.Clear
         entete_grille
     
           'si le choix du titre du film est différent du mot "Tous"
             If Lst_DebutLettre <> "TOUS" Then
                    'alors on affiche le résultat correspondant à la lettre choisie
                    sql = sql + " WHERE FILMS_TITRE LIKE '" & Lst_DebutLettre.List(Lst_DebutLettre.ListIndex) & "%'"
             End If
             'trie le nom par ordre alphabétique lorsque le mot "TOUS" est sélectionné
              sql = sql + " ORDER BY FILMS_TITRE"
     
             'si le choix du genre est différent du mot TOUS
             If Lst_GenreFilm = "TOUS" Then
                        sql = "select FILMS_NUM, FILMS_TITRE, FILMS_ACTEUR, FILMS_DUREE, FILMS_SORTIEANNEE, FILMS_FORMAT, FILMS_GENRE, FILMS_REALISATEURS FROM FILMS "
             Else
                        sql = "select FILMS_NUM, FILMS_TITRE, FILMS_ACTEUR, FILMS_DUREE, FILMS_SORTIEANNEE, FILMS_FORMAT, FILMS_GENRE, FILMS_REALISATEURS "
                        sql = sql + " FROM FILMS , GENRES"
                        sql = sql + " where FILMS_GENRE =  GENRE_CODE"
                        sql = sql + " AND GENRE_LIBELLE ='" & FilmsGenre & "'"
             End If
     
             'trie le nom des films dans l'ordre lorsque "tous" est selectionné => meilleure visibilité
             sql = sql + "ORDER BY FILMS_TITRE"
     
             'exécution de la requête par un curseur permettant de parcourir la bdd qui est de type public déclaré dans le module variable
             rst_films.Open sql, cnx
     
             'initialisation du nbre de lignes à 0
             ligne = 0 'nbre de lignes
     
             If Not rst_films.EOF Then 'tant que l'on est pas en fin de résultat
                    Do 'on répète l'action
                        'on remplit lignes de la grille une par une
                        ligne = ligne + 1
                        rst_films.MoveNext
                    Loop Until rst_films.EOF 'tant que l'on est pas arrivé à la fin de la bdd
     
                    MSF_Film.Rows = ligne + 1
     
                    'lecture du résultat enregistré
                    rst_films.MoveFirst
     
                    'boucle pour permettant de parcourir l'ensemble des données enregistrées dans la bdd
                    For i = 1 To (ligne)
     
                            MSF_Film.Row = i
                            MSF_Film.Col = 0
                            MSF_Film.Text = rst_films.Fields("FILMS_NUM")
                            MSF_Film.Col = 1
                            MSF_Film.Text = rst_films.Fields("FILMS_TITRE")
                            MSF_Film.Col = 2
                            If IsNull(rst_films.Fields("FILMS_ACTEUR")) Then
                                  MSF_Film.Text = " "
                            Else
                                  MSF_Film.Text = rst_films.Fields("FILMS_ACTEUR")
                            End If
                            MSF_Film.Col = 3
                            If IsNull(rst_films.Fields("FILMS_GENRE")) Then
                                  MSF_Film.Text = ""
                            Else
                                   MSF_Film.Text = rst_films.Fields("FILMS_GENRE")
                            End If
                            MSF_Film.Col = 4
                            If IsNull(rst_films.Fields("FILMS_SORTIEANNEE")) Then
                                  MSF_Film.Text = ""
                            Else
                                   MSF_Film.Text = rst_films.Fields("FILMS_SORTIEANNEE")
                            End If
     
                            MSF_Film.Col = 5
                            If IsNull(rst_films.Fields("FILMS_DUREE")) Then
                                   MSF_Film.Text = ""
                            Else
                                   MSF_Film.Text = rst_films.Fields("FILMS_DUREE")
                            End If
     
                            MSF_Film.Col = 6
                            If IsNull(rst_films.Fields("FILMS_REALISATEURS")) Then
                                   MSF_Film.Text = ""
                            Else
                                   MSF_Film.Text = rst_films.Fields("FILMS_REALISATEURS")
                            End If
     
                            MSF_Film.Col = 7
                            If IsNull(rst_films.Fields("FILMS_FORMAT")) Then
                                    MSF_Film.Text = ""
                            Else
                                    MSF_Film.Text = rst_films.Fields("FILMS_FORMAT")
                            End If
                           rst_films.MoveNext
                Next i
     
             Else
                Lbl_affichage = " aucun film"
             End If
     
             'fermeture du curseur une fois les données parcourues et affichées
             rst_films.Close
    End Sub
     
    Private Sub MSF_Film_Click()
    ' DEBUT
       recupdetail
     
        If Not MSF_Film.Text = "" Then
            ref = MSF_Film.Text
            Lbl_affichage = ""
     
            init_boutons
            Cmd_Modifier.Enabled = True
            Cmd_Supprimer.Enabled = True
            Cmd_Annuler.Enabled = True
     
            Frame_Films.Enabled = False
        End If
    End Sub
    voilà

  9. #9
    Membre éclairé
    Inscrit en
    Décembre 2007
    Messages
    512
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 512
    Points : 671
    Points
    671
    Par défaut
    En regardant le code,il y a quelque chose qui m'intrigue:

    Dans la sub grille
    [CODE]if Lst_DebutLettre <> "Tous" then..[CODE]

    On compare le nom d'une liste déroulante a une chaîne de caractères???
    Celà à première vue ne m'apparaît pas très correct.
    De plus il me semble que l'on passe des variables privées à une autre "sub"
    sans qu'elles soient mises entre parenthèses donc elles ne contiennent aucune valeur.
    A vérifier par le Débud du vb.Moi plutot qu'un point d'arrêt je préfère mettre des "stop" à certains endroits et vérifier alors la valeur de passage des variables.
    A bientôt et bonne recherche Kiity

  10. #10
    Membre à l'essai
    Inscrit en
    Novembre 2008
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 38
    Points : 12
    Points
    12
    Par défaut
    Bonjour, je suis débutante en vb. Cela ,ne fait pas longtemps que je programme, je ne connais pas toutes les expressions adéquate. Donc, s'il y a une amélioration du code je suis preneuse.

    Sinon, ma feuille et mon code fonctionne. Tu parles de Debug. Comment le lancer. Est-ce dans le menu de vb où il ya le mot de débugage ? Je l'ai fais mais il souligne des lignes en jaunes c'est tout et pas d'explication donc je ne vois pas comment faire pour améliorer mon code.

    Merci

  11. #11
    Modérateur

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 722
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 722
    Points : 5 100
    Points
    5 100
    Par défaut
    Bonjour,

    Dans ton code ton 2ème choix écrase le premier.

    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
        'déclaration de la variable qui permettre d'afficher le ou les films recherché(s)
      Dim sql As String
     
      'début de la requête pour effectuer la recherche
      sql = "SELECT FILMS_NUM, FILMS_TITRE, FILMS_ACTEUR, FILMS_DUREE, FILMS_SORTIEANNEE, FILMS_FORMAT, FILMS_GENRE, FILMS_REALISATEURS FROM FILMS"
     
    ' si l'utilisateur choisi dans les 2 listebox
      If Lst_GenreFilm <> "TOUS" And Lst_DebutLettre <> "TOUS" Then
        ' les 2 cas nous ne faisons rien
        ' (tu pourrais cumuler le choix des 2 dans la requette)
      Else
        'si le choix du titre du film est différent du mot "Tous"
        If Lst_DebutLettre <> "TOUS" Then
          'alors on affiche le résultat correspondant à la lettre choisie
          sql = sql + " WHERE FILMS_TITRE LIKE '" & Lst_DebutLettre.List(Lst_DebutLettre.ListIndex) & "%'"
        End If
     
        'si le choix du genre est différent du mot TOUS
        If Lst_GenreFilm <> "TOUS" Then
          sql = sql + ", GENRES"
          sql = sql + " where FILMS_GENRE =  GENRE_CODE"
          sql = sql + " AND GENRE_LIBELLE ='" & FilmsGenre & "'"
        End If
      End If
     
      'trie par le titre
      sql = sql + " ORDER BY FILMS_TITRE"
    J'ai repris rapidement, j'espère que ce sera correct
    (L'algo de ProgElecT résout aussi ton problème)

    A+, Hervé.
    Traductions d'articles :
    La mémoire en .NET - Qu'est-ce qui va où ?
    Architecture DAL de haute performance et DTO ; Version C# : Partie 1,Partie 2,Partie 3 — Version VB.NET : Partie 1,Partie 2,Partie 3
    N'hésitez pas à consulter la FAQ VB.NET, le cours complet de Philippe Lasserre et tous les cours, articles et tutoriels.

  12. #12
    Membre éclairé
    Inscrit en
    Décembre 2007
    Messages
    512
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 512
    Points : 671
    Points
    671
    Par défaut
    Bonjour,

    rv26t a , je crois , raison mais je ne comprends pas son code avec un else qui ne sert à rien à mon avis.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
        If Lst_GenreFilm <> "TOUS" And Lst_DebutLettre <> "TOUS" Then
        ' les 2 cas nous ne faisons rien
        ' (tu pourrais cumuler le choix des 2 dans la requette)
      Else
        'si le choix du titre du film est différent du mot "Tous"
        If Lst_DebutLettre <> "TOUS" Then]
    Je ferai ceci pour éviter le else:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    If Lst_GenreFilm = "Tous" or Lst_DebutLettre="Tous" then
    'si le choix du titre du film est différent du mot "Tous"
              If Lst_DebutLettre <> "TOUS" Then
        stop
    Voilà aussi pour Kitty ,un exemple de 'stop' dans le code.

    Quand on lance l'execution et que l'on passe par le stop,le programme s'arrête et en pointant la souris sur la variable, on peut voir s'afficher sa valeur et la vérifier.
    Pour continuer on appuie sur la touche F5.
    On peut même mettre plusieurs 'stop' pendant l'execution ou les enlever sans problème.
    A+

  13. #13
    Membre éclairé
    Inscrit en
    Décembre 2007
    Messages
    512
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 512
    Points : 671
    Points
    671
    Par défaut
    réponse bis pour Kitty

    En réfléchissant sur ton code voilà ce que je pourrai proposer

    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
     
    Private Sub grille()
    ' debut
    Dim Rst_Films As Object
    Dim ligne, i As Integer
     
         ' corps de la grille film
     
         'déclaration de la variable qui permettre d'afficher les   'recherché  (s)
          Dim sql As String
          Dim sql1 As String  'une 2e variable chaine
          Dim cnx As Integer
     
         'début de la requête pour effectuer la recherche
         'j'initialise sql1 aulieu de sql voir  pourquoi dans la suite
          sql1 = "SELECT FILMS_NUM, FILMS_TITRE, FILMS_ACTEUR," & _
                "FILMS_DUREE, FILMS_SORTIEANNEE, FILMS_FORMAT," & _
                "FILMS_GENRE, FILMS_REALISATEURS FROM FILMS"
     
     
         'maj de la flexgrid
         MSF_Film.Clear
         entete_grille
         If Lst_GenreFilm = "TOUS" Or Lst_DebutLettre = "TOUS" Then
                sql = sql1 + " ORDER BY FILMS_TITRE"
                'un  des deux =tous ou tous les deux=tous,je passe par
                'la condition je mets la requete dans sql
                'si tous les deux=tous ,j'évite les deux conditions
                'et j'execute la requete
                'si un des deux ,je ne peux passer que par une des deux
                'conditions et je mets sql à jour
                If Lst_DebutLettre <> "TOUS" Then
                    'alors on affiche le résultat correspondant à la lettre choisie
                    sql = sql1 + " WHERE FILMS_TITRE LIKE '" & Lst_DebutLettre.List(Lst_DebutLettre.ListIndex) & "%'"
                    Stop
                End If
                If Lst_GenreFilm <> "TOUS" Then
                          sql = sql1 + ", GENRES"
                          sql = sql + " where FILMS_GENRE =  GENRE_CODE"
                          sql = sql + " AND GENRE_LIBELLE ='" & FilmsGenre & "'"
                End If
     
         End If
         'exécution de la requête par un curseur permettant de parcourir la bdd qui est de type public déclaré dans le module variable
         Rst_Films.Open sql, cnx
    Mon code à vérifier la logique

    A+

  14. #14
    Membre à l'essai
    Inscrit en
    Novembre 2008
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 38
    Points : 12
    Points
    12
    Par défaut
    Bonjour, merci de prendre le temps de m'aider.
    J'ai testé le code que vous m'avez fourni mais il y a un problème. Lorsque je clique sur l'une des listbox, je choisis respectivement cela fonctionne pour une mais pas pour ll'autre. J'obtiens le message suivant :


    "Aucun texte de commande n'a été défini pour l'objet de commande"


    Par exemple, si je sélectionne dans lst_genre le mot action et dans la lst_debutlettre la lettre 'A', j'obtiens ce message.





    Ainsi, lorsque je clique sur débogage il me renvoit à la ligne suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Rst_Films.Open sql, cnx

    le code qui précède cette ligne 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
    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
    Private Sub grille()
    ' debut
     
         ' corps de la grille film
     
         'déclaration de la variable qui permettre d'afficher les   'recherché  (s)
          Dim sql As String
          Dim sql1 As String  'une 2e variable chaine
     
         'début de la requête pour effectuer la recherche
         'j'initialise sql1 aulieu de sql voir  pourquoi dans la suite
          sql1 = "SELECT FILMS_NUM, FILMS_TITRE, FILMS_ACTEUR," & _
                "FILMS_DUREE, FILMS_SORTIEANNEE, FILMS_FORMAT," & _
                "FILMS_GENRE, FILMS_REALISATEURS FROM FILMS"
     
     
         'maj de la flexgrid
         MSF_Film.Clear
         entete_grille
         If Lst_GenreFilm = "TOUS" Or Lst_DebutLettre = "TOUS" Then
                sql = sql1 + " ORDER BY FILMS_TITRE"
                'un  des deux =tous ou tous les deux=tous,je passe par
                'la condition je mets la requete dans sql
                'si tous les deux=tous ,j'évite les deux conditions
                'et j'execute la requete
                'si un des deux ,je ne peux passer que par une des deux
                'conditions et je mets sql à jour
                If Lst_DebutLettre <> "TOUS" Then
                    'alors on affiche le résultat correspondant à la lettre choisie
                    sql = sql1 + " WHERE FILMS_TITRE LIKE '" & Lst_DebutLettre.List(Lst_DebutLettre.ListIndex) & "%'"
                    'Stop
                End If
                If Lst_GenreFilm <> "TOUS" Then
                          sql = sql1 + ", GENRES"
                          sql = sql + " where FILMS_GENRE =  GENRE_CODE"
                          sql = sql + " AND GENRE_LIBELLE ='" & FilmsGenre & "'"
                End If
     
         End If
         'exécution de la requête par un curseur permettant de parcourir la bdd qui est de type public déclaré dans le module variable
         Rst_Films.Open sql, cnx
    Enfin, je ne comprends pas à quoi sert la variable "Stop". Elle arrête juste le programme mais quelle est son utilité ?
    Merci de vos réponses

  15. #15
    Membre éclairé
    Inscrit en
    Décembre 2007
    Messages
    512
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 512
    Points : 671
    Points
    671
    Par défaut
    Bonjour Kitty,

    1.Le stop n'est pas une variable mais une instruction qui permet d'arrêter momentanément le programme pour permettre de visualiser le contenu d'une variable.
    Par exemple si tu mets le pointeur de la souris sur 'Lst_DebutLettre' son contenu apparaitra.

    2.En effet il manque une partie dans le code,si on a 'action et 'une lettre,on ne passe pas par la 1ère condition et sql="",
    alors je te proposerai ceci en plus voir plus loin à partir de code à ajouter.

    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
     
    Private Sub grille()
    ' debut
     
         ' corps de la grille film
     
         'déclaration de la variable qui permettre d'afficher les   'recherché  (s)
          Dim sql As String
          Dim sql1 As String  'une 2e variable chaine
     
         'début de la requête pour effectuer la recherche
         'j'initialise sql1 aulieu de sql voir  pourquoi dans la suite
          sql1 = "SELECT FILMS_NUM, FILMS_TITRE, FILMS_ACTEUR," & _
                "FILMS_DUREE, FILMS_SORTIEANNEE, FILMS_FORMAT," & _
                "FILMS_GENRE, FILMS_REALISATEURS FROM FILMS"
     
     
         'maj de la flexgrid
         MSF_Film.Clear
         entete_grille
         If Lst_GenreFilm = "TOUS" Or Lst_DebutLettre = "TOUS" Then
                sql = sql1 + " ORDER BY FILMS_TITRE"
                'un  des deux =tous ou tous les deux=tous,je passe par
                'la condition je mets la requete dans sql
                'si tous les deux=tous ,j'évite les deux conditions
                'et j'execute la requete
                'si un des deux ,je ne peux passer que par une des deux
                'conditions et je mets sql à jour
                If Lst_DebutLettre <> "TOUS" Then
                    'alors on affiche le résultat correspondant à la lettre choisie
                    sql = sql1 + " WHERE FILMS_TITRE LIKE '" & Lst_DebutLettre.List(Lst_DebutLettre.ListIndex) & "%'"
                    'Stop
                End If
                If Lst_GenreFilm <> "TOUS" Then
                          sql = sql1 + ", GENRES"
                          sql = sql + " where FILMS_GENRE =  GENRE_CODE"
                          sql = sql + " AND GENRE_LIBELLE ='" & FilmsGenre & "'"
                End If
     
                'code à ajouter
     
                                     else     'else sur la première condition
                 sql = sql1 + " WHERE FILMS_TITRE LIKE '" & Lst_DebutLettre.List   (Lst_DebutLettre.ListIndex) & "%'"
                 sql = sql + ", GENRES"
                          sql = sql + " where FILMS_GENRE =  GENRE_CODE"
                          sql = sql + " AND GENRE_LIBELLE ='" & FilmsGenre & "'"
                 'pour donner une valeur à sql (à vérifier si cette valeur est bonne)
                 'fin du code à ajouter              
         End If
         'exécution de la requête par un curseur permettant de parcourir la bdd qui est de type public déclaré dans le module variable
         Rst_Films.Open sql, cnx
    A+

  16. #16
    Membre à l'essai
    Inscrit en
    Novembre 2008
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 38
    Points : 12
    Points
    12
    Par défaut
    re, désolé mais cela ne marche toujours pas. Le message inscrit qu'il y a une erreur de syntaxe et plus particulèrement de virgule.

    Etant débutante, je patauge grave. Mais, un truc que je ne comprends pas c'est au niveau de la requete sql ici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Else     'else sur la première condition
                 sql = sql1 + " WHERE FILMS_TITRE LIKE '" & Lst_DebutLettre.List(Lst_DebutLettre.ListIndex) & "%'"
                 sql = sql + ", GENRES"
                 sql = sql + " where FILMS_GENRE = GENRE_code"
                 sql = sql + " AND GENRE_LIBELLE ='" & GenreFilm & "'"
                 'pour donner une valeur à sql (à vérifier si cette valeur est bonne)
                 'fin du code à ajouter

    dans la variable sql on met la variable sql1 que l'on a déclaré au début pour éviter d'ecrire toute la requête à chaque fois du moins le début est commun, ça j'ai compris.

    par contre à la 2ème ligne
    pourquoi on met sql = sql + ...

    si on met a à nouveau la variable sql il reprend le résultat de la ligne précedente non ? donc, si c'est cela du coup il met le genres à la suite de where films-titre like ...

    Désolé mais ça s'embrouille dans ma tête.
    merci

  17. #17
    Modérateur

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 722
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 722
    Points : 5 100
    Points
    5 100
    Par défaut
    Dans ton code il faut remplacer la variable "FilmsGenre" par le contenu de ta listbox "Lst_GenreFilm"

    En reprenant le code que je t'ai indiqué

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        ' ...
          sql = sql & " AND GENRE_LIBELLE ='" & Lst_GenreFilm & "'" ' Correction (j'ai remplacé FilmsGenre par Lst_GenreFilm)
        ' ...

    requette résultant
    choix Tous - Tous
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT FILMS_NUM, FILMS_TITRE, FILMS_ACTEUR, FILMS_DUREE, FILMS_SORTIEANNEE, FILMS_FORMAT, FILMS_GENRE, FILMS_REALISATEURS 
    FROM FILMS 
    ORDER BY FILMS_TITRE
    Choix Une lettre - tous genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT FILMS_NUM, FILMS_TITRE, FILMS_ACTEUR, FILMS_DUREE, FILMS_SORTIEANNEE, FILMS_FORMAT, FILMS_GENRE, FILMS_REALISATEURS 
    FROM FILMS 
    WHERE FILMS_TITRE LIKE 'a%' 
    ORDER BY FILMS_TITRE
    Choix Tous - un genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT FILMS_NUM, FILMS_TITRE, FILMS_ACTEUR, FILMS_DUREE, FILMS_SORTIEANNEE, FILMS_FORMAT, FILMS_GENRE, FILMS_REALISATEURS 
    FROM FILMS, GENRES 
    where FILMS_GENRE =  GENRE_CODE AND GENRE_LIBELLE ='Action' 
    ORDER BY FILMS_TITRE
    Choix Une lettre - un genre (comme Tous - Tous)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT FILMS_NUM, FILMS_TITRE, FILMS_ACTEUR, FILMS_DUREE, FILMS_SORTIEANNEE, FILMS_FORMAT, FILMS_GENRE, FILMS_REALISATEURS 
    FROM FILMS ORDER BY FILMS_TITRE
    Il me semble que c'est ce que tu souhaites


    Pour voir la requette,

    Soit tu fais un
    Soit un


    Code complet
    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
      'déclaration de la variable qui permettre d'afficher le ou les films recherché(s)
      Dim sql As String
     
      'début de la requête pour effectuer la recherche
      sql = "SELECT FILMS_NUM, FILMS_TITRE, FILMS_ACTEUR, FILMS_DUREE, FILMS_SORTIEANNEE, FILMS_FORMAT, FILMS_GENRE, FILMS_REALISATEURS FROM FILMS"
     
    ' si l'utilisateur choisi dans les 2 listebox
      If Lst_GenreFilm.Text <> "TOUS" And Lst_DebutLettre.Text <> "TOUS" Then
        ' les 2 cas nous ne faisons rien
        ' (tu pourrais cumuler le choix des 2 dans la requette)
      Else
        'si le choix du titre du film est différent du mot "Tous"
        If Lst_DebutLettre.Text <> "TOUS" Then
          'alors on affiche le résultat correspondant à la lettre choisie
          sql = sql & " WHERE FILMS_TITRE LIKE '" & Lst_DebutLettre.List(Lst_DebutLettre.ListIndex) & "%'"
        End If
     
        'si le choix du genre est différent du mot TOUS
        If Lst_GenreFilm.Text <> "TOUS" Then
          sql = sql & ", GENRES"
          sql = sql & " where FILMS_GENRE =  GENRE_CODE"
          sql = sql & " AND GENRE_LIBELLE ='" & Lst_GenreFilm.Text & "'"
        End If
      End If
     
      ' trie sur le titre (même si on choisi par genre)
      sql = sql & " ORDER BY FILMS_TITRE"
     
    Debug.Print sql ' affiche le résultat dans la fenêtre "Exécution" de l'EDI
     
    MsgBox sql ' boite de dialogue appli
    Pour completer, puisque que tu souhaites connaître comment programmer proprement
    Il est préférable d'utiliser le "&" plutôt que le "+" pour concaténer des chaînes de caractères
    Il est aussi préférable d'écrire la propriété par défaut d'un contrôle pour la lisibilité du programme. (voir pour les listbox)

    A+, Hervé.
    Traductions d'articles :
    La mémoire en .NET - Qu'est-ce qui va où ?
    Architecture DAL de haute performance et DTO ; Version C# : Partie 1,Partie 2,Partie 3 — Version VB.NET : Partie 1,Partie 2,Partie 3
    N'hésitez pas à consulter la FAQ VB.NET, le cours complet de Philippe Lasserre et tous les cours, articles et tutoriels.

  18. #18
    Membre éclairé
    Inscrit en
    Décembre 2007
    Messages
    512
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 512
    Points : 671
    Points
    671
    Par défaut
    Bonjour Kitty,

    C'est justement en pataugeant comme tu dis et en faisant des erreurs que l'on apprend.La première chose c'est de bien vérifier les valeurs que l'on passe.
    Je ne connais pas ta bd mais ce qui ne me semble pas logique c'est:
    " WHERE FILMS_TITRE LIKE '" et puis ", GENRES" c'est la virgule???
    C'est à toi à vérifier
    Je te repasse le code avec les commentaires

    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
     
    Private Sub grille()
    ' debut
    Dim Rst_Films As Object
    Dim ligne, i As Integer
     
         ' corps de la grille film
     
         'déclaration de la variable qui permettre d'afficher le ou les films recherché(s)
          Dim sql As String
          Dim sql1 As String 'une 2e variable chaine
          Dim cnx As Integer
     
         'début de la requête pour effectuer la recherche
         'j'initialise sql1 aulieu de sql voir  pourquoi dans la suite
          sql1 = "SELECT FILMS_NUM, FILMS_TITRE, FILMS_ACTEUR," & _
                "FILMS_DUREE, FILMS_SORTIEANNEE, FILMS_FORMAT," & _
                "FILMS_GENRE, FILMS_REALISATEURS FROM FILMS"
     
     
         'maj de la flexgrid
         MSF_Film.Clear
         entete_grille
         If Lst_GenreFilm = "TOUS" Or Lst_DebutLettre = "TOUS" Then
                sql = sql1 + " ORDER BY FILMS_TITRE"
                 'Tous-Tous
     
                If Lst_DebutLettre <> "TOUS" Then  'Tous=genre et une lettre
                    'alors on affiche le résultat correspondant à la lettre choisie
                    sql = sql1 + " WHERE FILMS_TITRE LIKE '" & Lst_DebutLettre.List(Lst_DebutLettre.ListIndex) & "%'"
     
                End If
                If Lst_GenreFilm <> "TOUS" Then 'Tous=lettres et 1 genre
                          sql = sql1 & ", GENRES" 'vérifie pourquoi cette virgule devant GENRES
                          sql = sql & " where FILMS_GENRE =  GENRE_CODE"
                          sql = sql & " AND GENRE_LIBELLE ='" & Lst_GenreFilm & "'"
     
                End If
                 Else   'else sur la première condition
                 '1 genre et une lettre
                 sql = sql1 + " WHERE FILMS_TITRE LIKE '" & Lst_DebutLettre.List(Lst_DebutLettre.ListIndex) & "%'"
                 sql = sql + ", GENRES" 'vérifie pourquoi cette virgule
                 'Pourquoi ici sql=sql.. parce qu'il faut ajouter tout ceci dans la requête
                 sql = sql + " where FILMS_GENRE = GENRE_code"
     
                 sql = sql + " AND GENRE_LIBELLE ='" & GenreFilm & "'"
                 'choix rv26t
                 ' sql = sql & " AND GENRE_LIBELLE ='" & Lst_GenreFilm.Text & "'"
     
         End If
         'exécution de la rquête par un curseur permettant de parcourir la bdd qui est de type public déclaré dans le module variable
         'et comme le dit rv26t vérifie le contenu de sql avant de passer
         'à l'execution ci=dessous
         'rv26t remet dans sql " ORDER BY FILMS_TITRE" ici avant l'instruction
         'je ne sais pas si on doit le mettre ,il faut essayer?
         Rst_Films.Open sql, cnx
    Parfois un détail peut ne pas faire fonctionner un programme.
    J'ai déjà passer des journées entières à chercher une erreur insignifiante,
    donc ne te décourage pas.

    A+

  19. #19
    Membre éclairé
    Inscrit en
    Décembre 2007
    Messages
    512
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 512
    Points : 671
    Points
    671
    Par défaut
    Bonjour,

    De plus n'oublie pas ce que disait ProgElet un peu plus haut.
    Je te le rappelle:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    '**************************************************
                    sql = sql + " FROM FILMS , GENRES" '<=======  a mon avis ,(virgule) et GENRES sont en trop
    '**************************************************
    A+

  20. #20
    Membre à l'essai
    Inscrit en
    Novembre 2008
    Messages
    38
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 38
    Points : 12
    Points
    12
    Par défaut
    Bonjour, merci de vos conseils et de votre aide. Je potasse cela tantot car hier je n'ai pas pu. Merci encore.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [XL-2013] Select case avec checkbox
    Par GuillaumeNcy dans le forum Excel
    Réponses: 8
    Dernier message: 15/06/2015, 17h15
  2. Comment eviter de faire un Select Case avec beaucoup de valeur
    Par jam92400 dans le forum Macros et VBA Excel
    Réponses: 20
    Dernier message: 05/11/2010, 16h19
  3. Select Case avec plusieurs variables
    Par sphynxounet dans le forum VB.NET
    Réponses: 10
    Dernier message: 10/08/2009, 19h16
  4. Select case avec then qui retourne une variable
    Par dinette dans le forum SQL
    Réponses: 6
    Dernier message: 06/07/2009, 12h03
  5. Probleme avec Select Case
    Par GeffD dans le forum MS SQL Server
    Réponses: 7
    Dernier message: 07/03/2005, 16h28

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