Re: Not quite getting it!

classic Classic list List threaded Threaded
8 messages Options
Reply | Threaded
Open this post in threaded view
|

Re: Not quite getting it!

Jonathan Fletcher-2
Bill,

SQL does not recognize the double colon. Do not use them.

It makes your calcs a little more complicated but more reliable to wrap fully qualified field names in custom functions that return just the field name or the table name:

GFN ( FileMaker Field ) = [ Quote ( GetValue ( Substitute ( name ; “::” ; ¶ ) ; 2 ) ) ]
GTN ( FileMaker Field ) = [ Quote ( GetValue ( Substitute ( name ; “::” ; ¶ ) ; 1 ) ) ]

Then your calc would look like:

> Let ( [
>       $invoiceKey = PC_UID ;                                                                    
>       sqlQuery = "SELECT “ & GFN ( Progress Claim Items::Item Name ) & ",“ &
> GFN ( Progress Claim Items::CSJ Total ) & ",“ &
> GFN ( Progress Claim Items::ClaimAmt TD ) & ",“ &
> GFN ( Progress Claim Items::PrevClaimed ) & ",“ &
> GFN ( Progress Claim Items::This Claim ) & "                    
>                   FROM “ & GTN ( Progress Claim Items::ID ) & "
>                   WHERE “ & GFN ( Progress Claim Items::PC_ID ) & " = ?" ;
>
>       fieldSeparator = Char ( 9 ) ;                                                                  
>
>       rowSeparator = "" ;                                                                            
>
>       arg1 = $invoiceKey
>
> ] ;
>
>      ExecuteSQL ( sqlQuery ; fieldSeparator ; rowSeparator ; arg1 )          
> )


There is a BIG reason to do it this way, that is not talked about a lot to beginners because it is more to wrap your head around, and that is that the fields area then maintained by FileMaker. If you change a field or table name the calculation will not break.

The way to understand all the quotes is that all of the SQL syntax must be enclosed with double quotes. That is why all the commands, functions and commas that are a part of the SQL calc have quotes around them. They are then concatenated with the FileMaker functions with ampersands outside of the quotes. If you keep this straight it will be a piece of cake to you. Stuff NOT enclosed in quotes will be evaluated by FileMaker immediately. The resultant text of the various variable assignments will be evaluated by the ExecuteSQL function when it gets them in the last line.


One more trick: Set up a standard default structure to the whole LET structure and put it in a macro utility so you can write the majority of it with a couple of keystrokes to get started. Then you just replace a few placeholders and you’re good to go. I can literally write a whole SQL calc sometimes in the FM calc engine in less than 30 seconds using this approach. (I use TextExpander on the Mac, but there are others, and probably several for Windows.)

One more note: as you may have already guessed, this is only for fields in one table. Using fields from more than one table requires the use of SQL’s JOIN syntax, which is another level of complexity up the scale. I have not fully mastered that yet, but I do a couple simple ones like the above almost every day.

Jonathan


