Level Extreme platform
Subscription
Corporate profile
Products & Services
Support
Legal
Français
How to re-sequence all the records in a table
Message
From
08/10/1997 14:18:28
Shihchau Tai
Apic Systems Pte Ltd
Singapore, Singapore
 
 
To
07/10/1997 12:21:40
General information
Forum:
Visual FoxPro
Category:
Coding, syntax & commands
Miscellaneous
Thread ID:
00053490
Message ID:
00053750
Views:
27
>>>>>>I am trying to implement a simple 'multiple select mover grid' and I find the re-sequencing of the record slow. I am sure there is a way to re-order the records in a shorter time. Can somebody help?
>>>>>>
>>>>>>I keep a sequence number in the table to order the table. First, the user selects a few records by clicking on the checkbox (flag). Then the user selects the new position for the selected records. When the 'Move' button is click, I tried to sequence it using the following codes
>>>>>>
>>>>>>nrecno = recno()
>>>>>>nseq = sequence
>>>>>>replace all sequence with sequence*1000
>>>>>>replace all sequence with sequence/1000+nseq*1000 for flag=.T.
>>>>>>i=0
>>>>>>scan
>>>>>> i=i+1
>>>>>> replace sequence with i
>>>>>>endscan
>>>>>>
>>>>>>The scan is slow. Is it possible to do it in one replace statement?
>>>>>>
>>>>>>Can anyone suggest other ways of re-sequencing of records?
>>>>>
>>>>>Your algorithm is slow because you scan/replace all records in table. I would advise to change sequence value just for records you want to move:
>>>>>Select table1 && this is Grid.Recordsource
>>>>>Set order to tag sequence
>>>>>Calculate min(sequence) to nMinsequence
>>>>>nCounter=0
>>>>>Scan For flag=.t. && have tag on flag for better performance
>>>>> nCounter=nCounter+1
>>>>> Replace table1.Sequence with nMinsequence-nCounter
>>>>>Endscan
>>>>>Thisform.Grid1.Refresh
>>>>
>>>>Sorry, I think there is a misunderstanding. I didn't phrase my question clear enough.
>>>>
>>>>My user can select any records on the grid. Then he can move all the selected records to a specific location he choose. For example, I have,
>>>>
>>>>seq desc Flag
>>>>1 Rec1 .F.
>>>>2 Rec2 .T.
>>>>3 Rec3 .F.
>>>>4 Rec4 .T.
>>>>5 Rec5 .F.
>>>>6 Rec6 .F.
>>>>
>>>>The users selected Rec2 & Rec4 as shown. He choose position Rec5 to move to. On 'move', I would get
>>>>
>>>>seq desc Flag
>>>>1 Rec1 .F.
>>>>2 Rec3 .F.
>>>>3 Rec5 .F.
>>>>4 Rec2 .T.
>>>>5 Rec4 .T.
>>>>6 Rec6 .F.
>>>>
>>>>He can also choose to move records up and ideally, he can do the kind of thing like select Rec1 & Rec5 and move them to Rec3 too.
>>>>
>>>>Is there a way to replace all with a running number in a faster way?
>>>
>>>Well, you can have additional field 'addseq' and compound tag on two fields "sequence" and "addseq". When you want to move selected records to particular place, you :
>>>1. Replace all selected records sequence with 'placeholder' sequence (the same number for all these records).
>>>2. Scan selected records and fill addseq value with 1,2,3... (all other records will have 0).
>>>Surely, your code should be sophisticated enough to provide moving new bunch of records to the same place.
>>
>>Theoretically, I will get many records with the same 'placeholder' sequence and when the users want to move among the records with the same placeholder, I will come back to the same problem.
>>
>Theoretically yes, but practically not. As I understand user selects records by clicking on checkbox, so how many times he/she will click, especially to move to the same place, many times? Don't give your users too much freedom, or the will kill you and your application (g).

I won't want to take the chance due to the nature of the usage. Anyway, it is a good piece of advice and I appreciate. Thx.

BTW, Dan Trigg's method seems to work and I will try that out.
Previous
Reply
Map
View

Click here to load this message in the networking platform