Some time ago, I read, somewhere in the mapbasic documentation (a one sentance
statment), that custom functions won't work some places were "native" functions will.
I don't remember where I read it or where the differences are, I just remember
thinking that it was going to be a pain to work with custom functions because I wasn't
going to remember the differences and someday its going to trap me. It seems, custom
functions are coded/run differently.
-----Original Message-----
From: Bill Thoen [mailto:[EMAIL PROTECTED]
Sent: Sat 7/10/2004 9:01 AM
To: [EMAIL PROTECTED]
Cc:
Subject: MI-L Updating fields with functions
Updating table fields with functions is a much faster techique than
stepping through a table record by record to change a field. I was curious
to see how far the technique could be stretched and discovered that using
a function in a select doesn't seem to work, but in an update, it works
fine. Why is this? Anyone know?
Here's a test program illustrating the problem:
Declare Sub Main
Declare Function Reverse (ByVal sName As String) As String
Sub Main
Dim sFile As String
' Open the States table and build a new table using STATES.State_Name
' passed to a function that returns a string. The string returned from
' that function will be used to populate a temporary table and a
' permanent one. Why does the temporary table not get filled, while
' rows are created?
' Set up and open the source table
Close All
sFile = FileOpenDlg ("", "States.Tab", "TAB",
"Please open the STATES table")
If sFile = "" Then
Exit Sub
End If
Open Table sFile As STATES
' This works only rarely (but sometimes it does!)
' Usually all rows are blank.
Select Reverse (State_Name) "emaN_etatS"
From STATES Into TEMP NoSelect
' This does work
Create Table PERM (
emaN Char(20)
)
Insert Into PERM Select Reverse (State_Name) From STATES
Commit Table PERM
' View the results
Browse * From PERM
Browse * From TEMP
End Sub
Function Reverse (
ByVal sName As String) ' Input string
As String ' Returned word spelled backwards
'Reverses letters in a string
Dim sRevWord As String
Dim i, j As Integer
j = Len(sName)
For i = j To 1 Step -1
sRevWord = sRevWord + Mid$(sName, i, 1)
Next
Reverse = sRevWord
End Function
---
- Bill Thoen
---------------------------------------------------------------------
List hosting provided by Directions Magazine | www.directionsmag.com |
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
Message number: 12542