> On May 29, 2017, at 1:54 PM, Bill Fowler <[hidden email]> wrote:
>
> Still no joy.
>
> Should I prefix the Field Names with the Table Names?
>
> Does SQL recognise the :: between the table and field names?
>
> Should I remove spaces in my field names?
>
> Cheers
> Bill
>
>
> Bill Fowler
> [hidden email]
> 0274 745881
>
>
>
> On 30 May 2017, at 5:46 am, Jonathan Fletcher <[hidden email]> wrote:
>
> The diamond brackets where mean to imply place-holders. There should be nothing around your field and table names.
>
> Jonathan
>
>
>> On May 29, 2017, at 1:35 PM, Bill Fowler <[hidden email]> wrote:
>>
>> Thought so! But didn’t know where to look!
>>
>> However, I am now just getting a question mark as the answer to my calc. This evaqluates from Progress Claims and should pull the related Progress Claim Items into the calc.
>>
>> I trust nothing is converting any of the text here, but this is what I have. It is a valid calc as Fm accepts it, but only returns a “?”
>>
>> Cheers
>> Bill
>>
>>
>> Let ( [
>>       $invoiceKey = PC_UID ;                                                                    
>>
>>       sqlQuery = "SELECT Item Name, CSJ Total, ClaimAmt TD, PrevClaimed, This Claim                    
>>
>>                   FROM <Progress Claim Items>                                
>>
>>                   WHERE <PC_ID> = ?" ;          
>>
>>       fieldSeparator = Char ( 9 ) ;                                                                  
>>
>>       rowSeparator = "" ;                                                                            
>>
>>       arg1 = $invoiceKey
>>
>> ] ;
>>
>>      ExecuteSQL ( sqlQuery ; fieldSeparator ; rowSeparator ; arg1 )          
>> )
>>
>>
>>
>>
>>
>> Bill Fowler
>> [hidden email]
>> 0274 745881
>>
>>
>>
>> On 30 May 2017, at 5:17 am, Jonathan Fletcher <[hidden email]> wrote:
>>
>> That's not the way I wrote it, Bill. It looks like something converted the closing quotes everywhere to a question mark.
>>
>> The only question mark should be in the parameter position in the sql code block. All others should be “dumb quotes."
>>
>> Jonathan
>>
>>
>>> On May 29, 2017, at 1:15 PM, Bill Fowler <[hidden email]> wrote:
>>>
>>> Hi Jonathan
>>>
>>> I have tried copying and pasting your calculation and substituting my field names but I am getting field not found for the row separator. I don’t know SQL but “? looks wrong to me?
>>>
>>> Also you have the ParentKeyField as two question marks and in your comment you have three question marks?
>>>
>>> Over…
>>>
>>> Cheers
>>> Bill
>>>
>>>
>>> Bill Fowler
>>> [hidden email]
>>> 0274 745881
>>>
>>>
>>> Let ( [
>>>     $invoiceKey = invoice::ID ;                                                                     // Save the invoice?s primary key
>>>
>>>     sqlQuery = "SELECT quantity, itemNumber, description                    // field names separated by commas
>>>                             FROM <invoiceLineItemsTableName>                                // the, um, name of your line item table
>>>                             WHERE <invoiceLineItemsParentKeyField> = ?? ;           // ??? is a parameter that will get the contents of arg1.
>>>
>>>     fieldSeparator = char ( 9 ) ;                                                                   // a tab here, but can be any character(s) you want
>>>     rowSeparator = "? ;                                                                                     // defaults to a carriage return
>>>
>>>     arg1 = $invoiceKey ;
>>>
>>> ] ;
>>>
>>>     ExecuteSQL ( sqlQuery ; fieldSeparator ; rowSeparator ; arg1 )          // where it all comes together
>>>
>>> )
>>
>> --
>> Jonathan Fletcher
>> [hidden email]
>>
>> Kentuckiana FileMaker Developers Group
>> Next Meeting: 6/27/17
>>
>>
>
> --
> Jonathan Fletcher
> [hidden email]
>
> Kentuckiana FileMaker Developers Group
> Next Meeting: 6/27/17
>
>

--
Jonathan Fletcher
[hidden email]

Kentuckiana FileMaker Developers Group
Next Meeting: 6/27/17

_______________________________________________
FMPexperts mailing list
[hidden email]
http://lists.ironclad.net.au/listinfo.cgi/fmpexperts-ironclad.net.au
Reply | Threaded
Open this post in threaded view
|

Re: Not quite getting it!

James McAlister-4
On Mon, May 29, 2017 at 1:27 PM, Jonathan Fletcher <[hidden email]>
wrote:

> One more trick: Set up a standard default structure to the whole LET
> structure and put it in a macro utility so you can write the majority of it
> with a couple of keystrokes to get started. Then you just replace a few
> placeholders and you’re good to go. I can literally write a whole SQL calc
> sometimes in the FM calc engine in less than 30 seconds using this
> approach.


Jonathan, I'd be interested in seeing the "standard default structure"
template that you use in Text Expander. I have tried a couple but am not
happy with either one.

Thanks!

James
_______________________________________________
FMPexperts mailing list
[hidden email]
http://lists.ironclad.net.au/listinfo.cgi/fmpexperts-ironclad.net.au
Reply | Threaded
Open this post in threaded view
|

Re: Not quite getting it!

Jonathan Fletcher-2
This is the one I always use, along with the CFs that I posted:


Let ( [
        sqlQuery = "SELECT " & GFN ( <Leave Cursor Here> ) & "
                                FROM " & GTN ( <field> ) & "
                                WHERE " & GFN ( <field> ) & " = ?" ;
        fieldSeparator = "" ;
        rowSeparator = "" ;
        arg1 = "" ;
        result = ExecuteSQL ( sqlQuery ; fieldSeparator ; rowSeparator ; arg1 )
] ;
        result
)


