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 :

Numéro d'enregistrement en cours toujours à -1


Sujet :

Bases de données Delphi

  1. #1
    Membre émérite
    Homme Profil pro
    Directeur technique
    Inscrit en
    Mai 2008
    Messages
    2 401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 401
    Points : 2 304
    Points
    2 304
    Par défaut Numéro d'enregistrement en cours toujours à -1
    Salut;

    voilà mon nouveau problème!

    j'arrive pas à obtenir le numéro d'enregistrement en cours avec RecNo. je travail avec Access version 2003. y'a t-il un autre moyen pour l'avoir.

    ce qui j'ai fait correspond à ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Label1.Caption := Format('%d / %d', [Table1.RecNo, Table1.RecordCount])

    Table1.RecordCount
    retourne bien le nombre d'enregistrements
    Table1.RecNo retourne toujours -1

    Merci d'avance.
    Bon courage ou Bonne Chance (selon le contexte)
    Mon blog sur WordPress

  2. #2
    Membre expérimenté
    Avatar de sat83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2004
    Messages
    1 040
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 040
    Points : 1 309
    Points
    1 309
    Par défaut
    Je ne suis pas sûr de ce que j'avance, a vérifier :

    RecNo ne fonctionne pas si la Table est filtrée.
    Ce que l'on apprend par l'effort reste toujours ancré plus longtemps...

  3. #3
    Membre émérite
    Homme Profil pro
    Directeur technique
    Inscrit en
    Mai 2008
    Messages
    2 401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 401
    Points : 2 304
    Points
    2 304
    Par défaut
    Re;

    je ne suis pas en mode filtrage. ce que je peux confirmer par contre c'est qu'avec les tables Paradox j'ai pas ce problème.

    Peut-être une piste du coté API BDE !
    Bon courage ou Bonne Chance (selon le contexte)
    Mon blog sur WordPress

  4. #4
    Membre expérimenté
    Avatar de sat83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2004
    Messages
    1 040
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 040
    Points : 1 309
    Points
    1 309
    Par défaut
    J'avais effectivement déjà lu quelquepart que l'utilisation de RecNo (et d'autres propriété du TTable) ne fonctionnait bien que sous Paradox.

    Pourquoi ne pas ajouter un champ (à numéro unique) à ta table?
    Ce que l'on apprend par l'effort reste toujours ancré plus longtemps...

  5. #5
    Membre émérite
    Homme Profil pro
    Directeur technique
    Inscrit en
    Mai 2008
    Messages
    2 401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 401
    Points : 2 304
    Points
    2 304
    Par défaut
    Re;

    c'est une alternative mais ça demande une maintenance et du travail en plus.
    je suis presque persuadé qu'il existe une fonction API BDE mais....
    Bon courage ou Bonne Chance (selon le contexte)
    Mon blog sur WordPress

  6. #6
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 429
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 429
    Points : 24 794
    Points
    24 794
    Par défaut
    Utiliser ACCESS par BDE déjà, c'est pas naturel, car cela repasse par le driver ODBC, autant utiliser ADO !

    Ensuite, le RecNo fonctionne avec d'autres composant comme TMyDataSet (CoreLab - MyDAC MySQL), mais dans l'implémentation du TTable normalement le RecNo n'est affecté que pour des drivers BDE Natif et non avec les drivers ODBC ...

    Enfin, ajouter un champ auto-inc sur ACCESS je ne connais pas, mais justement c'est la meilleur solution, cela rend les données plus stables, plus facilement accessible surtout avec un RequestLive sur lequel est effectué un Edit\Post ...

    l'API BDE ne prosera rien de plus pour un Driver ODBC !!!
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  7. #7
    Membre émérite
    Homme Profil pro
    Directeur technique
    Inscrit en
    Mai 2008
    Messages
    2 401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 401
    Points : 2 304
    Points
    2 304
    Par défaut
    Re;

    merci pour vos réponses mais simplifions les choses, y a t-il un autre moyen pour avoir l'enregistrement en cours sans recourir à la propriété RecNo?
    tout en sachant que ma base de données est access 2003 et je travaille avec le composant table.
    Bon courage ou Bonne Chance (selon le contexte)
    Mon blog sur WordPress

  8. #8
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 429
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 429
    Points : 24 794
    Points
    24 794
    Par défaut
    Si tu as une clé primaire unique, il faut l'utiliser
    Si tu n'as pas de clé primaire unique, tu dois avoir des problèmes avec les Edit\Post, ... il en faut une !
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  9. #9
    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 RecNo en ADO
    Bonsoir,
    J'ai testé avec ODBC, ça fonctionne parfaitement là le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    procedure TForm1.DBNavigator1Click(Sender: TObject; Button: TNavigateBtn);
    begin
    //label1.Caption:=IntToStr(ADOTable1.RecNo);
    Label1.Caption := Format('%d / %d', [ADOTable1.RecNo, ADOTable1.RecordCount])
    end;

  10. #10
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 429
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 429
    Points : 24 794
    Points
    24 794
    Par défaut
    Merci liazidf, comme je le disais cela dépend énormément de l'implémentation du TDataSet ... et tu l'as montré ADO est fonctionnel !
    Ce n'est pas difficile de passer de l'un à l'autre, ... tout dépend la "gueule" du code ... si Locate\filter\edit, ... plus délicat, mais si tout en SQL, là c'est tranquille !
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  11. #11
    Membre émérite
    Homme Profil pro
    Directeur technique
    Inscrit en
    Mai 2008
    Messages
    2 401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 401
    Points : 2 304
    Points
    2 304
    Par défaut
    Re tout le monde!

    Peut-être que je devrais reformuler ma question autrement !

    1. j'utilise TTable pas ADOTable dont je sais parfaitement que RecNo ne pose pas de problème ;
    2. les routines de MAJ marchent parfaitement, aucun problème au niveau poste, edit ou autre ;
    3. pour des considérations de compatibilités (imposées) j'utilise les composants Table.

    en d'autre terme, avant l'avènement des composants ADO, comment on faisait pour savoir le numéro d'enregistrement courant, en toute simplicité ?

    Donc, sans avoir à définir un champ auto pour lire le contenu qui correspondrait au numéro d'enregistrement courant, avec tout ce que cela pourrait générer de code supplémentaire rien que pour ça.

    Peut-être que je suis plus explicite là !

    Merci encore une autre fois.
    Bon courage ou Bonne Chance (selon le contexte)
    Mon blog sur WordPress

  12. #12
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 429
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 429
    Points : 24 794
    Points
    24 794
    Par défaut
    Le RecNo n'a pas de signification en dehors du contexte du DataSet, il est affecté , il correspond à une position dans le curseur BDE pour Paradox (sur un TTable, c'est suivant l'ordre physique des enregistrements mais pas permanent dans le temps, sur TQuery idem, c'est sur une séquence)
    Il me semble que pour DBBase, le RecNo est exploitable comme assimilé Clé Primaire mais je n'en suis pas sur
    Pour les autres formats cela dépend du driver ...

    Par Exemple, tu as un TTable avec 10 lignes, tu supprimes le RecNo 5, et bien misère, tout ce décale, le RecNo 6 devient le 5, le 7 devient le 6 ... voilà, on voit tout de suite la non-utilisabilité d'un tel identifiant !

    Dans quel cadre tu veux utiliser le RecNo ?

    en d'autre terme, avant l'avènement des composants ADO, comment on faisait pour savoir le numéro d'enregistrement courant, en toute simplicité ?
    Mais on l'utilisait pas ! c'est très simple, j'ai toujours conçu mes tables avec un Auto-Inc (avec Paradox c'était ultra simple), et je fixais une clé primaire unique dessus ... il y a des méthodes lorsque l'on développe un logiciel utilisant de la Base de Données, lorsqu'elle ne sont pas appliqués, et bien on est dans la merde !
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  13. #13
    Membre émérite
    Homme Profil pro
    Directeur technique
    Inscrit en
    Mai 2008
    Messages
    2 401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 401
    Points : 2 304
    Points
    2 304
    Par défaut
    Merci à toute l'équipe et tout spécialement ShaiLeTroll

    La solution de la clé unique est réalisable et le problème de la suppression ne pose pas de problèmes avec les bases de données access si on fait un compactage de la base de données après l'opération de suppression.

    de cette façon mon problème est résolu. mais l'autre question qui s'impose c'est comment utiliser le row du DBGrid comme numéro d'enregistrement courant ? si on arrive à le lire alors pas la peine d'y ajouter un champs à clé unique !
    Bon courage ou Bonne Chance (selon le contexte)
    Mon blog sur WordPress

  14. #14
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 429
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 429
    Points : 24 794
    Points
    24 794
    Par défaut
    La proprité Row du DBGrid n'est pas accessible sans un cast sauvage en TCustomGrid

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    type
     TCustomGridHack = class(TCustomGrid);
     
    procedure TFrmVCLThread.TableThreadVCLAfterScroll(DataSet: TDataSet);
    begin
      StatusBar.Panels[SP_GRIDROW].Text := IntToStr(TCustomGridHack(DBGridTableThread).Row);
    end;
    Et a encore moins de valeur que le RecNo car il indique dans une grille virtuelle la position de la grille et elle varie en fonction de la position dans le DataSet, c'est totalement émulé, la grille ne contient pas la totalité des données mais juste une fenêtre ...
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  15. #15
    Membre émérite
    Homme Profil pro
    Directeur technique
    Inscrit en
    Mai 2008
    Messages
    2 401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 401
    Points : 2 304
    Points
    2 304
    Par défaut
    Re;

    en effet j'ai créé une clé unique mais le problème se pose quand j'ai des filtres alors là c'est vraiment du n'importe quoi.

    une autre piste svp ?
    Bon courage ou Bonne Chance (selon le contexte)
    Mon blog sur WordPress

Discussions similaires

  1. Numéro d'enregistrement en cours
    Par futneguet dans le forum C++Builder
    Réponses: 4
    Dernier message: 17/03/2010, 12h24
  2. Récupérer le numéro de l'enregistrement en cours
    Par devdev dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 14/05/2009, 17h57
  3. numéro de l'enregistrement en cours (access, delphi)
    Par didine3 dans le forum Bases de données
    Réponses: 27
    Dernier message: 23/04/2009, 18h10
  4. Afficher le numéro de l'enregistrement en cour
    Par adrix26 dans le forum Access
    Réponses: 6
    Dernier message: 27/07/2006, 12h24
  5. Réponses: 1
    Dernier message: 16/09/2005, 15h07

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