ATOUTFOX
COMMUNAUTÉ FRANCOPHONE DES PROFESSIONNELS FOXPRO
Visual FoxPro : le développement durable

Forum AtoutFox : Re: indexation UNIQUE   

Sujet

rss Flux RSS des derniers messages

Vous devez vous identifier pour pouvoir poser une question ou répondre.

sam. 10 août 2019, 15h51
BONEMME
atoutfox.public.association

Re: indexation UNIQUE


Françis
Merci
c'est ce que pensais +/-,
Je vais essayer ta démo.
La table en question ne dois pas être éditée sauf par moi.

Je réalise un proto de démo sur base de ce que j'ai déjà réalisé (voirphoto)
Dans cette dernière j'ai 6 choix de recherche qui détermine le critère
Après copie du champs concerné cette table temporaire est indexéeunique,et alimente le grid du dessous. L'utilisateur y effectue sonchoix, et alimente tous les champs dans l'autre vue.
Pour voir la table actuelle (xls) www.chfleron.be onglet: Outils derecherches, chx: Couples

A+
Guy Bonemme


Francis Faure a formulé la demande :
> Bonsoir Guy,
>
> - Si tu veux qu'une colonne contienne que des des valeurs "uniques" : > définir l'index comme "Candidat" au lieu de "Régulier"
>
> - Si tu veux qu'une colonne puisse contenir des valeurs dupliquées mais un> index "UNIQUE" (clause de l'époque), alors tu peux mettre la clause> "unique" dans un autre index...
>
> - Personnellement je n'utilise PAS la clause "unique" en ayant eu trop de> problème provenant des enregistrements supprimés qui du coup rend l'index> "UNIQUE" incomplet... !
>
> Je viens de faire un petit PRG de test pour toi :
>
create table "c:\temp\ajeter" free ("ID" integer autoinc"COLONNE1"char(10), "COLONNE2" char(10)) index on COLONNE1 tag "iColonne1"
index on COLONNE1 tag "uColonne1" unique
local liI as integer
for liI = 1 to 10
if mod(m.liI, 2) == 0
insert into "ajeter" ("COLONNE1""COLONNE2"values ("Papa""Maman")
else
insert into "ajeter" ("COLONNE1""COLONNE2"values ("Maman""Papa")
endif
NEXT
SET ORDER TO "iColonne1"
GO top
BROWSE LAST TITLE "sur index iColonne1"
SET ORDER TO "uColonne1"
GO top
BROWSE LAST TITLE "sur index uColonne1"
* Vérification de l'ancienne clause "unique" dans l'onglet "Index" : ok

MODIFY STRUCTURE

>
> Donc j'obtiens un CDX contenant 2 index sur même champ dont l'un avec la> clause "Unique" ...
>
> Mais attention :
> par exemple après la boucle de remplissage si tu supprime le premier> enregistrement.... , en ajoutant :
>
DELETE FROM "ajeter" WHERE ID=1

>
> Alors cela ne fonctionne plus... correctement pour l'index "UNIQUE"
>
> Certains diront que : "c'est normal" car il faut créer l'index comme ceci :
>
index on COLONNE1 tag "uColonne1" FOR !DELETED() unique

>
> au lieu de
>
index on COLONNE1 tag "uColonne1" unique

>
> oui.... et bien faire le test... et le résultat sera le même....
>
> Cela donnerait le test final suivant qui révèle bien le problème :
>
create table "c:\temp\ajeter" free ("ID" integer autoinc"COLONNE1"char(10), "COLONNE2" char(10)) index on COLONNE1 tag "iColonne1"
index on COLONNE1 tag "uColonne1" for !deleted()unique
local liI as integer
for liI = 1 to 10
if mod(m.liI, 2) == 0
insert into "ajeter" ("COLONNE1""COLONNE2"values ("Papa""Maman")
else
insert into "ajeter" ("COLONNE1""COLONNE2"values ("Maman""Papa")
endif
next
delete from "ajeter" where id=1
set order to "iColonne1"
go top
browse last title "sur index iColonne1"
* Dysfonctionnement ici : il manque un enregistrement...

set order to "uColonne1"
go top
browse last title "sur index uColonne1"
* Vérification de l'ancienne clause "unique" dans l'onglet "Index" : ok

modify structure

>
> Maintenant si c'est sur un table qui n'a pas de suppression possible> (Facture par exemple) ou un fichier temporaire : alors ça peut être> "utilisable"...
>
>
> Mais, personnellement, je n'utilise historiquement jamais la clause> "UNIQUE"
>
>
> Cordialement
> Francis
>
>
> Le ven. 09 août 2019, 18h54 BONEMME a écrit :
>> Bonjour à tous
>>>> Est-il possible via le project manager et une table libre 5 champs
>> ayant deux index(cdx)sur: champ1 et champ2
>> et d'y ajouter 2 index supplémentaires sur les mêmes champs mais
>> UNIQUE.
>> ou dois je passer par une indexation IDX manuelle?
>>>> Alternative
>> passer par des tables temporaires
>> SET UNIQUE ON
>> (copy champ1 to temp1, idem pour champ2 TO temp2 )
>> use temp1
>>>> Merci de confirmer
>>>> Guy Bonemme

--Guy Bonemme

---
Cet email a fait l'objet d'une analyse antivirus par AVG.
http://www.avg.com

Permalink : http://www.atoutfox.org/nntp.asp?ID=0000019438
20 088 messages dans le forum • Liste complète des messages

Publicité

Les pubs en cours :


www.atoutfox.org - Site de la Communauté Francophone des Professionnels FoxPro - v3.4.0 - © 2004-2024.
Cette page est générée par un composant COM+ développé en Visual FoxPro 9.0-SP2-HF3