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

Forum AtoutFox : Re: indexation UNIQUE2   

Sujet

rss Flux RSS des derniers messages

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

sam. 10 août 2019, 18h59
BONEMME
atoutfox.public.association

Re: indexation UNIQUE2

Francis Faure avait écrit le 09/08/2019 :
> 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

Françis

PRG test
Parfait en coupant la première (CREATE..) avant la création des index
Mon erreur était la position de unique dans le mauvaise colonne.
c'est l'âge...

En reprenant la méthode de fonctionnement avec fichier copie champ1
indexé temp unique décrit dans mon mel précédent, la table contenant le
résultat reste active (lost focus),
cad si un autre choix dans celle-ci avec la souris pointera sur le nv
champ1, cette nouvelle valeur est recherchée et comptée dand la table
indexée normale et l'ensemble complet affichées non pas dans un vue
comme la photo, mais dans un grid.

Je ferais un test en utilisant le champ1 avec ses 2 index (CDX)
sans passer par un dichier temporaire.
A suivre
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=0000019439
19 366 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-2019.
Cette page est générée par un composant COM+ développé en Visual FoxPro 9.0-SP2-HF3