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 :

Traiter unicité des données dans une base SqLite


Sujet :

Bases de données Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Dev informatique retraité
    Inscrit en
    Août 2005
    Messages
    228
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev informatique retraité
    Secteur : Santé

    Informations forums :
    Inscription : Août 2005
    Messages : 228
    Par défaut Traiter unicité des données dans une base SqLite
    Bonjour à tous

    Je souhaiterais traiter l'Unicité lors de la saisie de données et obtenir un message qui me l'indique.
    Voici l'exemple de creation de ma 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
    CREATE TABLE DetailsCpt (
      IdDetails INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
      IdCpt INTEGER NULL,
      IdBudget INTEGER  NULL,
      DateEnregistre DATE NOT NULL,
      Types VARCHAR(50) NOT NULL,
      NumChq VARCHAR(7) NULL,
      Tiers VARCHAR(80) NOT NULL,
      Categories VARCHAR(50) NOT NULL,
      SousCategories VARCHAR(50)  NULL,
      Debit NUMERIC(7,2) NULL DEFAULT 0,
      Credit NUMERIC(7,2) NULL DEFAULT 0,
      Pointeur VARCHAR(3) NULL,
      CONSTRAINT Comptes_DetailsCpt FOREIGN KEY (IdCpt) REFERENCES Comptes (IdCpt) ON DELETE RESTRICT ON UPDATE RESTRICT
    Je pensais ajouter ceci, pour éviter de saisir 2 fois la même ligne de ma table:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Alter DetailsCpt
    UNIQUE(DateEnregistre,Types,Tiers,Categories,Debit,Credit);
    N'y aurait pas d'autres solutions pour résoudre ce problème ou bien est-ce la plus facile à mettre en place ?

    Je travaille sous Delphi Alexandria 11.2.1
    Par avance Merci de vos réponses

  2. #2
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 658
    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 658
    Billets dans le blog
    65
    Par défaut
    Bonjour,

    d'un point de vue SYSDBA commencez par créer des tables Types, Tiers et Categories avec des clé uniques

    un squelette
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    CREATE TABLE Types (
      IdUnique INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
      IdTypes INTEGER NULL,
      Types VARCHAR(50) NOT NULL)
    en ajoutant un Index unique sur IdTypes
    Remplacez DetailsCpt.Types VARCHAR(50) NOT NULL par idType integer not null;
    Puis créez une relation (FOREIGN KEY) entre le DetailsCpt.Idtype et Types(IDTypes)
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    CONTRAINT type_ecriture FOREIGN KEY (idtypes)  REFERENCES TYPES (idTypes) ON DELETE NO ACTION
                                                                             ON UPDATE CASCADE
    idem pour les 2 autres tables

    Ensuite, je ne suis pas trop pour deux colonnes pour les montants Débit et Crédit, j'opterai plus pour un sens (D/C) et un montant

    Après, un index unique
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    CREATE UNIQUE INDEX Ecriture ON DetailsCpt ( DateEnregistre,idType,idTiers,idCatégorie,Sens,Montant)
    oui c'est concevable

  3. #3
    Membre éclairé
    Homme Profil pro
    Dev informatique retraité
    Inscrit en
    Août 2005
    Messages
    228
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev informatique retraité
    Secteur : Santé

    Informations forums :
    Inscription : Août 2005
    Messages : 228
    Par défaut
    Merci Serge pour ta réponse

    En effet je referai maintenant la même base je changerai beaucoup de choses et notamment plus de tables comme tu le propose.
    mais c'est sur une application un peu ancienne qui fonctionne bien et.....
    Donc je vais essayer cela: ajouter une contrainte d'unicité
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CONSTRAINT "Comptes_DetailsCpt" UNIQUE("DateEnregistre","Types","NumChq","Tiers","Categories","Debit","Credit"),
    Je fais des essais et je rends compte

  4. #4
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 658
    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 658
    Billets dans le blog
    65
    Par défaut
    Je suis peut-être allé trop loin avec la suggestion de la table Tiers mais je maintiens pour le reste
    mais c'est sur une application un peu ancienne qui fonctionne bien et.....
    bien sûr, mais une migration pas à pas est toujours possible (j'en fais régulièrement)

  5. #5
    Expert éminent
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Par défaut
    Citation Envoyé par gegila Voir le message
    Merci Serge pour ta réponse

    En effet je referai maintenant la même base je changerai beaucoup de choses et notamment plus de tables comme tu le propose.
    mais c'est sur une application un peu ancienne qui fonctionne bien et.....
    Donc je vais essayer cela: ajouter une contrainte d'unicité
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CONSTRAINT "Comptes_DetailsCpt" UNIQUE("DateEnregistre","Types","NumChq","Tiers","Categories","Debit","Credit"),
    Je fais des essais et je rends compte
    dans ce cas tu vas "forcément" tomber sur des bases existantes qui possèdent des doublons...donc si tu veux appliquer cette mise à jour ça ne fonctionnera que sur de nouvelles installation...ou alors il faudra gérer les doubles avant.
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  6. #6
    Membre éclairé
    Homme Profil pro
    Dev informatique retraité
    Inscrit en
    Août 2005
    Messages
    228
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev informatique retraité
    Secteur : Santé

    Informations forums :
    Inscription : Août 2005
    Messages : 228
    Par défaut
    Merci Paul

    Je pensais dans ce cas utiliser la commande DISTINC pour supprimer les Doubles !
    par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT DISTINCT
     DateEnregistre,
     Types,
    etc..
     
    FROM DetailsComptes
     
    ORDER BY DateEnregistre;

  7. #7
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 493
    Par défaut
    salut

    donc avec ta solution il est impossible de faire un avoir et une refacture de meme montant juste pour
    changer ton echeance
    hum je ne suis pas certain que tes choix soit judicieux
    si j'ai bien compris c'est un logiciel de comptat et il y a une specificité
    sur ce genre de logiciel c'est que toute intervention doit etre inscrit

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

Discussions similaires

  1. Ajouter des données dans une base de données SQLite
    Par Pikkoro359 dans le forum Android
    Réponses: 10
    Dernier message: 03/05/2017, 19h17
  2. Réponses: 10
    Dernier message: 23/02/2016, 10h59
  3. Enregistrer des données dans une base de donnée
    Par fabienlege dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 18/04/2007, 16h34
  4. [VB6]problème d'insertion des donneés dans une base d'Access2003
    Par lanbok dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 27/05/2006, 12h17
  5. [MySQL] Modifier des données dans une base de donnée
    Par leloup84 dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 26/01/2006, 09h56

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