In response to what do you mean by “duplicate"

Here are two scenarios I am facing:
1. In upgrading a database from 15 to 19, I got an error message saying that 
there were duplicates in one of my indexed fields.
I tried locating said duplicates, but doing so manually proved fruitless.
I would like a method that would search that field to see if there are indeed 
duplicates.
If duplicates are found, I would like them to appear in a list.

2. I inherited a lot of CDs from a late friend and I know many of them are 
duplicates of what I have in my collection.
I would like the ability to specific a field on which to search for duplicates.
I would like to search by the title of the CD. Other times I would like to be 
able to search by the manufacturer's catalogue number. ie. I want to be able to 
be able to specify (in the method is ok) the field(s) on which to do the search 
for duplicates.

I hope this makes sense.

Thanks.
 
> On Mar 17, 2022, at 15:00, [email protected] 
> <[email protected]> wrote:
> 
> Send 4D_Tech mailing list submissions to
>       [email protected]
> 
> To subscribe or unsubscribe via the World Wide Web, visit
>       https://lists.4d.com/mailman/listinfo/4d_tech
> or, via email, send a message with subject or body 'help' to
>       [email protected]
> 
> You can reach the person managing the list at
>       [email protected]
> 
> When replying, please edit your Subject line so it is more specific
> than "Re: Contents of 4D_Tech digest..."
> 
> 
> Today's Topics:
> 
>   1. Re: [SPAM]  Image from print form (Keisuke Miyako)
>   2. Finding duplicates (Stephane Potvin)
>   3. Re: Finding duplicates (Keisuke Miyako)
>   4. AW: Finding duplicates ([email protected])
> 
> 
> ----------------------------------------------------------------------
> 
> Message: 1
> Date: Thu, 17 Mar 2022 01:52:51 +0000
> From: Keisuke Miyako <[email protected]>
> To: 4D iNug Technical <[email protected]>
> Subject: Re: [SPAM]  Image from print form
> Message-ID: <[email protected]>
> Content-Type: text/plain; charset="us-ascii"
> 
> this command was added in v12.2
> 
> https://doc.4d.com/4Dv19R3/4D/19-R3/FORM-SCREENSHOT.301-5583051.en.html
> 
> but you must take into account that a screenshot is for displaying on screen.
> your listbox, text, shape primitives with all show as bitmap with low 
> resolution.
> 
> I use 4D V16 on windows.
> 
> I need to create an image from a 4d form that contains titles and more
> than one list box.
> 
> Instead, of creating a pdf document, I need to create an image.
> 
> 
> 
> ------------------------------
> 
> Message: 2
> Date: Wed, 16 Mar 2022 22:24:56 -0400
> From: Stephane Potvin <[email protected]>
> To: [email protected]
> Subject: Finding duplicates
> Message-ID: <[email protected]>
> Content-Type: text/plain;     charset=us-ascii
> 
> Hello,
> 
> I am looking for a simple a method to find duplicates.
> 
> A method that would show only the duplicates if they exist or return a 
> message if there are no such duplicates.
> 
> I already looked in the 4D doc but found nothing that wakers the way I want.
> 
> Thank you,
> 
> Stephane
> 
> ------------------------------
> 
> Message: 3
> Date: Thu, 17 Mar 2022 02:51:15 +0000
> From: Keisuke Miyako <[email protected]>
> To: 4D iNug Technical <[email protected]>
> Subject: Re: Finding duplicates
> Message-ID: <[email protected]>
> Content-Type: text/plain; charset="us-ascii"
> 
> I think you need to be more specific:
> 
> what do you mean by "duplicate"
> what do you mean by "work the way I want"
> 
> I am looking for a simple a method to find duplicates.
> A method that would show only the duplicates if they exist or return a 
> message if there are no such duplicates.
> I already looked in the 4D doc but found nothing that wakers the way I want.
> 
> 
> ------------------------------
> 
> Message: 4
> Date: Thu, 17 Mar 2022 08:40:13 +0100
> From: <[email protected]>
> To: "'4D iNug Technical'" <[email protected]>
> Cc: "'Stephane Potvin'" <[email protected]>
> Subject: AW: Finding duplicates
> Message-ID: <[email protected]>
> Content-Type: text/plain;     charset="utf-8"
> 
> Hi Stephane,
> 
> Not sure if this is what you are looking for but I have this (old) method. It 
> works on the current selection.
> 
> One could try to adapt the idea to ORDA but ORDA does not (yet?) return the 
> count of each value when doing a .distinct()
> 
> https://doc.4d.com/4Dv19/4D/19.1/entitySelectiondistinct.305-5652725.en.html
> 
> But with ORDA we could anyway rethink the problem and maybe find more elegant 
> solutions.
> 
> Best,
> 
> Olivier
> 
>  // Uty_FindDuplicateRecords(->ap2_Fields;{->bDuplicatesFound})
>  // ----------------------------------------------------
>  // User name (OS): Olivier
>  // Date and time: 12.03.14, 10:56:16
>  // ----------------------------------------------------
>  // Method: Uty_FindDuplicateRecords
>  // Description
>  // Finds duplicate records based on the current selection and on the fields 
> passed,
>  // e.g. more than one record with same [table]firstName AND same 
> [table]familyName AND same [table]city
>  //
>  // Parameters:
>  // $1, pointer to array containing pointers to fields (of one table)
>  // $2, pointer to boolean variable to set to true if duplicates found - 
> optional parameter
>  // ----------------------------------------------------
> 
> C_POINTER($1;$p2ap2Fields;$p2Field;$p2Table;$p2ArrayDistinct;$p2bDuplicatesFound)
> C_LONGINT($lWhere;$lCountFields;$lFields;$lType;$lRecordsFound;$i;$n;$lHowMany)
> C_TEXT($tCurrentSelection;$tSetFound;$tSetAll)
> C_BOOLEAN($bDone)
> 
> ARRAY LONGINT($al_FieldType;0)
> APPEND TO ARRAY($al_FieldType;Is alpha field)
> APPEND TO ARRAY($al_FieldType;Is text)
> APPEND TO ARRAY($al_FieldType;Is real)
> APPEND TO ARRAY($al_FieldType;Is longint)
> APPEND TO ARRAY($al_FieldType;Is integer)
> APPEND TO ARRAY($al_FieldType;Is date)
>  //APPEND TO ARRAY($al_FieldType;Is time) // Query with array with time array 
> crashes (4D 16.5)
> APPEND TO ARRAY($al_FieldType;Is boolean)
> 
> $p2ap2Fields:=$1
> 
> If (Count parameters>=2)
> 
> C_POINTER($2)
> 
> $p2bDuplicatesFound:=$2
> 
> $p2bDuplicatesFound->:=False
> 
> End if 
> 
> $lFields:=Size of array($p2ap2Fields->)
> 
> For ($lCountFields;$lFields;1;-1)
> 
> $p2Field:=$p2ap2Fields->{$lCountFields}
> 
> $lType:=Type($p2Field->)
> 
> $lWhere:=Find in array($al_FieldType;$lType)
> 
> If ($lWhere=-1)
> 
> DELETE FROM ARRAY($p2ap2Fields->;$lCountFields)
> 
> End if 
> 
> End for 
> 
> $lFields:=Size of array($p2ap2Fields->)
> 
> If ($lFields>0)
> 
> $p2Field:=$p2ap2Fields->{1}
> 
> $p2Table:=Table(Table($p2Field))
> 
> $lRecordsFound:=Records in selection($p2Table->)
> 
> End if 
> 
> If ($lRecordsFound>0)
> 
> $tCurrentSelection:=Generate UUID
> 
> COPY NAMED SELECTION($p2Table->;$tCurrentSelection)
> 
> ARRAY TEXT($at_DistinctText;0)
> ARRAY TEXT($at_DistinctText;0)
> ARRAY REAL($ar_DistinctReal;0)
> ARRAY LONGINT($al_DistinctLongint;0)
> ARRAY INTEGER($ai_DistinctInteger;0)
> ARRAY DATE($ad_DistinctDate;0)
>  //ARRAY TIME($ah_DistinctTime;0)
> ARRAY BOOLEAN($ab_DistinctBoolean;0)
> 
> ARRAY POINTER($ap2_Arrays;0)
> APPEND TO ARRAY($ap2_Arrays;->$at_DistinctText)
> APPEND TO ARRAY($ap2_Arrays;->$at_DistinctText)
> APPEND TO ARRAY($ap2_Arrays;->$ar_DistinctReal)
> APPEND TO ARRAY($ap2_Arrays;->$al_DistinctLongint)
> APPEND TO ARRAY($ap2_Arrays;->$ai_DistinctInteger)
> APPEND TO ARRAY($ap2_Arrays;->$ad_DistinctDate)
>  //APPEND TO ARRAY($ap2_Arrays;->$ah_DistinctTime)
> APPEND TO ARRAY($ap2_Arrays;->$ab_DistinctBoolean)
> 
> ARRAY LONGINT($al_DistinctLongint;0)
> 
> Repeat 
> 
> For ($lCountFields;1;$lFields)
> 
> $p2Field:=$p2ap2Fields->{$lCountFields}
> 
> $lType:=Type($p2Field->)
> 
> $lWhere:=Find in array($al_FieldType;$lType)
> 
> If ($lWhere#-1)
> 
> $p2ArrayDistinct:=$ap2_Arrays{$lWhere}
> 
>  //%W-518.10
> 
> DISTINCT VALUES($p2Field->;$p2ArrayDistinct->;$al_Occurences)
> 
>  //%W+518.10
> 
> SORT ARRAY($al_Occurences;$p2ArrayDistinct->;<)  // "<" to sort in descending 
> order
> 
> $n:=Size of array($al_Occurences)
> 
> For ($i;$n;1;-1)
> 
> If ($al_Occurences{$i}=1)
> 
> DELETE FROM ARRAY($al_Occurences;$i)
> DELETE FROM ARRAY($p2ArrayDistinct->;$i)
> 
> Else 
> 
> $i:=-1
> 
> End if 
> 
> End for 
> 
> If (Size of array($al_Occurences)>0)
> 
> QUERY SELECTION WITH ARRAY($p2Field->;$p2ArrayDistinct->)
> 
> CLEAR VARIABLE($p2ArrayDistinct->)
> 
> End if 
> 
> End if 
> 
> End for 
> 
> $bDone:=(Records in selection($p2Table->)=($lRecordsFound))
> 
> If (Not($bDone))
> 
> $lRecordsFound:=Records in selection($p2Table->)
> 
> End if 
> 
> Until ($bDone)
> 
> If ($lCountFields>1)
> 
> ARRAY LONGINT($al_Positions;0)
> 
> SET QUERY DESTINATION(Into variable;$lHowMany)
> 
> SET QUERY LIMIT(2)
> 
> For ($i;1;$lRecordsFound)
> 
> GOTO SELECTED RECORD($p2Table->;$i)
> 
> For ($lCountFields;1;$lFields)
> 
> $p2Field:=$p2ap2Fields->{$lCountFields}
> 
> If ($lCountFields=1)
> 
> QUERY($p2Table->;$p2Field->=$p2Field->;*)
> 
> Else 
> 
> QUERY($p2Table->; & ;$p2Field->=$p2Field->;*)
> 
> End if 
> 
> If ($lCountFields=$lFields)
> 
> QUERY($p2Table->)
> 
> End if 
> 
> End for 
> 
> If ($lHowMany>1)
> 
> APPEND TO ARRAY($al_Positions;$i)
> 
> End if 
> 
> End for 
> 
> SET QUERY LIMIT(0)
> 
> $tSetFound:=Generate UUID
> $tSetAll:=Generate UUID
> 
> CREATE EMPTY SET($p2Table->;$tSetFound)
> CREATE EMPTY SET($p2Table->;$tSetAll)
> 
> SET QUERY DESTINATION(Into set;$tSetFound)
> 
> $lHowMany:=Size of array($al_Positions)
> 
> For ($i;1;$lHowMany)
> 
> GOTO SELECTED RECORD($p2Table->;$al_Positions{$i})
> 
> If (Not(Is in set($tSetAll)))
> 
> For ($lCountFields;1;$lFields)
> 
> $p2Field:=$p2ap2Fields->{$lCountFields}
> 
> If ($lCountFields=1)
> 
> QUERY($p2Table->;$p2Field->=$p2Field->;*)
> 
> Else 
> 
> QUERY($p2Table->; & ;$p2Field->=$p2Field->;*)
> 
> End if 
> 
> If ($lCountFields=$lFields)
> 
> QUERY($p2Table->)
> 
> End if 
> 
> End for 
> 
> If (Records in set($tSetFound)>1)
> 
> UNION($tSetAll;$tSetFound;$tSetAll)
> 
> End if 
> 
> End if 
> 
> End for 
> 
> SET QUERY DESTINATION(Into current selection)
> 
> If (Records in set($tSetAll)>0)
> 
> USE SET($tSetAll)
> 
> If (Not(Is nil pointer($p2bDuplicatesFound)))
> 
> $p2bDuplicatesFound->:=True
> 
> End if 
> 
> Else 
> 
> USE NAMED SELECTION($tCurrentSelection)
> 
> End if 
> 
> CLEAR SET($tSetAll)
> CLEAR SET($tSetFound)
> 
> Else 
> 
> If (Not(Is nil pointer($p2bDuplicatesFound)))
> 
> $p2bDuplicatesFound->:=True
> 
> End if 
> 
> End if 
> 
> CLEAR NAMED SELECTION($tCurrentSelection)
> 
> End if 
> 
>  // end of method
> 
> -----Ursprüngliche Nachricht-----
> Von: 4D_Tech <[email protected]> Im Auftrag von Stephane Potvin 
> via 4D_Tech
> Gesendet: Donnerstag, 17. März 2022 03:25
> An: [email protected]
> Cc: Stephane Potvin <[email protected]>
> Betreff: Finding duplicates
> 
> Hello,
> 
> I am looking for a simple a method to find duplicates.
> 
> A method that would show only the duplicates if they exist or return a 
> message if there are no such duplicates.
> 
> I already looked in the 4D doc but found nothing that wakers the way I want.
> 
> Thank you,
> 
> Stephane
> **********************************************************************
> 4D Internet Users Group (4D iNUG)
> New Forum: https://discuss.4D.com
> Archive:  http://lists.4d.com/archives.html
> Options: https://lists.4d.com/mailman/options/4d_tech
> Unsub:  mailto:[email protected]
> **********************************************************************
> 
> 
> 
> ------------------------------
> 
> Subject: Digest Footer
> 
> **********************************************************************
> 4D Internet Users Group (4D iNUG)
> New Forum: https://discuss.4D.com
> Archive:  http://lists.4d.com/archives.html
> Options: https://lists.4d.com/mailman/options/4d_tech
> Unsub:  mailto:[email protected]
> **********************************************************************
> 
> ------------------------------
> 
> End of 4D_Tech Digest, Vol 178, Issue 4
> ***************************************

**********************************************************************
4D Internet Users Group (4D iNUG)
New Forum: https://discuss.4D.com
Archive:  http://lists.4d.com/archives.html
Options: https://lists.4d.com/mailman/options/4d_tech
Unsub:  mailto:[email protected]
**********************************************************************

Reply via email to