Level Extreme platform
Subscription
Corporate profile
Products & Services
Support
Legal
Français
How to re-sequence all the records in a table
Message
From
07/10/1997 12:16:30
Shihchau Tai
Apic Systems Pte Ltd
Singapore, Singapore
 
 
To
07/10/1997 11:01:51
General information
Forum:
Visual FoxPro
Category:
Coding, syntax & commands
Miscellaneous
Thread ID:
00053490
Message ID:
00053537
Views:
24
>>>>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.

I tried using three SQL SELECT ...INTO ARRAY and three APPEND FROM ARRAY and it seems faster. The only problem is I need to use table buffering and if I am not wrong, SQL SELECT doesn't get the newest data from buffer (the flags). I need to use a temp table again. It makes the whole thing complicated.

Looks like I am in deep shit.
Previous
Next
Reply
Map
View

Click here to load this message in the networking platform