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]

Reply via email to