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

Bases de données Delphi Discussion :

valeur de champ actuel en relation avec l'enregistrement précédent


Sujet :

Bases de données Delphi

  1. #1
    Membre confirmé
    Homme Profil pro
    Enseignant
    Inscrit en
    Août 2008
    Messages
    666
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2008
    Messages : 666
    Points : 643
    Points
    643
    Par défaut valeur de champ actuel en relation avec l'enregistrement précédent
    salut,
    j'ai une table avec le champ "num_eleve" de type numérique.
    sans que l'utilisateur soit obligé de saisir le "num_eleve", je veux que delphi
    l'enregistre automatiquement selon la valeur de l'enregistrement précédent auquel on ajoute 1:

    ex:Table1.FieldByName('Num_eleve').AsInteger:=la valeur du champ précédent +1.

    j'ai essayé mais sans résultat.je n'ai pas trouvé le code pour indiquer la valeur du champ précédent de 'Num_eleve'.
    comment faire svp?

  2. #2
    Membre actif Avatar de liazidf
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations forums :
    Inscription : Mai 2002
    Messages : 281
    Points : 261
    Points
    261
    Par défaut
    Citation Envoyé par NABIL74 Voir le message
    salut,
    j'ai une table avec le champ "num_eleve" de type numérique.
    sans que l'utilisateur soit obligé de saisir le "num_eleve", je veux que delphi
    l'enregistre automatiquement selon la valeur de l'enregistrement précédent auquel on ajoute 1:

    ex:Table1.FieldByName('Num_eleve').AsInteger:=la valeur du champ précédent +1.

    j'ai essayé mais sans résultat.je n'ai pas trouvé le code pour indiquer la valeur du champ précédent de 'Num_eleve'.
    comment faire svp?
    voilà un petit exemple qui purrait t'aider.

    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
    procedure Tfom1.CdsNewRecord(DataSet: TDataSet);
    Var n:integer;
    begin
    with numero do
     begin
     edit;
     with fieldbyname('numligne') do
      begin
       asinteger :=asinteger + 1;
       n:=asinteger;
      end;
      post;
    end;
    CdsNordre.Value:=n;
    end;

  3. #3
    Membre actif
    Inscrit en
    Juin 2008
    Messages
    324
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 324
    Points : 217
    Points
    217
    Par défaut salut.
    salut.
    tu peut déclarer le champ "n_eleve" comme un champ auto incriment, dans ce cas dans le type de champ "n_eleve" tu met un plus (+) et comme ça le champs s'incriment automatiquement quand on ajoute un enregistrement.
    cordialement ,bon codage.

  4. #4
    Membre confirmé
    Homme Profil pro
    Enseignant
    Inscrit en
    Août 2008
    Messages
    666
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2008
    Messages : 666
    Points : 643
    Points
    643
    Par défaut
    Citation Envoyé par liazidf Voir le message
    voilà un petit exemple qui purrait t'aider.

    procedure Tfom1.CdsNewRecord(DataSet: TDataSet);
    Var n:integer;
    begin
    with numero do
    begin
    edit;
    with fieldbyname('numligne') do
    begin
    asinteger :=asinteger + 1;
    n:=asinteger;
    end;
    post;
    end;
    CdsNordre.Value:=n;
    end;
    Bonjour tout le monde,
    liazidf ,
    j'ai essayé ce code mais delphi me signale qu'il y a des erreurs dans mon code.
    quelle est la nature de "numero" , ''numligne'' , asinteger ?
    Dans ma table,j'ai deux champs:"'Num_eleve'' et "nom_prénom".

  5. #5
    Membre actif Avatar de liazidf
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations forums :
    Inscription : Mai 2002
    Messages : 281
    Points : 261
    Points
    261
    Par défaut
    Citation Envoyé par NABIL74 Voir le message
    Bonjour tout le monde,
    liazidf ,
    j'ai essayé ce code mais delphi me signale qu'il y a des erreurs dans mon code.
    quelle est la nature de "numero" , ''numligne'' , asinteger ?
    Dans ma table,j'ai deux champs:"'Num_eleve'' et "nom_prénom".
    Salut,
    effectivement, je n'est pas donné de détails sur ce code, voilà il le numero désigne le nom d'une table dans l'aquelle vous allez stocker le dernier numéro attribué, pour vous c'est le "Num_eleve", bien-sur il y a là une solution y'en a d'autres voir SQL.
    Bonne chance.

  6. #6
    Membre confirmé
    Homme Profil pro
    Enseignant
    Inscrit en
    Août 2008
    Messages
    666
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2008
    Messages : 666
    Points : 643
    Points
    643
    Par défaut
    bonjour à tous,
    j'ai passé beaucoup de temps sur ce problème et je n'ai pas encore trouvé la solution.
    est-il possible de le resoudre en utilisant "bookmark?
    je m'arrache les cheveux mes amis.

  7. #7
    Membre éprouvé Avatar de BuzzLeclaire
    Homme Profil pro
    Dev/For/Vte/Ass
    Inscrit en
    Août 2008
    Messages
    1 606
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Dev/For/Vte/Ass

    Informations forums :
    Inscription : Août 2008
    Messages : 1 606
    Points : 1 113
    Points
    1 113
    Par défaut
    Lu Nabil74

    Tu est dans quelle type de base ? Access ?

    Si c'est avec Access une simple requete te de donnera la réponse. J'utilise déjà cette fonctionalité sur mon soft.

    Je reviendrais te mettre ma procedure.

  8. #8
    Membre confirmé
    Homme Profil pro
    Enseignant
    Inscrit en
    Août 2008
    Messages
    666
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2008
    Messages : 666
    Points : 643
    Points
    643
    Par défaut
    bonjour BuzzLeclaire,
    je travaille avec Absolute.Database.v5.12
    merci à toi!

  9. #9
    Membre éprouvé Avatar de BuzzLeclaire
    Homme Profil pro
    Dev/For/Vte/Ass
    Inscrit en
    Août 2008
    Messages
    1 606
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Dev/For/Vte/Ass

    Informations forums :
    Inscription : Août 2008
    Messages : 1 606
    Points : 1 113
    Points
    1 113
    Par défaut
    Bonjour,

    Voilà une procédure que j'utilise pour ajouter 1 à un champs de type numérique, pour éviter à l'utilisateur de connaître le prochain code.

    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
    function ProchainCodeLibre(Table, Champ: String; Option: Byte): Integer;
    ...
    ...
     
    function ProchainCodeLibre(Table, Champ: String; Option: Byte): Integer;
    Begin
      result := 0;
      With ModuleDeDonneeSecondaire.ADOQueryX do 
    // Module de donnée propre à mon applicatif
    // ADOQueryX pour réaliser une requète
      Begin
    ...
    { if Option =1 then }
     
        if Option = 2 then // champs de type numérique
        Begin
          SQL.Clear;
          SQL.Add('SELECT Last('+Table+'.'+Champ+') AS LastDeCode FROM '+ Table);
          Try
            Try
              Open;
              Result := Fields.Fields[0].AsInteger + 1; // Retourne LastDeCode + 1
            Except
              MessageDlg(Application.Title + ' a généré une erreur pendant l''éxécution de : '
              +#10+#13 + SQL.Text
              +#10+#13 + 'Noter ce message et contacter le service Technique', mtError, [mbOk], 0);
            end;
          Finally
            Close;
          end;
        end; // On pourrais imaginé un Else mais j'ai pas envie lol !!!
        if Option = 3 then // Utiliser pour les champs de type Texte
        Begin
          SQL.Clear;
          SQL.Add('SELECT Max(Val('+Table+'.'+Champ+')) As MaxDeCode From '+ Table + ' ');
          SQL.Add('Order By Max(Val('+Table+'.'+Champ+'))');
          Try
            Try
              Open;
              Result := Fields.Fields[0].AsInteger + 1; // Retourne MaxDeCode+1
            Except
              MessageDlg(Application.Title + ' a généré une erreur pendant l''éxécution de : '
              +#10+#13 + SQL.Text
              +#10+#13 + 'Noter ce message et contacter le service Technique', mtError, [mbOk], 0);
            end;
          Finally
            Close;
          end;
        end;
      end;
    end;
    utilisation

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Edit1.Text := IntToStr(ProchainCodeLibre('Salarie','Code',2));
    Explication :
    le coup du Val dans "Max(Val(" n'ai valable que dans le cas où le champ code est de type texte et que l'on écris que des chiffres dedans (je sais je suis malade mais je me soigne cf : contrainte inter-logiciel)

    Bon, je connais pas ton sytem de base de données mais dans l'idée l'option 2 pour le coté champs numérique, l'option 3 pour le coté champs text (donnée numérique), J'ai pas tout mis j'ai d'autre option.

    J'espère que cela pourras t'aider.

  10. #10
    Membre du Club
    Inscrit en
    Janvier 2006
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 49
    Points : 48
    Points
    48
    Par défaut
    Moi aussi je fais ça dans mon application.
    Ce que je fais est simple : Le champ en question est juste en position lecture dc on peut pas écrire.
    Chaque fois kon veut insèrer je fais une requête dans la table et le champ le plus grand que je trouve j'ajoute 1. Mais le champ doit être auto incrémentant absolument sinon tu pourras avoir tout le temps des bugs.

  11. #11
    Membre confirmé
    Homme Profil pro
    Enseignant
    Inscrit en
    Août 2008
    Messages
    666
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2008
    Messages : 666
    Points : 643
    Points
    643
    Par défaut

    OKKKKKK ça marche!!!!!!!!!!!!!
    La solution c'est l'idée l'option 2 pour le coté champs numérique.
    Avant,j'ai testé beaucoup de trucs mais sans résultats.
    merci à vous tous surtout à toi BuzzLeclaire.tu m'as beaucoup aidé.
    encore merci infiniment.
    au plaisir d'avoir d'autres discutions sur le forum.

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 18/04/2014, 05h08
  2. Réponses: 1
    Dernier message: 11/09/2013, 10h44
  3. Réponses: 3
    Dernier message: 20/09/2006, 16h07
  4. affichage d'une valeur en relation avec deux tables
    Par mealtone dans le forum PHP & Base de données
    Réponses: 19
    Dernier message: 04/08/2006, 13h52
  5. Relations avec 3 champs
    Par koolkris dans le forum SQL
    Réponses: 2
    Dernier message: 14/09/2005, 12h02

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