Welcome To The Home Of The Visual FoxPro Experts  
home. signup. forum. archives. search. google. articles. downloads. faq. members. weblogs. file info. rss.
 From: Greg Green
  Where is Greg Green?
 
 Georgia - United States
 Greg Green
 To: Pete Sass
  Where is Pete Sass?
 Marathon, Ontario
 Canada
 Pete Sass
 Tags
Subject: RE: LOCATE FOR
Thread ID: 416437 Message ID: 416456 # Views: 44 # Ratings: 2
Version: Visual FoxPro 9 SP2 Category: Databases, Tables and SQL Server
Date: Monday, December 29, 2014 9:57:36 PM         
   


> > I am beginning to doubt if FoxPro can handle a compound search when using LOCATE FOR. Any insight on this? I am using the following code with indexing and don't see that it's working:
> >
> > SELECT KMartSearsFiles2012
> > SCAN
> > 	* Get the string. We will need to parse this string out.
> > 	* The file names are separated with":" at the beginning,
> > 	* and the end of each file.
> > 	lcAttachment=":" + ALLTRIM(KMartSearsFiles2012.FileName) + ":"
> > 	lcMessageDate=KMartSearsFiles2012.Msg_Dt
> > 	SELECT MySQL_Emails
> > 	LOCATE FOR ;
> > 		MySQL_Emails.Recvd_Dt = lcMessageDate AND ;
> > 		lcAttachment $ MySQL_Emails.Attachment
> > 	IF FOUND()
> > 		REPLACE MySQL_Emails.lFound WITH .T.
> > 	ENDIF
> > ENDSCAN
> > 

> >
> > Cecil Champenois, Jr.
>
>
> Hi Cecil,
>
> Inside the Scan ... EndScan loop you do not use Locate as this moves your record pointer
> killing the record by record scanning.
>
> You should be using an If . . . Endif statement inside the Scan loop and if the record
> conditions match then flip the flag to .T.
> This will process the loop sequentially checking all the records.
>
> The other option maybe a better one is to set a filter on the table :
>
SET FILTER TO MySQL_Emails.Recvd_Dt = lcMessageDate .AND. lcAttachment $ MySQL_Emails.Attachment
> GOTO TOP
> 
> * --- You can now browse to see if you have the correct recordset and modify the
> * --- filter accordingly until you are happy with the records filtered.
> BROWSE 
> 
> * --- Now since all your got is your required records.
> REPLACE MySQL_Emails.lFound WITH .T. WHILE .NOT. EOF()
> SET FILTER TO
> GOTO TOP
> * --- Star out browse below after verifying all OK.
> BROWSE
> USE

>
> Pete "the IceMan", from the Great White North of Canada.
> www.marathongriffincomputers.com

Yes you can use a LOCATE inside a SCAN loop as long as they are two different tables which is the case with Cecil's code. I am not sure of the problem that he is having as I have used this same type of code before. You might try something along the lines of:

SELECT KMartSearsFiles2012
SCAN
	* Get the string. We will need to parse this string out.
	* The file names are separated with":" at the beginning,
	* and the end of each file.
	lcAttachment = ":" + ALLTRIM(KMartSearsFiles2012.FileName) + ":"
	SELECT MySQL_Emails
	LOCATE FOR ;
		MySQL_Emails.Recvd_Dt = KMartSearsFiles2012.Msg_Dt AND ;
		ATC(lcAttachment, MySQL_Emails.Attachment) > 0
	IF FOUND()
		REPLACE MySQL_Emails.lFound WITH .T. IN MySQL_Emails
	ENDIF
	SELECT KMartSearsFiles2012
ENDSCAN


Possibly there is a case sensitivity issue here? Using ATC() function will make it case-insensitive. The second SELECT KMartSearsFiles2012 (inside the SCAN loop) is not necessary but I do it for readability.

ENTIRE THREAD

LOCATE FOR Posted by Cecil Champenois @ 12/29/2014 6:34:17 PM
RE: LOCATE FOR Posted by Pete Sass @ 12/29/2014 7:11:17 PM
RE: LOCATE FOR Posted by Cecil Champenois @ 12/29/2014 9:38:00 PM
RE: LOCATE FOR Posted by Greg Green @ 12/29/2014 9:57:36 PM
RE: LOCATE FOR Posted by Pete Sass @ 12/29/2014 11:16:15 PM
RE: LOCATE FOR Posted by Mike Yearwood @ 12/30/2014 3:49:07 PM
RE: LOCATE FOR Posted by Pete Sass @ 12/30/2014 6:18:31 PM
RE: LOCATE FOR Posted by Mike Yearwood @ 12/30/2014 6:55:18 PM
RE: LOCATE FOR Posted by Mike Yearwood @ 12/29/2014 8:30:51 PM
RE: LOCATE FOR Posted by Cecil Champenois @ 12/29/2014 9:35:06 PM
RE: LOCATE FOR Posted by Tony Vignone @ 12/29/2014 9:03:34 PM
RE: LOCATE FOR Posted by Greg Green @ 12/29/2014 10:03:17 PM
RE: LOCATE FOR Posted by Tony Vignone @ 12/30/2014 3:27:40 PM
RE: LOCATE FOR Posted by David Myrick @ 12/29/2014 10:21:05 PM
RE: LOCATE FOR Posted by Jun Tangunan @ 12/30/2014 2:23:08 AM