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 :

Incrémentation automatique champ numerique [AC-2013]


Sujet :

IHM

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    retraité
    Inscrit en
    Janvier 2017
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Janvier 2017
    Messages : 31
    Points : 26
    Points
    26
    Par défaut Incrémentation automatique champ numerique
    Bonjour à tous,
    Je dispose d’un formulaire de saisie avec 2 boutons de commande ( btnajoutuneimage et btnajoutdesimages).
    J’ ai un champ idphoto ( numéro auto) et un autre champ ( numcliché). Sur ce dernier, j’ ai placé sur données valeurs par défaut (=nz(maxdom(«*numcliché*»;*»tblphoto*»);0)+1) et cela me permet d incrémenter mon champ numcliché de 1. Je le fais 10 donc 10 enregistrements avec 10 images donc mon dernier enregistrement porte le numcliché 10. Tout va bien jusque là.
    Lorsque je veux intégrer un groupe d images en seule fois avec ouverture boite dialogue et positionnement sur répertoire, les «* supposons*» 10 images sont intégrées mais mon numcliché prend la valeur 0. C’est à dire que du 11 au 21 le numcliché est à zéro. Si maintenant j ajoute un nouvel enregistrement le numcliché prend la valeur 11 alors qu’il devrait avoir la valeur 22. Je souhaite savoir comment incrémenter mon numcliché avec un enregistrement ou plusieurs enregistrements en une seule fois ( c est à dire 1+1+1+10+15+2+1 etc)
    Merci de bien vouloir m apporter votre concours. Cordialement.

  2. #2
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 359
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 359
    Points : 23 829
    Points
    23 829
    Par défaut
    Bonjour.

    Tu fais ton calcul dans un formulaire et pas directement dans la table donc quand tu fais plus d'un ajout à la fois c'est dans la table que tu le fais et tes enregistrements ne se numérotent pas.

    La solution la plus simple que je vois est de faire une requête de mise à jour du type :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    UPDATE Table1 SET Table1.NumSequence = DCount("Clef","Table1","[Clef]<=" & [Table1].[Clef])
    WHERE Table1.NumSequence Is Null));

    Ici [Clef] est un numéro automatique.

    Qui va numéroter tes enregistrements dans l'ordre des numéros automatiques.

    Note que si tu peux supprimer des images après leur numérotation alors ma requête ne marche plus et que la seule solution que j'ai trouvée est de faire du code VBA.

    Attention si ton application est multi-utilisateurs et que plusieurs utilisateurs peuvent faire des ajouts, le DMax()+1 pourrait te donner le même numéro sur plusieurs postes.
    Il faut prévoir de gérer cela au niveau de la table avec un index unique et au niveau du formulaire de saisie pour gérer l'erreur de doublon ou en faisant le calcul dans une fonction prévue pour cela.

    A+

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    retraité
    Inscrit en
    Janvier 2017
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Janvier 2017
    Messages : 31
    Points : 26
    Points
    26
    Par défaut incrémentation
    Bonsoir M.Marot_r
    Le code SQL fournit a été placé dans une requête et s'exécute mais ne donne pas le résultat escompté (aucun changement).
    Le champ Numcliché doit s'incrémenter (+1) à chaque nouvel enregistrement unique ou multiple (plusieurs fichiers dans un répertoire image).
    Ma base concerne une gestion ou bibliothèque de photographies familiales, elle est donc personnelle et privée (pas de réseau et un seul utilisateur).
    voici le code sur le bouton BtnAjoutUn :

    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 Sub btnimageunique_Click()
        Dim fd As Office.FileDialog
        On Error Resume Next
        Set fd = Application.FileDialog(msoFileDialogOpen)
        fd.Title = "sélectionner une image"
        fd.AllowMultiSelect = False
        fd.Filters.Clear
        fd.Filters.Add "fichier JPG", "*.jpg"
        fd.Filters.Add "fichier BMP", "*.bmp"
        fd.Filters.Add "fichier GIF", "*.gif"
        fd.Filters.Add "tous les fichiers", "*.*"
        fd.FilterIndex = 1
        If fd.Show() Then
        DoCmd.GoToRecord , , acNewRec
        Me.Nom_Fichier = FileName(fd.SelectedItems(1))
        Me.Nom_Image = FilenameWithoutExt(fd.SelectedItems(1))
        Me.txtRepBase = FilePath(fd.SelectedItems(1))
        DoCmd.RunCommand acCmdSaveRecord
    End If
     
        Chemin_After_Upadte
     
    End Sub
    et voici le code ou module pour le bouton BtnAjoutPlus :
    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
    Sub SelectionDossierImages()
      Dim fd As Office.FileDialog
      Dim strDossier As String
     
      ' Créer un objet FileDialog
      Set fd = Application.FileDialog(msoFileDialogFolderPicker)
     
      ' Titre de la boîte
      fd.Title = "Sélectionnez un dossier..."
     
      ' Afficher la boîte et traiter le résultat
      If fd.Show() Then
        ' Chemin du dossier sélectionné
        strDossier = fd.SelectedItems(1)
     
        ' Indexer toutes les images JPG et BMP du dossier
        ChargerImages strDossier, "*.jpg"
        ChargerImages strDossier, "*.bmp"
     
        End If
      Set fd = Nothing
    End Sub
     
    Sub ChargerImages( _
      ByVal strDossier As String, _
      Optional ByVal strExtension As String = "*.jpg")
     
      Dim rst As dao.Recordset
      Dim strFichier As String
      Dim intImages As Integer
     
      ' Ajouter un \ à la fin du dossier, si nécessaire
      strDossier = AddBackslash(strDossier)
     
      ' Ouvrir la table
      Set rst = CurrentDb.OpenRecordset("TblPhoto", dbOpenDynaset)
     
      ' Lecture des images du dossier
      intImages = 0
      strFichier = Dir(strDossier & strExtension, vbNormal)
      While strFichier <> ""
        ' Ajouter l'image dans la table
        rst.AddNew
        rst("Nom Image") = FilenameWithoutExt(strFichier)
        rst("Nom Fichier") = strFichier
        rst("Dossier") = strDossier
        rst.Update
        intImages = intImages + 1
     
        ' On passe au fichier suivant
        strFichier = Dir
      Wend
     
      ' On ferme !
      rst.Close
      Set rst = Nothing
      MsgBox "Opération terminée !" & _
        vbCrLf & intImages & " ajoutée(s)", _
        vbInformation
    End Sub
    et le code suivant est placé sur la valeur par défaut du champ Numcliché : =Nz(MaxDom("Numcliché";"tblPhoto");0)+1.

    Pour le BtnAjoutUn ça fonctionne très bien, c'est pour le BtnAjoutPlus ou cela foire (voir mon Premier Post)
    Merci pour ton aide

  4. #4
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 359
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 359
    Points : 23 829
    Points
    23 829
    Par défaut
    Bonjour.

    Le code SQL fournit a été placé dans une requête et s'exécute mais ne donne pas le résultat escompté (aucun changement).
    Peux-tu poster le code SQL et aussi la structure de ta table ?

    A+

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    retraité
    Inscrit en
    Janvier 2017
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Janvier 2017
    Messages : 31
    Points : 26
    Points
    26
    Par défaut
    bonsoir
    voici une image de la table unique :
    en ce qui concerne le code il y en a beaucoup ainsi que des modules et module de classe (ClGdiPlus de votre sitepour la gestion exif des photos)
    alors lequel te faut-il ?
    sinon je peux reduire la base au stricte minimum et te l'envoyer demain matin
    Merci et bonsoir
    Fichiers attachés Fichiers attachés

  6. #6
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 359
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 359
    Points : 23 829
    Points
    23 829
    Par défaut
    Bonjour.

    Je n'ai pas besoin de ton code mais seulement du code que tu mentionnes dans :

    Le code SQL fournit a été placé dans une requête et s'exécute mais ne donne pas le résultat escompté (aucun changement).
    J'ai testé cette requête et elle donne le résultat attendu mais il y a sans doute quelque chose de différent entre ma requête et la tienne.

    A+

  7. #7
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 359
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 359
    Points : 23 829
    Points
    23 829
    Par défaut
    Et peux-tu poster une image pas un fichier Docx, je ne suis pas autorisé à l'ouvrir sur mon poste.

    A+

  8. #8
    Nouveau membre du Club
    Homme Profil pro
    retraité
    Inscrit en
    Janvier 2017
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Janvier 2017
    Messages : 31
    Points : 26
    Points
    26
    Par défaut re incrementation
    bonsoir
    c'est le bout de code que tu m as donné que j'ai adapté :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    UPDATE TblPhoto SET TblPhoto.Clef = DCount("Numcliché","TblPhoto","[Numcliché]<=" & [TblPhoto].[Numcliché])
    WHERE TblPhoto.Clef Is Null;
    J'ai ajouté le champ clef (numérique) dans la table
    merci
    Images attachées Images attachées  

  9. #9
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 359
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 359
    Points : 23 829
    Points
    23 829
    Par défaut
    Bonjour le code devrait être

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    UPDATE TblPhoto SET TblPhoto.[NumCliché] = DCount("Id image","TblPhoto","[Id Image]<=" & [TblPhoto].[Id image])
    WHERE TblPhoto.NumCliché Is Null;

    Car tu veux mettre à jour [NumCliché] (SET TblPhoto.[NumCliché] =) avec le comptage de toutes les images qui "précédent" celle courante (DCount("Id image","TblPhoto","[Id Image]<=" & [TblPhoto].[Id image])).

    Et tu peux supprimer le champ Clef qui ne sert à rien (en fait le Clef de mon exemple c'est ton IdImage).

    Si cela marche dans ton code suite à l'importation de ta série d'images tu vas mettre quelque chose qui ressemble à :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    dim db as dao.database:set db=currentdb
    call db.querydefs("NomTaRequeteMAJNumeroCliche").excecute(dbFailOnError) 'C'est cela qui va lancer la requête de mise à jour. Le dbFailOnEror est juste pour être prévenu si quelque chose ne fonctionne pas ce qui, en principe, ne devrait jamais être le cas.
    db.close:set db=nothing
    A+

  10. #10
    Nouveau membre du Club
    Homme Profil pro
    retraité
    Inscrit en
    Janvier 2017
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Janvier 2017
    Messages : 31
    Points : 26
    Points
    26
    Par défaut re incrementation
    Bonsoir Marot_r
    Désolé, mais je n'y arrive pas à mes fins.
    J'ai bien tenté diverses manipulations du code que tu as fourni, rajouter le champ clef, remplacer id image par numcliché et inversement, mais cela ne fonctionne pas.
    Précise moi s'il te plait ou mettre le second code fourni concernant l'appel de la requête ajout. Si cela ne marche pas, je me verrais dans l'obligation de faire plus simple en prenant le champ Id Image (clef) pour le champ Numcliché.
    Merci

  11. #11
    Nouveau membre du Club
    Homme Profil pro
    retraité
    Inscrit en
    Janvier 2017
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Janvier 2017
    Messages : 31
    Points : 26
    Points
    26
    Par défaut re incrémentation
    Bonjour M.Marot_r
    Après plusieurs essais divers, je ne suis rendu compte de mon erreur, le champ Id Image était mal orthographié, et maintenant en ce qui concerne le code UpDate, il joue le rôle souhaité. Un Grand merci pour cela.
    Me reste plus qu'à trouver sur quel évènement placer l'appel de la requête ajout.
    Cordialement

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

Discussions similaires

  1. Incrémenter automatiquement champ de saisie
    Par Azizkwl dans le forum WinDev
    Réponses: 9
    Dernier message: 05/03/2015, 13h43
  2. Incrémentation Automatique d'un champ
    Par midotoon dans le forum SQL
    Réponses: 5
    Dernier message: 05/06/2007, 16h58
  3. [Conception]Incrémenter automatiquement la valeur d'un champ
    Par pmelen dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 21/04/2007, 00h07
  4. incrémentation automatique d'un champ
    Par Simon2 dans le forum Access
    Réponses: 3
    Dernier message: 18/12/2006, 17h41
  5. incrémenter automatiquement un champ d'un dbgrid
    Par bertrand_declerck dans le forum Bases de données
    Réponses: 8
    Dernier message: 01/09/2005, 08h42

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