TextExpander has a feature where you can tell it where to leave the cursor, so I put it in the position of the first field I would specify.

Obviously, the field in the GTN function can be any field in the right TO, since it only cares about the table occurrence name. I default to selecting the ID field there for consistency, although that is not necessary.

The fields, of course, can be in any TO that has the correct base table, although it makes things a little less cluttered to use the one with the shortest name.

If I need more WHERE clauses, fields or other SQL functions or operators, I copy and paste a bit, and keep the W3C site handy.

Jonathan



> On May 30, 2017, at 8:41 AM, James McAlister <[hidden email]> wrote:
>
> On Mon, May 29, 2017 at 1:27 PM, Jonathan Fletcher <[hidden email]>
> wrote:
>
>> One more trick: Set up a standard default structure to the whole LET
>> structure and put it in a macro utility so you can write the majority of it
>> with a couple of keystrokes to get started. Then you just replace a few
>> placeholders and you’re good to go. I can literally write a whole SQL calc
>> sometimes in the FM calc engine in less than 30 seconds using this
>> approach.
>
>
> Jonathan, I'd be interested in seeing the "standard default structure"
> template that you use in Text Expander. I have tried a couple but am not
> happy with either one.
>
> Thanks!
>
> James
> _______________________________________________
> FMPexperts mailing list
> [hidden email]
> http://lists.ironclad.net.au/listinfo.cgi/fmpexperts-ironclad.net.au

--
Jonathan Fletcher
[hidden email]

Kentuckiana FileMaker Developers Group
Next Meeting: 6/27/17

_______________________________________________
FMPexperts mailing list
[hidden email]
http://lists.ironclad.net.au/listinfo.cgi/fmpexperts-ironclad.net.au
Reply | Threaded
Open this post in threaded view
|

Re: Not quite getting it!

James McAlister-4
Thanks! This helps. I use Typinator and can easily adapt.

On Tue, May 30, 2017 at 8:15 AM, Jonathan Fletcher <[hidden email]>
wrote:

> This is the one I always use, along with the CFs that I posted:
>
>
> Let ( [
>         sqlQuery = "SELECT " & GFN ( <Leave Cursor Here> ) & "
>                                 FROM " & GTN ( <field> ) & "
>                                 WHERE " & GFN ( <field> ) & " = ?" ;
>         fieldSeparator = "" ;
>         rowSeparator = "" ;
>         arg1 = "" ;
>         result = ExecuteSQL ( sqlQuery ; fieldSeparator ; rowSeparator ;
> arg1 )
> ] ;
>         result
> )
>
>
> TextExpander has a feature where you can tell it where to leave the
> cursor, so I put it in the position of the first field I would specify.
>
> Obviously, the field in the GTN function can be any field in the right TO,
> since it only cares about the table occurrence name. I default to selecting
> the ID field there for consistency, although that is not necessary.
>
> The fields, of course, can be in any TO that has the correct base table,
> although it makes things a little less cluttered to use the one with the
> shortest name.
>
> If I need more WHERE clauses, fields or other SQL functions or operators,
> I copy and paste a bit, and keep the W3C site handy.
>
> Jonathan
>
>
>
> > On May 30, 2017, at 8:41 AM, James McAlister <[hidden email]> wrote:
> >
> > On Mon, May 29, 2017 at 1:27 PM, Jonathan Fletcher <
> [hidden email]>
> > wrote:
> >
> >> One more trick: Set up a standard default structure to the whole LET
> >> structure and put it in a macro utility so you can write the majority
> of it
> >> with a couple of keystrokes to get started. Then you just replace a few
> >> placeholders and you’re good to go. I can literally write a whole SQL
> calc
> >> sometimes in the FM calc engine in less than 30 seconds using this
> >> approach.
> >
> >
> > Jonathan, I'd be interested in seeing the "standard default structure"
> > template that you use in Text Expander. I have tried a couple but am not
> > happy with either one.
> >
> > Thanks!
> >
> > James
> > _______________________________________________
> > FMPexperts mailing list
> > [hidden email]
> > http://lists.ironclad.net.au/listinfo.cgi/fmpexperts-ironclad.net.au
>
> --
> Jonathan Fletcher
> [hidden email]
>
> Kentuckiana FileMaker Developers Group
> Next Meeting: 6/27/17
>
> _______________________________________________
> FMPexperts mailing list
> [hidden email]
> http://lists.ironclad.net.au/listinfo.cgi/fmpexperts-ironclad.net.au
>
_______________________________________________
FMPexperts mailing list
[hidden email]
http://lists.ironclad.net.au/listinfo.cgi/fmpexperts-ironclad.net.au
Reply | Threaded
Open this post in threaded view
|

