Je vais essayer ta démo.
La table en question ne dois pas être éditée sauf par moi.
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
> 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
Cet email a fait l'objet d'une analyse antivirus par AVG.