Here's a complete example of creating a small table and updating
a column with a custom function:
'---
Declare Function FirstWord (ByVal sText As String) As String
Close All Interactive
Create Table TEST (
        Corner Char (25),
        Location Char (25))
File ApplicationDirectory$() & "test.tab"
Insert Into TEST (Location) Values ("One Fish")
Insert Into TEST (Location) Values ("Two Fish")
Insert Into TEST (Location) Values ("Red Fish")
Insert Into TEST (Location) Values ("Blue Fish")
Update TEST Set Corner=FirstWord(Location)
Commit Table TEST
Browse * From TEST

Function FirstWord (ByVal sText As String) As String
Dim sWord As String
        sWord = Left$(sText, InStr(1, sText, " ")-1)
        FirstWord = sWord
End Function
'---



"Cummings, Mike" wrote:
> 
> OK, what's the trick?  Corner=strpcorner(stable2.location) doesn't work.  I don't 
> want to write code to loop through the table, if I don't have to.  Looping through 
> the table is going to be slow.
> 
> The update statement (for some reason) doesn't recognize table field names in custom 
> functions.  I have written a MBX with a simple function and I can pass values to 
> fill the field.
> 
> When I tried to use an alias(ie - Function xx(str as alias)as string), its fatal for 
> Mapinfo 6.5 (win2000 reports an illegal operation & closes Mapinfo).
> 
> Someone must have discovered this before.  I have a hard time believing there isn't 
> a way to update a field with a custom function without looping through the table or 
> some other work around. (I can do it in access.) When I sketched out my flow 
> diagram, it never occurred to me that this couldn't be done.  Its back to the 
> drawing board.  The Manual says that you can use custom functions in Select 
> statements.  Has anyone had any luck?
> 
> -----Original Message-----
> From: B. Thoen [mailto:[EMAIL PROTECTED]
> Sent: Monday, April 26, 2004 5:07 PM
> To: Jacques Paris
> Cc: Cummings, Mike; Mapinfo-L
> Subject: RE: MI-L mapbasic Update table with custom function
> 
> No, that's not the case. In MapBasic, you can use custom functions in
> 'update' statements. In fact, this is a little known trick for rapidly
> updating tables rather than using the slower 'Do While...Loop' technique.
> 
> You might need to add the table name to the variable (e.g.
> Corner=strpcorner(stable2.location)), but that's just a stab in the dark.
> Check your spelling too -- 'location' may actually be 'loaction' in the
> table, or something like that.
> 
> - Bill Thoen
> 
> On Mon, 26 Apr 2004, Jacques Paris wrote:
> 
> > My interpretation is that the expression used to update a column must be
> > written with the MapBasic "vocabulary". I deduce that from the fact that
> > "update" as many other functions can be run from the MapBasic window that
> > does not support any "external" calls, i.e. calls to custom functions that
> > are not part of the MB set and must be supplied by the user, and the MB
> > window does not allow that.
> >
> > Jacques Paris
> > e-mail  [EMAIL PROTECTED]
> > MapBasic-MapInfo support  http://www.paris-pc-gis.com
> >
> >
> > -----Original Message-----
> > From: Cummings, Mike [mailto:[EMAIL PROTECTED]
> > Sent: 26-Apr-04 18:14
> > To: Mapinfo-L
> > Subject: MI-L mapbasic Update table with custom function
> >
> > I tried to compile this code:
> >
> > Update "stable2" Set MTRS = Left$(bm,1)+Twn+Rge+right$("0"+sec,2),
> > Corner=strpcorner(location)
> >
> > (Where MTRS, BM, TWN, RGE, SEC, corner & Location are fields in stable2
> > and strpcorner is a custom function)
> >
> > and I get this error message: Subroute Argument location not defined.
> >
> > Why doesn't this work?  Shouldn't Mapbasic recognize that location is a
> > field name?
> 
> ---------------------------------------------------------------------
> List hosting provided by Directions Magazine | www.directionsmag.com |
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
> Message number: 11533

-- 
- Bill Thoen
------------------------------------------------------------ 
GISnet, 1401 Walnut St., Suite C, Boulder, CO  80302
tel: 303-786-9961, fax: 303-443-4856
http://www.gisnet.com/
------------------------------------------------------------

---------------------------------------------------------------------
List hosting provided by Directions Magazine | www.directionsmag.com |
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
Message number: 11547

Reply via email to