Re: Not quite getting it!

Jonathan Fletcher-2
Oh, my keystrokes:

“let (“ gets me my standard Let structure, and

“lets (“ gets me the Let SQL format.

But whatever works for you is the best one.

j.



> On May 30, 2017, at 9:30 AM, James McAlister <[hidden email]> wrote:
>
> Thanks! This helps. I use Typinator and can easily adapt.
>
> On Tue, May 30, 2017 at 8:15 AM, Jonathan Fletcher <[hidden email]>
> wrote:
>
>> This is the one I always use, along with the CFs that I posted:
>>
>>
>> Let ( [
>>        sqlQuery = "SELECT " & GFN ( <Leave Cursor Here> ) & "
>>                                FROM " & GTN ( <field> ) & "
>>                                WHERE " & GFN ( <field> ) & " = ?" ;
>>        fieldSeparator = "" ;
>>        rowSeparator = "" ;
>>        arg1 = "" ;
>>        result = ExecuteSQL ( sqlQuery ; fieldSeparator ; rowSeparator ;
>> arg1 )
>> ] ;
>>        result
>> )
>>
>>
>> TextExpander has a feature where you can tell it where to leave the
>> cursor, so I put it in the position of the first field I would specify.
>>
>> Obviously, the field in the GTN function can be any field in the right TO,
>> since it only cares about the table occurrence name. I default to selecting
>> the ID field there for consistency, although that is not necessary.
>>
>> The fields, of course, can be in any TO that has the correct base table,
>> although it makes things a little less cluttered to use the one with the
>> shortest name.
>>
>> If I need more WHERE clauses, fields or other SQL functions or operators,
>> I copy and paste a bit, and keep the W3C site handy.
>>
>> Jonathan
>>
>>
>>
>>> On May 30, 2017, at 8:41 AM, James McAlister <[hidden email]> wrote:
>>>
>>> On Mon, May 29, 2017 at 1:27 PM, Jonathan Fletcher <
>> [hidden email]>
>>> wrote:
>>>
>>>> One more trick: Set up a standard default structure to the whole LET
>>>> structure and put it in a macro utility so you can write the majority
>> of it
>>>> with a couple of keystrokes to get started. Then you just replace a few
>>>> placeholders and you’re good to go. I can literally write a whole SQL
>> calc
>>>> sometimes in the FM calc engine in less than 30 seconds using this
>>>> approach.
>>>
>>>
>>> Jonathan, I'd be interested in seeing the "standard default structure"
>>> template that you use in Text Expander. I have tried a couple but am not
>>> happy with either one.
>>>
>>> Thanks!
>>>
>>> James
>>> _______________________________________________
>>> FMPexperts mailing list
>>> [hidden email]
>>> http://lists.ironclad.net.au/listinfo.cgi/fmpexperts-ironclad.net.au
>>
>> --
>> Jonathan Fletcher
>> [hidden email]
>>
>> Kentuckiana FileMaker Developers Group
>> Next Meeting: 6/27/17
>>
>> _______________________________________________
>> FMPexperts mailing list
>> [hidden email]
>> http://lists.ironclad.net.au/listinfo.cgi/fmpexperts-ironclad.net.au
>>
> _______________________________________________
> FMPexperts mailing list
> [hidden email]
> http://lists.ironclad.net.au/listinfo.cgi/fmpexperts-ironclad.net.au

--
Jonathan Fletcher
[hidden email]

Kentuckiana FileMaker Developers Group
Next Meeting: 6/27/17

_______________________________________________
FMPexperts mailing list
[hidden email]
http://lists.ironclad.net.au/listinfo.cgi/fmpexperts-ironclad.net.au
Reply | Threaded
Open this post in threaded view
|

Re: Not quite getting it!

Gary Reimer-2
In reply to this post by James McAlister-4
James, I use Typinator as well. Could you show me your adaptation?

Thanks
Gary

> On May 30, 2017, at 8:30 AM, James McAlister <[hidden email]> wrote:
>
> Thanks! This helps. I use Typinator and can easily adapt.
>
> On Tue, May 30, 2017 at 8:15 AM, Jonathan Fletcher <[hidden email]>
> wrote:
>
>> This is the one I always use, along with the CFs that I posted:
>>
>>
>> Let ( [
>>        sqlQuery = "SELECT " & GFN ( <Leave Cursor Here> ) & "
>>                                FROM " & GTN ( <field> ) & "
>>                                WHERE " & GFN ( <field> ) & " = ?" ;
>>        fieldSeparator = "" ;
>>        rowSeparator = "" ;
>>        arg1 = "" ;
>>        result = ExecuteSQL ( sqlQuery ; fieldSeparator ; rowSeparator ;
>> arg1 )
>> ] ;
>>        result
>> )
>>
>>
>> TextExpander has a feature where you can tell it where to leave the
>> cursor, so I put it in the position of the first field I would specify.
>>
>> Obviously, the field in the GTN function can be any field in the right TO,
>> since it only cares about the table occurrence name. I default to selecting
>> the ID field there for consistency, although that is not necessary.
>>
>> The fields, of course, can be in any TO that has the correct base table,
>> although it makes things a little less cluttered to use the one with the
>> shortest name.
>>
>> If I need more WHERE clauses, fields or other SQL functions or operators,
>> I copy and paste a bit, and keep the W3C site handy.
>>
>> Jonathan
>>
>>
>>
>>> On May 30, 2017, at 8:41 AM, James McAlister <[hidden email]> wrote:
>>>
>>> On Mon, May 29, 2017 at 1:27 PM, Jonathan Fletcher <
>> [hidden email]>
>>> wrote:
>>>
>>>> One more trick: Set up a standard default structure to the whole LET
>>>> structure and put it in a macro utility so you can write the majority
>> of it
>>>> with a couple of keystrokes to get started. Then you just replace a few
>>>> placeholders and you’re good to go. I can literally write a whole SQL
>> calc
>>>> sometimes in the FM calc engine in less than 30 seconds using this
>>>> approach.
>>>
>>>
>>> Jonathan, I'd be interested in seeing the "standard default structure"
>>> template that you use in Text Expander. I have tried a couple but am not
>>> happy with either one.
>>>
>>> Thanks!
>>>
>>> James
>>> _______________________________________________
>>> FMPexperts mailing list
>>> [hidden email]
>>> http://lists.ironclad.net.au/listinfo.cgi/fmpexperts-ironclad.net.au
>>
>> --
>> Jonathan Fletcher
>> [hidden email]
>>
>> Kentuckiana FileMaker Developers Group
>> Next Meeting: 6/27/17
>>
>> _______________________________________________
>> FMPexperts mailing list
>> [hidden email]
>> http://lists.ironclad.net.au/listinfo.cgi/fmpexperts-ironclad.net.au
>>
> _______________________________________________
> FMPexperts mailing list
> [hidden email]
> http://lists.ironclad.net.au/listinfo.cgi/fmpexperts-ironclad.net.au

_______________________________________________
FMPexperts mailing list
[hidden email]
http://lists.ironclad.net.au/listinfo.cgi/fmpexperts-ironclad.net.au
Reply | Threaded
Open this post in threaded view
|

Re: Not quite getting it!

Tom Fitch
For What It's Worth: I use a variation of this format, the point of
which is to make the query super simple to read and write. To this
end, we substitute the field and table names at the end, like so:

Let ( [
   q = "

SELECT name
FROM people
WHERE ID = ?
    "  ;

query = Substitute ( q ;
[ "people" ; GTN( people::ID ) ];
[ "name" ;   GFN( people::name ) ] ;
[ "ID" ;        GFN( people::ID) ]                  ) ;

result =    ExecuteSQL ( query ; "" ; "" ; $ID )
  ]  ;

result   )

Tom Fitch
FileMaker Pro Certified Developer
Portland, Oregon


>> On Tue, May 30, 2017 at 8:15 AM, Jonathan Fletcher <[hidden email]>
>> wrote:
>>
>>> This is the one I always use, along with the CFs that I posted:
>>>
>>>
>>> Let ( [
>>>        sqlQuery = "SELECT " & GFN ( <Leave Cursor Here> ) & "
>>>                                FROM " & GTN ( <field> ) & "
>>>                                WHERE " & GFN ( <field> ) & " = ?" ;
>>>        fieldSeparator = "" ;
>>>        rowSeparator = "" ;
>>>        arg1 = "" ;
>>>        result = ExecuteSQL ( sqlQuery ; fieldSeparator ; rowSeparator ;
>>> arg1 )
>>> ] ;
>>>        result
>>> )
>>>
>>>
>>> TextExpander has a feature where you can tell it where to leave the
>>> cursor, so I put it in the position of the first field I would specify.
>>>
>>> Obviously, the field in the GTN function can be any field in the right TO,
>>> since it only cares about the table occurrence name. I default to selecting
>>> the ID field there for consistency, although that is not necessary.
>>>
>>> The fields, of course, can be in any TO that has the correct base table,
>>> although it makes things a little less cluttered to use the one with the
>>> shortest name.
>>>
>>> If I need more WHERE clauses, fields or other SQL functions or operators,
>>> I copy and paste a bit, and keep the W3C site handy.
>>>
>>> Jonathan
>>>
>>>
>>>
>>>> On May 30, 2017, at 8:41 AM, James McAlister <[hidden email]> wrote:
>>>>
>>>> On Mon, May 29, 2017 at 1:27 PM, Jonathan Fletcher <
>>> [hidden email]>
>>>> wrote:
>>>>
>>>>> One more trick: Set up a standard default structure to the whole LET
>>>>> structure and put it in a macro utility so you can write the majority
>>> of it
>>>>> with a couple of keystrokes to get started. Then you just replace a few
>>>>> placeholders and you’re good to go. I can literally write a whole SQL
>>> calc
>>>>> sometimes in the FM calc engine in less than 30 seconds using this
>>>>> approach.
>>>>
>>>>
>>>> Jonathan, I'd be interested in seeing the "standard default structure"
>>>> template that you use in Text Expander. I have tried a couple but am not
>>>> happy with either one.
>>>>
>>>> Thanks!
>>>>
>>>> James
>>>> _______________________________________________
>>>> FMPexperts mailing list
>>>> [hidden email]
>>>> http://lists.ironclad.net.au/listinfo.cgi/fmpexperts-ironclad.net.au
>>>
>>> --
>>> Jonathan Fletcher
>>> [hidden email]
>>>
>>> Kentuckiana FileMaker Developers Group
>>> Next Meeting: 6/27/17
>>>
>>> _______________________________________________
>>> FMPexperts mailing list
>>> [hidden email]
>>> http://lists.ironclad.net.au/listinfo.cgi/fmpexperts-ironclad.net.au
>>>
>> _______________________________________________
>> FMPexperts mailing list
>> [hidden email]
>> http://lists.ironclad.net.au/listinfo.cgi/fmpexperts-ironclad.net.au
>
> _______________________________________________
> FMPexperts mailing list
> [hidden email]
> http://lists.ironclad.net.au/listinfo.cgi/fmpexperts-ironclad.net.au
_______________________________________________
FMPexperts mailing list
[hidden email]
http://lists.ironclad.net.au/listinfo.cgi/fmpexperts-ironclad.net.au
Reply | Threaded
Open this post in threaded view
|

Re: Not quite getting it!

James McAlister-4
In reply to this post by Gary Reimer-2
On Tue, May 30, 2017 at 9:53 AM, Gary Reimer <[hidden email]> wrote:

> Could you show me your adaptation?


I haven't got it completely finalized yet, Gary, but I've been using
something similar to what Tom posted with the query in plain English at the
top of the Let statement and the field/table definitions and the
corresponding custom functions at the bottom. I think I got it from one of
the videos at www.filemakermagazine.com. But I also like Jonathan's
inclusion of the row/column delimiters as variables in the Let. So I need
to roll all of the things I like into my own template to go with my
expansion "trigger": fmsql.

As far as Typinator is concerned, you can specify where the cursor should
be positioned after the text expansion by placing the characters "{^}"
(without the quotes) at the desired point. There's a dropdown in the
Typinator window that offers that as a choice.

 James
_______________________________________________
FMPexperts mailing list
[hidden email]
http://lists.ironclad.net.au/listinfo.cgi/fmpexperts-ironclad.net.au