Eric,
Thanks for this, I will watch out for unexpected errors etc. One alternative
suggested was to use an alias variable. This works, but my code is using a
global and you can't have a global alias variable. I could always pass the
value to a local alias variable but the "Run Command" method is working ok
so far!
FYI another alternative suggested (untested by me) was to use a column (eg
col3) reference instead.
Thanks again,
Pete
----------
From: [EMAIL PROTECTED]
To: [EMAIL PROTECTED]; Thake, Peter
Cc: [EMAIL PROTECTED]
Subject: RE: MI Set Map Statement
Date: 19 February 1999 09:28
Hello,
Beware of this 'immediate mode'. It sometimes screwed up error detection in
some of my programs....
eric.
-----Message d'origine-----
De: David M Haycraft [SMTP:[EMAIL PROTECTED]]
Date: mercredi 17 fevrier 1999 18:04
A: [EMAIL PROTECTED]
Cc: [EMAIL PROTECTED]
Objet: Re: MI Set Map Statement
Pete:
You said
>I am presently stuck with the following problem, it is starting to drive
me
>nuts, and I am sure I am missing something embarrassingly obvious!
>In Mapbasic/Mapinfo 5 I am trying to use the Set Map Statement to label a
>layer where the layer_id is a string variable
Your problem arises because:
1) the MapBasic language does not consistently allow general expressions
in its statements at places where user-supplied values are required
2) exceptions are not documented in either the on-line help or the
reference manual.
By "general expression" I mean the use of combination of literals,
variables and operators that evaluates to either a numeric or string value
as required by the context. Your string variable "layer-id" fits this
description.
For example, the syntax for the center clause in MapBasic set map is:
Set Map
[ Window window_id ]
[ Center ( longitude, latitude ) [ Smart Redraw ] ]
where the place-holders window-id, longitude and latitude denote
user-supplied values.
By trial-and-error you can establish that the longitude and latitude
"places" may be successfully filled in with expressions involving variables
like:
set map window frontwindow() center ( x+150,y-35)
The syntax for the label-with clause in the MapBasic set map appears quite
similar:
Set Map
[ Window window_id ]
[ Layer layer_id
[ Label
[ With label_expr ]
]
]
where the tokens window-id, layer_id and label_expr again denote
user-supplied values.
However, as you found out by-trial-and-error, the use of a variable in the
label_expr "place" is not successful. Although it does not lead to a
compile-time syntax error, the labels don't appear at all when you try
this:
dim strField
strField="StateName"
set map window frontwindow()
Layer "Australia"
Label with strField
In my experience, SQL SELECT statements, SET MAP statements and THEMATIC
SHADE statements are all prone to this kind of problem.
The general work-around is to write code to pre-expand these troublesome
statements into string variables at run-time and then execute them in
"immediate mode". Like this:
' settest.mb
declare sub main
sub main
dim s_Country as string
dim s_Label_layer as string
dim s_Label_field as string
dim strStatement as string
s_Country="D:\mapdata\bdys\general\austrlia\austrlia.tab"
s_Label_layer = "Austrlia"
s_Label_field = "StateName"
close all
open table s_Country as austrlia
map from austrlia
' pre-expand statement
strStatement=
"Set Map window frontWindow() " +
"Layer " + s_Label_layer +
" Label " +
" Font (""Arial"",256,8,0,16777215) " +
" Line Simple " +
" Position Center " +
" With " + s_Label_field +
" Auto On "
' execute statement in immediate mode
run command strStatement
end sub
Regards
David M Haycraft Phone/Fax: 61 + 2 + 6231 8104
Information Analysis Assocs P/L Mobile: 0412 001 134
ACN 085 516 105 Email:
[EMAIL PROTECTED]
1 Cumming Place, Wanniassa
A.C.T. 2903, Australia A MapInfo Partner
<< Fichier: ATT00001.htm>>
----------------------------------------------------------------------
To unsubscribe from this list, send e-mail to [EMAIL PROTECTED] and put
"unsubscribe MAPINFO-L" in the message body, or contact [EMAIL PROTECTED]