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 :

ClientDataSet détection d'une clé primaire


Sujet :

Bases de données Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté
    Avatar de XeGregory
    Homme Profil pro
    Passionné par la programmation
    Inscrit en
    Janvier 2017
    Messages
    505
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Passionné par la programmation
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Janvier 2017
    Messages : 505
    Par défaut ClientDataSet détection d'une clé primaire
    Bonjour,

    Est-il possible de savoir si un champ contient une clé primaire ?

    Nom : Capture.PNG
Affichages : 706
Taille : 43,7 Ko

    Xml :
    https://sourceforge.net/p/radstudiod...ata/orders.xml

    Dans le Xml il y a un champ nommé "OrderNo" du type "ftFloat", ce champ n'est pas en lecture seule et non auto incrémenté.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <FIELD attrname="OrderNo" fieldtype="r8"/>
    Quand on ajoute un nouvel enregistrement, si le champ "OrderNo" est vide le dataset réagir comme si le champ été du type "ftAutoInc", si le champ est dupliqué un message d'erreur apparait (Violation de clé).

    Merci.

  2. #2
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 089
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    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 : 14 089
    Par défaut
    Suffit d'ouvrir les yeux
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    		<PARAMS DEFAULT_ORDER="1" PRIMARY_KEY="1" LCID="1033"/>

    le premier champ c'est OrderNo

    Si tu veux le supprimer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DataSet.IndexDefs.Clear();
    Evidemment IndexDefs permet aussi de lister les index présents
    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

  3. #3
    Membre expérimenté
    Avatar de XeGregory
    Homme Profil pro
    Passionné par la programmation
    Inscrit en
    Janvier 2017
    Messages
    505
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Passionné par la programmation
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Janvier 2017
    Messages : 505
    Par défaut
    Citation Envoyé par ShaiLeTroll Voir le message
    Suffit d'ouvrir les yeux
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    		<PARAMS DEFAULT_ORDER="1" PRIMARY_KEY="1" LCID="1033"/>

    le premier champ c'est OrderNo

    Si tu veux le supprimer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DataSet.IndexDefs.Clear();
    Bonjour ShaiLeTroll

    j’avais déjà essayé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      ClientDataSet.FileName := 'orders.xml';
      ClientDataSet.Open;
      ClientDataSet.IndexDefs.Clear;
    end;
    En vain, j'ai toujours cette maudite clé primaire.

  4. #4
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 089
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    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 : 14 089
    Par défaut
    Je joue plus avec des Index normaux, juste pour trier le DataSet dans un sens ou un autre, et contrairement à toi, j'aurais plutôt tendance à ajouter une clé Primaire qu'à la retirer

    Au lieu de contourner la clé primaire, il faut l'exploiter
    C'est un cas particulier ce 'DEFAULT_ORDER', contrairement à un index utilisateur, il n'est pas présent dans IndexDefs


    Manipulation des données avec un ensemble de données client > Tri et indexation

    Si un ensemble de données client représente les données d'un serveur ou utilise un fournisseur externe, il hérite d'un index et d'un ordre de tri par défaut, basés sur les données qu'il reçoit. L'index par défaut s'appelle DEFAULT_ORDER. Il est possible d'utiliser ce classement, mais il est impossible de modifier ou de supprimer l'index.

    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
    procedure TZooXXXXVCLControlExperimentForm.Button3Click(Sender: TObject);
    var
      I: Integer;
    begin
      ClientDataSet1.LoadFromFile('orders.xml');
      ClientDataSet1.IndexName := 'DEFAULT_ORDER';
      ClientDataSet1.Last();
     
     
      for I := ClientDataSet1.FieldByName('OrderNo').AsInteger + 1 to ClientDataSet1.FieldByName('OrderNo').AsInteger + 10 do
      begin
        ClientDataSet1.Append();
        ClientDataSet1.FieldByName('OrderNo').AsInteger := I;
        ClientDataSet1.FieldByName('CustNo').AsInteger := i;
        ClientDataSet1.FieldByName('EmpNo').AsInteger := i * 10;
        ClientDataSet1.Post();
      end;
    end;
    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

  5. #5
    Membre expérimenté
    Avatar de XeGregory
    Homme Profil pro
    Passionné par la programmation
    Inscrit en
    Janvier 2017
    Messages
    505
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Passionné par la programmation
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Janvier 2017
    Messages : 505
    Par défaut
    C'est un cas particulier ce 'DEFAULT_ORDER', contrairement à un index utilisateur, il n'est pas présent dans IndexDefs
    J'y vois un peu plus clair maintenant, donc rien ne peut m'indiquer que le champ contient une clé primaire

    Coté ClientDataSet, on ne peut pas modifier ou récupérer les paramètres ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <PARAMS DEFAULT_ORDER="1" PRIMARY_KEY="1" LCID="1033"/>
    Merci

  6. #6
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 635
    Billets dans le blog
    65
    Par défaut
    Citation Envoyé par XeGregory Voir le message
    Coté ClientDataSet, on ne peut pas modifier
    il suffit de virer le code du fichier XML avant de l'ouvrir
    et ... plus d'index

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

Discussions similaires

  1. insertion d'une clé primaire avec un "d" apostroph
    Par imer5 dans le forum PostgreSQL
    Réponses: 5
    Dernier message: 18/05/2005, 14h51
  2. [EJB2.1 Entity] [CMP] Modifier un champ d'une clé primaire
    Par Medo_free dans le forum Java EE
    Réponses: 4
    Dernier message: 14/03/2005, 18h04
  3. Comment comment définir une clef primaire dans une table??
    Par nek_kro_kvlt dans le forum Bases de données
    Réponses: 4
    Dernier message: 07/02/2005, 21h06
  4. Retirer une clé primaire par code
    Par Arrown dans le forum Bases de données
    Réponses: 3
    Dernier message: 28/07/2004, 15h15
  5. [IB6][BCB5]Constituer une clé primaire !!??
    Par Sitting Bull dans le forum SQL
    Réponses: 6
    Dernier message: 23/06/2004, 16h49

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