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 :

Réinitialiser la valeur d'un champs Inc Auto(+)


Sujet :

Bases de données Delphi

  1. #1
    Membre éprouvé Avatar de b_reda31
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2007
    Messages
    899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2007
    Messages : 899
    Points : 961
    Points
    961
    Par défaut Réinitialiser la valeur d'un champs Inc Auto(+)
    Bonjour à tous et à toutes,
    J'utilise une table paradox,la clé de celle ci est un champ de type Incremantation Auto (+)
    Aprés avoir vider la table,je voudrai réinitialiser la valeur du champ champ (+)
    càd recommancer à partir de 1 (et non à partir de la plus grande valeur atteinte+1)
    J'ai pensé à utiliser un champ numérique et de controler l'incrémentation/decrémentation manuellement en fonction d'ajout/suppression d'enregistement afin d'éviter la violation de clé,mais je voulais savoir si cela etait possible avec un champ de type auto incrementation (etant une clé primaire à ma table).
    Je vous remercie d'avance.
    « Il est assez difficile de trouver une erreur dans son code quand on la cherche. C’est encore bien plus dur quand on est convaincu que le code est juste!!»

  2. #2
    Membre éclairé Avatar de freud
    Homme Profil pro
    Développeur
    Inscrit en
    Mai 2002
    Messages
    1 271
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 271
    Points : 681
    Points
    681
    Par défaut
    Bonjour,

    Je te propose de convertir ton champ AutoInc en Integer et d'initialiser ton champ à 0 ou 1 et de rétablir ce champ en AutoInc sous la partie implementation mettre :
    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
     
    implementation
    Type
      ChangeRec = packed record
        szName: DBINAME;
        iType: word;
        iSubType: word;
        iLength: word;
        iPrecision: byte;
      end;
    procedure ChangeField(Table: TTable; Field: TField; Rec: ChangeRec);
     var
      Props: CURProps;
      hDb: hDBIDb;
      TableDesc: CRTblDesc;
      pFields: pFLDDesc;
      pOp: pCROpType;
      B: byte;
     
    begin
      // Initialize the pointers...
      pFields := nil; pOp := nil;
      // Make sure the table is open exclusively so we can get the db handle...
      if Table.Active = False then
        raise EDatabaseError.Create('Table must be opened to restructure');
      if Table.Exclusive = False then
        raise EDatabaseError.Create('Table must be opened exclusively to restructure');
     
      Check(DbiSetProp(hDBIObj(Table.Handle), curxltMODE, integer(xltNONE)));
      // Get the table properties to determine table type...
      Check(DbiGetCursorProps(Table.Handle, Props));
      // Make sure the table is either Paradox or dBASE...
      if (Props.szTableType <> szPARADOX) and (Props.szTableType <> szDBASE) then
        raise EDatabaseError.Create('Field altering can only occur on Paradox' +
                    ' or dBASE tables');
      // Allocate memory for the field descriptor...
      pFields := AllocMem(Table.FieldCount * sizeof(FLDDesc));
      // Allocate memory for the operation descriptor...
      pOp := AllocMem(Table.FieldCount * sizeof(CROpType));
      try
        // Set the pointer to the index in the operation descriptor to put
        // crMODIFY (This means a modification to the record is going to happen)...
        Inc(pOp, Field.Index);
        pOp^ := crMODIFY;
        Dec(pOp, Field.Index);
        // Fill the field descriptor with the existing field information...
        Check(DbiGetFieldDescs(Table.Handle, pFields));
        // Set the pointer to the index in the field descriptor to make the
        // midifications to the field
        Inc(pFields, Field.Index);
     
        // If the szName portion of the ChangeRec has something in it, change it...
        if StrLen(Rec.szName) > 0 then
          pFields^.szName := Rec.szName;
        // If the iType portion of the ChangeRec has something in it, change it...
        if Rec.iType > 0 then
          pFields^.iFldType := Rec.iType;
        // If the iSubType portion of the ChangeRec has something in it, change it...
        if Rec.iSubType > 0 then
          pFields^.iSubType := Rec.iSubType;
        // If the iLength portion of the ChangeRec has something in it, change it...
        if Rec.iLength > 0 then
          pFields^.iUnits1 := Rec.iLength;
        // If the iPrecision portion of the ChangeRec has something in it, change it...
        if Rec.iPrecision > 0 then
          pFields^.iUnits2 := Rec.iPrecision;
        Dec(pFields, Field.Index);
     
        for B := 1 to Table.FieldCount do begin
          pFields^.iFldNum := B;
          Inc(pFields, 1);
        end;
        Dec(pFields, Table.FieldCount);
     
        // Blank out the structure...
        FillChar(TableDesc, sizeof(TableDesc), 0);
        //  Get the database handle from the table's cursor handle...
        Check(DbiGetObjFromObj(hDBIObj(Table.Handle), objDATABASE, hDBIObj(hDb)));
        // Put the table name in the table descriptor...
        StrPCopy(TableDesc.szTblName, Table.TableName);
        // Put the table type in the table descriptor...
        StrPCopy(TableDesc.szTblType, Props.szTableType);
        // The following three lines are necessary when doing any field restructure
        // operations on a table...
     
        // Set the field count for the table
        TableDesc.iFldCount := Table.FieldCount;
        // Link the operation descriptor to the table descriptor...
        TableDesc.pecrFldOp := pOp;
        // Link the field descriptor to the table descriptor...
        TableDesc.pFldDesc := pFields;
        // Close the table so the restructure can complete...
        Table.Close;
        // Call DbiDoRestructure...
        Check(DbiDoRestructure(hDb, 1, @TableDesc, nil, nil, nil, FALSE));
      finally
        if pFields <> nil then
          FreeMem(pFields);
        if pOp <> nil then
          FreeMem(pOp);
      end;
    end;
    Ensuite pour convertir lAutoInc en Integer (dans le click d'un bouton par exemple) :
    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
     
    procedure TForm1.Button1Click(Sender: TObject);
     
    var CR : ChangeRec;
    begin
      Table1.Close;
      Table1.Exclusive := True;
      Table1.Open;
      FillChar(CR,SizeOf(CR),0);
      CR.iType := fldINT32;
      ChangeField(Table1,Table1.FieldbyName('NomDuChamp'),CR);
      Table1.Close;
        -----------------------------------
      //Ici mettre le code de réinitialisation de la valeur du champ
        -----------------------------------
      //Code pour  retablir le champ en AutoInc
     
      Table1.Close;
      Table1.Exclusive := True;
      Table1.Open;
      FillChar(CR,SizeOf(CR),0);
      CR.iType := fldPDXAUTOINC; 
      ChangeField(Table1,Table1.FieldbyName('NomDuChamp'),CR);
      Table1.Close;  
    end;
    Si quelqu'un t'a offensé, ne cherche pas à te venger; assieds-toi au bord de la rivière et, bientôt, tu verras passer son cadavre.

    Lao Tseu - un sage chinois

    Celui qui lutte contre les monstres doit veiller à ne pas le devenir lui-même.
    Et quand ton regard pénètre longtemps au fond d'un abîme, l'abîme, lui aussi, pénètre en toi.

    Friedrich Nietzsche - Par délà le bien et le mal

  3. #3
    Membre éprouvé Avatar de b_reda31
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2007
    Messages
    899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2007
    Messages : 899
    Points : 961
    Points
    961
    Par défaut
    waaaw!tout ce code !! ça fait peur
    Mais je crois avoir compris le principe,
    Merci à vous Freud.
    « Il est assez difficile de trouver une erreur dans son code quand on la cherche. C’est encore bien plus dur quand on est convaincu que le code est juste!!»

  4. #4
    Membre éclairé Avatar de freud
    Homme Profil pro
    Développeur
    Inscrit en
    Mai 2002
    Messages
    1 271
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 271
    Points : 681
    Points
    681
    Par défaut
    de rien

    Mais je corrige une chose.... j'ai dis :
    Ensuite pour convertir lAutoInc en Integer (dans le click d'un bouton par exemple) :
    En fait je voulais dire pour faire les deux opérations AutoInc -> Integer et rétablissement du type du champ de l' Integer -> AutoInc dans le même code.
    Si quelqu'un t'a offensé, ne cherche pas à te venger; assieds-toi au bord de la rivière et, bientôt, tu verras passer son cadavre.

    Lao Tseu - un sage chinois

    Celui qui lutte contre les monstres doit veiller à ne pas le devenir lui-même.
    Et quand ton regard pénètre longtemps au fond d'un abîme, l'abîme, lui aussi, pénètre en toi.

    Friedrich Nietzsche - Par délà le bien et le mal

  5. #5
    Membre éclairé Avatar de freud
    Homme Profil pro
    Développeur
    Inscrit en
    Mai 2002
    Messages
    1 271
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 271
    Points : 681
    Points
    681
    Par défaut
    Désolé de vous compliquer la chose mais je pense qu'il n y a pas moyen de changer la valeur avec ce code. En voici un autre plus simple pour paradox 7
    que je viens de tester et c'est correct :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
     
    function ResetAutoInc(FileName: TFileName; NewValue:Longint): Boolean; 
    begin 
      with TFileStream.Create(FileName, fmOpenReadWrite) do 
      try 
        Result := (Seek($49, soFromBeginning) = $49) and (Write(NewValue, 4) = 4); 
      finally 
        Free; 
      end; 
    end;
    L'appel :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ResetAutoInc(CheminDeLaTable,0);
    Si quelqu'un t'a offensé, ne cherche pas à te venger; assieds-toi au bord de la rivière et, bientôt, tu verras passer son cadavre.

    Lao Tseu - un sage chinois

    Celui qui lutte contre les monstres doit veiller à ne pas le devenir lui-même.
    Et quand ton regard pénètre longtemps au fond d'un abîme, l'abîme, lui aussi, pénètre en toi.

    Friedrich Nietzsche - Par délà le bien et le mal

  6. #6
    Expert confirmé

    Profil pro
    Leader Technique
    Inscrit en
    Juin 2005
    Messages
    1 756
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Leader Technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 756
    Points : 4 170
    Points
    4 170
    Par défaut
    ... Tapper directement dans le binaire du fichier db c'est osé comme façon de faire.

    J'imagine qu'il faut d'abord s'assurer que la table n'est pas en cours d'utilisation.

    A ne pas mettre entre toutes les mains...

  7. #7
    Membre émérite
    Avatar de ALWEBER
    Homme Profil pro
    Expert Delphi
    Inscrit en
    Mars 2006
    Messages
    1 496
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Expert Delphi

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 496
    Points : 2 762
    Points
    2 762
    Billets dans le blog
    10
    Par défaut
    La réponse de Freud est correcte et ne pose pas de problème particulier. On peut l'inclure au milieu d'un test permettant de savoir si d'autres utilisateurs utilisent cette table
    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
     
    procedure ListeLock (Tbl: TTable; var LockList: TStringList ; NoSession : integer );
    var
      TmpCursor: hdbicur;
      Lock: LOCKDesc;
      rslt: dbiResult;
      st1,st2,st3,st4 : string ;
    begin
      Check(DbiOpenLockList(Tbl.handle, True, True, TmpCursor));
      Check(DbiSetToBegin(TmpCursor));
      LockList.Clear;
      st4 := '' ;
      repeat
        {
        0	Record lock
        4	No table lock
        5	Table read lock
        6	Table write lock
        7	Table opened exclusively
        }
     
        rslt:= DbiGetNextRecord(TmpCursor, dbiNOLOCK, @Lock, nil);
        if (rslt <> DBIERR_EOF)
        and (Lock.szUserName <> fNetUserName ) then begin
          case Lock.iType of
            0 :  st1:= 'Record Write'  ;
            1 :  st1:= 'Record Special Read'  ;
            2 :  st1:= 'Group'  ;
            3 :  st1:= 'Image area'  ;
            4 :  st1:= 'Table Read (No lock)'  ;
            5 :  st1:= 'Table Read lock';
            6 :  st1:= 'Table write' ;
            7 :  st1:= 'Table Exclusive' ;
          else
            st1:= 'Unknown lock n°'+IntToStr(Lock.iType) ;
          end ;
          st2 := '' ;
          if Lock.iRecNum > 0 then
            st2 := ' - Record : ' + IntToStr (Lock.iRecNum) ;
          st3 := StrPas(Lock.szUserName)+'('
                + IntToStr (Lock.iNetSession)+') '+ st1 +' - '
                +st2 ;
          if (NoSession <> Lock.iNetSession)
          and (st4<>st3)then
            LockList.Add(st3) ;
          st4 := st3 ;
        end;
      until (rslt <> DBIERR_NONE);
      Check(DbiCloseCursor(TmpCursor));
    end;
    Le numéro de session est obtenue comme suit (var I1)
    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
     
    procedure ListeLesUtilisateurs (var I1 : integer);
    var
      TmpCursor: hDbiCur;
      rslt: dbiResult;
      UsrDesc: USERDesc;
    begin
      i1 := 0 ;
      if SlUtilisateurs.Count = 0 then
      begin
        Check(DbiOpenUserList(TmpCursor)) ;
        repeat
          rslt:= DbiGetNextRecord(TmpCursor, dbiNOLOCK, @UsrDesc, nil) ;
          if (rslt <> DBIERR_EOF) then begin
            SlUtilisateurs.Add(UsrDesc.szUserName+
            '- NS : ' + IntToStr(UsrDesc.iNetSession)+
            '- PC : ' + IntToStr (UsrDesc.iProductClass));
            if UsrDesc.iNetSession > i1 then
              I1 := UsrDesc.iNetSession ;
          end;
        until (rslt <> DBIERR_NONE);
        check(DbiCloseCursor(TmpCursor));
      end ;
    end;

  8. #8
    Membre éclairé Avatar de freud
    Homme Profil pro
    Développeur
    Inscrit en
    Mai 2002
    Messages
    1 271
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 271
    Points : 681
    Points
    681
    Par défaut
    La réponse de Freud est correcte et ne pose pas de problème particulier
    Merci à vous ALWEBER.
    Avant de poster la 2eme portion de code je l'avais tester plusieurs fois et bien sûr lorsque la table est inactive.
    Quand à la 1ere portion c'est egalement tester et ca fonctionne trés bien.
    Sauf que je l'ai rapidement poster sans réflechir du comment on inserera la valeur du champ puisque la table est vide.
    Tapper directement dans le binaire du fichier db c'est osé comme façon de faire.
    C'est utiliser par beacoup de gens.

    J'imagine qu'il faut d'abord s'assurer que la table n'est pas en cours d'utilisation.
    Bien evidemment et c'est fait par ALWEBER.


    A ne pas mettre entre toutes les mains...
    Je n'ai pas compris cela ......
    Si quelqu'un t'a offensé, ne cherche pas à te venger; assieds-toi au bord de la rivière et, bientôt, tu verras passer son cadavre.

    Lao Tseu - un sage chinois

    Celui qui lutte contre les monstres doit veiller à ne pas le devenir lui-même.
    Et quand ton regard pénètre longtemps au fond d'un abîme, l'abîme, lui aussi, pénètre en toi.

    Friedrich Nietzsche - Par délà le bien et le mal

  9. #9
    Expert confirmé

    Profil pro
    Leader Technique
    Inscrit en
    Juin 2005
    Messages
    1 756
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Leader Technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 756
    Points : 4 170
    Points
    4 170
    Par défaut
    Citation:
    A ne pas mettre entre toutes les mains...
    Je n'ai pas compris cela ......
    Ce que je veux dire par là, c'est qu'une solution qui consiste à modifier directement le fichier binaire de stockage de la table, en cours-circuitant le logiciel propriétaire du fichier (BDE) tient de la bidouille plus que d'une solution propre.

    A grande échelle, ça peut représenter un risque pour le projet.

    Donc quand je dis "A ne pas mettre entre toutes les mains", c'est pour dire qu'il ne faut le faire qu'en connaissance de cause, en mesurant bien les conséquences que peuvent avoir ce genre de pratique.
    Autrement dit, c'est à ne pas utiliser par un débutant.

  10. #10
    Membre éclairé Avatar de freud
    Homme Profil pro
    Développeur
    Inscrit en
    Mai 2002
    Messages
    1 271
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 271
    Points : 681
    Points
    681
    Par défaut
    tient de la bidouille plus que d'une solution propre.
    Si vous avez une solution pas bidouillante et propre ?

    A grande échelle, ça peut représenter un risque pour le projet.
    heu.....oui tout a fait, mais lorsque c'est à grand échelle on a les reflexes de faire des backup au cas oû ca ne marchera pas ?

    L'origine du code est ici :
    http://www.delphi3000.com/articles/article_3686.asp?SK=

    Son auteur, probablement un bidouilleur, l'a tester pour PDX 7
    Pour ma part je l'ai tester et l'ai poster

    et comme :
    c'est à ne pas utiliser par un débutant.
    Et que b_reda31 s'est effrayer :
    waaaw!tout ce code !! ça fait peur Mais je crois avoir compris le principe,
    Et comme le code de ALWEBER est super riche, c'est ce qu'il faut d'ailleurs, alors un simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    If Table1.State=dsInactive Then ResetAutoInc(CheminDeLaTable,0);
    Alors cela tranquillisera b_reda31
    Si quelqu'un t'a offensé, ne cherche pas à te venger; assieds-toi au bord de la rivière et, bientôt, tu verras passer son cadavre.

    Lao Tseu - un sage chinois

    Celui qui lutte contre les monstres doit veiller à ne pas le devenir lui-même.
    Et quand ton regard pénètre longtemps au fond d'un abîme, l'abîme, lui aussi, pénètre en toi.

    Friedrich Nietzsche - Par délà le bien et le mal

  11. #11
    Membre éprouvé Avatar de b_reda31
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2007
    Messages
    899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2007
    Messages : 899
    Points : 961
    Points
    961
    Par défaut
    Tout d'abord je me suis bien marré en lisant votre débat Est ce du bidouillage ou non? Freud a bien riposté avec son dernier post hein ?

    Je pense que la solution que vous m'avez proposé Freud est d'un niveau relativement bas de programmation et pour cela il faudrait bien maitriser la structure du fichier DB,Or ce n'est pas mon cas !


    A l'origine en créant ce post je pensais qu'il etait possible de remédier au problème juste en modifiant une propriété de la table...c'est loin d'être le cas apparement

    L'application que je réalise est pour une société,et ça concerne la gestion du stock,les bdd sont d'ordre de Méga octet!Je vous remércie infiniement pour la solution que vous m'avez proposé Freud mais je pense qu'avant de bien maitriser et comprendre votre code,je vais plutot utiliser des champs de type Numérique et de simuler une auto-incrémentation ou décrémentation (car l'utilisation d'un champs de type IncAuto ne m'est pas primordial)
    Merci encore à vous tous.
    « Il est assez difficile de trouver une erreur dans son code quand on la cherche. C’est encore bien plus dur quand on est convaincu que le code est juste!!»

  12. #12
    Membre éclairé Avatar de freud
    Homme Profil pro
    Développeur
    Inscrit en
    Mai 2002
    Messages
    1 271
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 271
    Points : 681
    Points
    681
    Par défaut
    je vais plutot utiliser des champs de type Numérique et de simuler une auto-incrémentation ou décrémentation
    Ainsi c'est mieux vous manipulerais votre champ comme vous voudrez.

    Bon développement
    Si quelqu'un t'a offensé, ne cherche pas à te venger; assieds-toi au bord de la rivière et, bientôt, tu verras passer son cadavre.

    Lao Tseu - un sage chinois

    Celui qui lutte contre les monstres doit veiller à ne pas le devenir lui-même.
    Et quand ton regard pénètre longtemps au fond d'un abîme, l'abîme, lui aussi, pénètre en toi.

    Friedrich Nietzsche - Par délà le bien et le mal

  13. #13
    Membre éclairé Avatar de freud
    Homme Profil pro
    Développeur
    Inscrit en
    Mai 2002
    Messages
    1 271
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 271
    Points : 681
    Points
    681
    Par défaut
    ALWEBER le compilateur donnes des messages d'erreurs pour les deux procedures :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    [Error] Unit1.pas(43): Undeclared identifier: 'fNetUserName'
    [Error] Unit1.pas(77): Undeclared identifier: 'SlUtilisateurs'

    Pour SlUtilisateurs je suppose que c'est une TStringList que l'on passe en paramètre ?

    Probablement un oubli quelque part dans les codes ?
    Si quelqu'un t'a offensé, ne cherche pas à te venger; assieds-toi au bord de la rivière et, bientôt, tu verras passer son cadavre.

    Lao Tseu - un sage chinois

    Celui qui lutte contre les monstres doit veiller à ne pas le devenir lui-même.
    Et quand ton regard pénètre longtemps au fond d'un abîme, l'abîme, lui aussi, pénètre en toi.

    Friedrich Nietzsche - Par délà le bien et le mal

  14. #14
    Membre émérite
    Avatar de ALWEBER
    Homme Profil pro
    Expert Delphi
    Inscrit en
    Mars 2006
    Messages
    1 496
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Expert Delphi

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 496
    Points : 2 762
    Points
    2 762
    Billets dans le blog
    10
    Par défaut
    Réponse à Freud
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    function fNetUserName: String;
    begin
       SetLength(Result, dbiMaxUserNameLen + 1);
       Check(DbiGetNetUserName(PChar(Result)));
       SetLength(Result, StrLen(PChar(Result)));
    end;
    SlUtilisateurs est un TStringList

  15. #15
    Membre éclairé Avatar de freud
    Homme Profil pro
    Développeur
    Inscrit en
    Mai 2002
    Messages
    1 271
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 271
    Points : 681
    Points
    681
    Par défaut
    OK merci
    Si quelqu'un t'a offensé, ne cherche pas à te venger; assieds-toi au bord de la rivière et, bientôt, tu verras passer son cadavre.

    Lao Tseu - un sage chinois

    Celui qui lutte contre les monstres doit veiller à ne pas le devenir lui-même.
    Et quand ton regard pénètre longtemps au fond d'un abîme, l'abîme, lui aussi, pénètre en toi.

    Friedrich Nietzsche - Par délà le bien et le mal

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

Discussions similaires

  1. linq to sql : insérer une valeur précise dans un champ numéro auto
    Par boby62423 dans le forum Accès aux données
    Réponses: 3
    Dernier message: 31/01/2009, 19h53
  2. Réponses: 1
    Dernier message: 23/07/2007, 20h57
  3. Connaître la valeur d'un champ auto incrémenté
    Par soltani1 dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 18/05/2006, 14h55
  4. [CR] valeurs par défaut d'un champ parametre auto
    Par FUNZIE dans le forum SAP Crystal Reports
    Réponses: 1
    Dernier message: 30/03/2005, 14h41
  5. Réinitialiser les valeurs d'un champ de type identify
    Par Oluha dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 19/01/2005, 13h39

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