Incrémenter un controle sous acces 2000 ?????

D-Zyl -  
 D-Zyl -
Salut à tous,

mon souci, c'est que j'ai besoin d'incrémenter un contrôle dans un formulaire à l'ouverture de ce dernier...... et je ne sais pas comment faire.

le principe, c'est de récupérer un nombre "N" dans une table "T". Ensuite, incrémenter ce nomnbre ("N" = "N" + 1), l'afficher dans un contrôle du formulaire "F". Puis, mettre à jour ce nombre incrémenté dans la table T.

Ah au fait, je ne connais pas le VBA... :)

merci d'avance.

6 réponses

  1. Utilisateur anonyme
     
    Si j'ai bien compris, ce champ correspondra au nombre de fois que le formulaire a été ouvert, c'est ça ??
    0
    1. D-Zyl
       
      en fait, le formulaire F sert à entrer une nouvelle réparation sur un véhicule.
      La procédure c'est :
      on click sur le bouton nouvelle réparation
      ça ouvre le formulaire dont un des controles est "N° de réparation".

      je voudrais que que ce controle récupère le numéro de la dernière réparation de la table "véhicule", l'incrémente, l'affiche dans le formulaire, et le ré-enregistre dans la table "véhicule"
      0
    2. Utilisateur anonyme
       
      Pourquoi tu ne mets pas ce champ en type 'numéro Auto' ?
      0
      1. D-Zyl > Utilisateur anonyme
         
        les NuméroAuto, c'est pas très flexible....
        tu peux avoir des numéros qui ne se suivent pas.
        c'est galère
        0
  2. Utilisateur anonyme
     
    C bon, j'ai déjà fait ça pour une base, mais j'ai utilisé un fichier en plus.
    Voici le code

    Private Sub Form_BeforeInsert(Cancel As Integer)
    Dim enreg, variable_enreg As Long
    Close
    Open "ton chemin\ton fichierl" For Input As #1
    Input #1, enreg
    variable_enreg = enreg + 1
    Me!ton champ = variable_enreg
    Close
    Open "ton chemin\ton fichier" For Output As #1
    Write #1, variable_enreg

    'partie facultative, mais on sait jamais, un mec (ou une nana !) peut bien ouvrir par curiosité ce fichier et peut voir qu'il ne contient qu'un nombre, et peut se dire, c quoi ce fichier à la con, je l'efface.
    Pour + de sécurité, le fichier en question je lui ai mis une extension en dll, ça dissuade dès fois...

    Print #1, "TRES IMPORTANT !!!!!!!!!!!!!!"
    Print #1, "NE SURTOUT PAS EFFACER CE FICHIER "
    Print #1, "IL EST INDISPENSABLE A LA BASE DE DONNEES
    close
    End Sub

    @+
    0
  3. boun
     
    Si jai compris ta question, je pense pouvoir taider.

    Tape ceci sur l'action "Ouverture" de ton formulaire F (=nouvelle reparation) :
    Dim rs as Recordset
    Dim mavoiture as String

    ' ce que japelle codevoiture est la clé primaire de ta table véhicule (=T )
    'nom du formulaire = formulaire qui ouvre F

    mavoiture = Forms![nom du formulaire]![codevoiture]
    Set rs = Currentdb.Opendatabase ("Select N From T Where codevoiture=' " & mavoiture & " ';")
    rs.Openrecordset
    rs.Edit
    rs.Fields("N")=rs.Fields("N")+1
    rs.Update
    Forms![F]![N° de réparation]=rs.Fields("N]
    rs.Close

    Javoue que je nai pas essayé. Peut-être que ca marche pas. Dans ce cas, dis le moi. A plus
    0
  4. boun
     
    Jme suis apercu que javais fait une faute de frappe en voulant surement taper trop vite. A l'avant derniere ligne, jai mis un ] au lieu de ) et jai oublié une ". Il faut donc mettre :

    Forms![F]![N° de réparation]=rs.Fields("N")

    Ca devrait aller un peu mieux comme ca.

    Réponds-moi si possible pour me dire si ca marche, si cest bien ce que tu souhaitais ou alors si je suis une grosse m....
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. D-Zyl
     
    Quand tu écris :

    "Set rs = Currentdb.Opendatabase ("Select N From T Where codevoiture=' " & mavoiture & " ';")"

    je laisse N et T tels quels, ou alors je les remplace par ???? pour N et par le nom de la table pour T ?
    0
  7. boun Messages postés 17 Statut Membre 8
     
    A la place du N tu tapes le nom de ton champ "N° de réparation" tel qu'il est écrit dans ta table "véhicules", a la place du T le nom de ta table "véhicules". Et le F correspond à ton formulaire "Nouvelle réparation". Jai mis ces lettres parceke jsavé pas le nom exact. Tiens moi au courant
    0
    1. D-Zyl
       
      Salut boun

      à la ligne SET RS=...., je suis obligé d'inverser opendatabase et currentdb pour continuer.

      Set rs = Opendatabase.CurrentDb("Select Item From avion Where Immatriculation=' " & monavion & " ';")

      Et le pb c'est qu'il me dit : "erreur d'execution '424' : objet requis".
      et là je ne sais pas quoi faire, vu que je ne connais pas la syntaxe des fonctions vba....

      merci pour ton aide déjà tres précieuse
      0
    2. D-Zyl
       
      J'essaye de bidouiller un peu le code mais, y a rien à faire, ça marche po...
      voila exactement ce qui est écrit dans le code du formulaire "nouvelle reparation" :

      Private Sub Form_Open(Cancel As Integer)

      Dim rs As Recordset
      Dim monavion As String

      monavion = Forms![Mapping reparations structurales]![Immatriculation]
      Set rs = CurrentDb.Opendatabase("Select Item From avion Where Immatriculation=' " & monavion & " ';")
      rs.Openrecordset
      Edit.rs
      rs.Fields("Item") = rs.Fields("Item") + 1
      rs.Update
      Forms![nouvelle reparation]![Item] = rs.Fields("Item")
      rs.Close

      End Sub


      J'obtiends : erreur de compilation sur opendatabase, membre de méthode ou de données introuvables
      0
    3. boun > D-Zyl
       
      Je pense savoir mais je suis pas sur. Le Recordset est un objet DAO. Il faut donc que tu charges la librairie DAO. Pour cela, passe en affichage VBA. Puis rentre dans le sous-menu Références du menu Outils. Il te reste plus qu'à cocher la case Microsoft DAO (...) Library.
      De plus, pour etre sur de bien déclarer ta variable rs :
      Dim rs As DAO.Recordset
      0
    4. boun > D-Zyl
       
      En plus je crois bien que jme suis trompé. C'est pas :
      Set rs=currentdb.Opendatabase
      mais :
      Set rs=currentdb.Openrecordset
      Essaie les 2. J'ai un doute.
      0
    5. D-Zyl > boun
       
      g essayé de faire ce que tu m'as dit, en plus g changé le champ "Item", apparemment c'est un mot réservé...

      Private Sub Form_Open(Cancel As Integer)

      Dim db As DAO.Database
      Dim rs As DAO.Recordset
      Dim monavion As String

      monavion = Forms![Mapping reparations structurales]![Immatriculation]
      Set db = CurrentDb
      Set rs = db.OpenRecordset("Select numeroreparation From avion Where Immatriculation=' " & monavion & " ';")
      rs.OpenRecordset
      rs.Edit
      rs.Fields("numeroreparation").Value = rs.Fields("numeroreparation").Value + 1
      rs.Update
      Forms![nouvelle reparation]![numeroreparation] = rs.Fields("numeroreparation").Value
      rs.Close
      Set rs = Nothing
      Set db = Nothing
      End Sub

      le souci, c'est qu'il m'affiche nu message d'erreur '3021' : aucun enregistrement en cours.
      et il s'arrete sur "rs.edit".
      C'est à croire que le rs.openrecordset juste au-dessus n'est pas pris en compte, ou alors ce n'est pas la bonne syntaxe....

      je déprime d'être "une quiche" en vba, c'est désolant....
      0