Level Extreme platform
Subscription
Corporate profile
Products & Services
Support
Legal
Français
Scan and Update with 2 cursors
Message
 
 
To
20/08/2008 13:14:23
General information
Forum:
Visual FoxPro
Category:
Coding, syntax & commands
Environment versions
Visual FoxPro:
VFP 8 SP1
OS:
Windows 2000 SP4
Database:
Visual FoxPro
Miscellaneous
Thread ID:
01338981
Message ID:
01340444
Views:
12
This message has been marked as a message which has helped to the initial question of the thread.
Hi Beth,

Evan's message forced me to re-look at your problem. You need to set your relation the other way around from the table you're updating to the extra cursor. This way I hope it will work.

>>>Hi All,
>>>
>>>I have a program, where I collect info into 1 cursor (fstcursor), then use that cursor to update a different cursor (mncursor). At the moment, I have to do a scan of fstcursor, and update mncursor within that scan. With 100,000+ records, this takes a while. Is there a better way to do this?
>>>
>>>I have a lot of these updates in the program, plus some fors. At the moment, the program takes well over 16 minutes to run (still has not finished this run) with 100,000 to 110,000 records.
>>>
>>>I thought maybe getting rid of scans might help, but I wanted to ask you, UT members, first. :)
>>>
>>>Thanks,
>>>Beth
>>
>>I don't think there's an SQL option to update the cursors since UPDATE FROM is not in VFP 8.
>>
>>But 16 minutes seems excessive for that many records. When I have this sort of situation I would usually do something like
>>
>>SELECT mnCursor
>>INDEX ON expression TAG temp
>>SELECT fstCursor
>>SET RELATION TO expression INTO mnCursor
>>REPLACE ALL field WITH fstCusor.field...... FOR FOUND('fstCusror')
>>
>>Can something like that be adapted to your situation?
>Okay, I tried to adapt this to my situation, and this is what I came up with:
>
>SELECT srvcid, UBILLDESC, stdntid, SUM(wrkRealCost) AS wrkRealCost, ;
>  C1, C4 ;
>  FROM BL731 WHERE wrkStatus<>ACTIVE ;
>  GROUP BY srvcid, C1, C4, UBILLDESC , stdntid ;
>  INTO CURSOR BL
>
>SELECT BL731
>INDEX ON srvcid + UBILLDESC + BINTOC(stdntid) + STR(C1) + STR(C4) TAG mainmix
>SELECT BL
>SET RELATION TO srvcid + UBILLDESC + BINTOC(stdntid) + STR(C1) + STR(C4) INTO BL731 IN BL
>
>REPLACE wrkAdjust WITH BL.wrkRealCost  ;
>  , wrkRealCost WITH BL731.wrkRealCost + BL.wrkRealCost ;
>  ALL FOR FOUND('bl') IN BL731
>
>USE IN "BL"
>
>and I get no records updated correctly. :(
>did I miss something in the relation, or setting up the replace command?
>C1 and C4 numerical amounts that represent money.
>
>Thanks for you help,
>Beth
If it's not broken, fix it until it is.


My Blog
Previous
Next
Reply
Map
View

Click here to load this message in the networking platform