<?xml version="1.0"?>
<rss xmlns:atom="http://www.w3.org/2005/Atom" version="2.0">
		<channel><title>[Lantica Software Support Center] Recently Changed Articles</title><link>http://www.lantica.com/support/rss/kb/recent_changes</link><description></description><item><title>Good Programming Practices</title><description>&lt;p class="copy"&gt;Good programming practices are not just arbitrary rules. They are 
          guidelines designed to help you get the most out of SBasic and Sesame. Regardless of your 
          level of programming experience, following good programming practices will help you to 
          write code that is more reliable and easier to maintain. You can write SBasic that does 
          not follow these guidelines, but your long term experience with programming Sesame will be 
          more productive if you do follow them.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p class="copy"&gt;&lt;sup class="bold_copy"&gt;Q&amp;A &lt;/sup&gt;Sesame offers many more options for 
          formatting and creating your code than Q&amp;amp;A. You 
          have more tools and more ways to use them. You also don't have any space limits on how 
          much programming you can have, as you had in Q&amp;amp;A, so you can afford to do it right.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;b&gt;Rule 1: Make It Pretty&lt;/b&gt;

&lt;p class="copy"&gt;Code written with a clean and consistent style is much more 
          readable. This may not seem important at first, but, it makes all the difference when you 
          are looking at something you wrote six months ago.&lt;/p&gt;

&lt;p class="copy"&gt;Put each statement on a separate line. It makes it much easier to 
          follow your program.&lt;br&gt;&lt;br&gt;
          &lt;b&gt;Not recommended:&lt;/b&gt;&lt;br&gt;
	  &lt;a class="sbasic"&gt;Name = &amp;quot;Bob&amp;quot;;Age = 25;Gender = &amp;quot;Male&amp;quot;&lt;br&gt;&lt;br&gt;&lt;/a&gt;
          &lt;b&gt;Recommended:&lt;/b&gt;&lt;br&gt;
	  &lt;a class="sbasic"&gt;Name = &amp;quot;Bob&amp;quot;&lt;br&gt;
          Age = 25&lt;br&gt;
	  Gender = &amp;quot;Male&amp;quot;&lt;br&gt;&lt;/p&gt;&lt;/a&gt;
  
&lt;p class="copy"&gt;
          Use White Space. Spaces, blank lines and tabs don't interfere with your programming unless 
          they are inside double-quotes. White space spreads out your statements so that you can see 
          what is going on. Put a space between an operator and an operand. Put a space between 
          arguments. Use a blank line between sections of your program.&lt;br&gt;&lt;br&gt;
          &lt;b&gt;Not recommended:&lt;/b&gt;&lt;br&gt;
       	  &lt;a class="sbasic"&gt;Name=&amp;quot;Bob&amp;quot;&lt;br&gt;
          Age=25&lt;br&gt;
          Gender=&amp;quot;Male&amp;quot;&lt;br&gt;
	  @MsgBox(&amp;quot;This is a&amp;quot;,&amp;quot;message from&amp;quot;,&amp;quot;the programmer&amp;quot;)&lt;/a&gt;&lt;br&gt;&lt;br&gt;
          &lt;b&gt;Recommended:&lt;/b&gt;&lt;br&gt;
          &lt;a class="sbasic"&gt;
	  Name = &amp;quot;Bob&amp;quot;&lt;br&gt;
          Age = 25&lt;br&gt;
          Gender = &amp;quot;Male&amp;quot;&lt;br&gt;
	  @MsgBox(&amp;quot;This is a&amp;quot;, &amp;quot;message from&amp;quot;, &amp;quot;the programmer&amp;quot;)&lt;br&gt;&lt;/p&gt;&lt;/a&gt;

&lt;p class="copy"&gt;
          Indent your code. Indenting makes it clear which statements go 
          together. Indenting is also very helpful for finding where chunks of code inside control 
          blocks, such as If..Then..Else and Loops begin and end.&lt;br&gt;&lt;br&gt;
          &lt;b&gt;Not recommended:&lt;/b&gt;&lt;br&gt;
	  &lt;a class="sbasic"&gt; While n &amp;lt; 100&lt;br&gt;
          {&lt;br&gt;
          vAmount = n * 5&lt;br&gt;
          vTotal = vAmount * vQty&lt;br&gt;
	  }&lt;br&gt;&lt;/a&gt;
          &lt;br&gt;
          &lt;b&gt;Recommended:&lt;/b&gt;&lt;br&gt;
	  &lt;a class="sbasic"&gt;While n &amp;lt; 100&lt;br&gt;
          {&lt;br&gt;
          &amp;nbsp;&amp;nbsp;&amp;nbsp;vAmount = n * 5&lt;br&gt;
          &amp;nbsp;&amp;nbsp;&amp;nbsp;vTotal = vAmount * vQty&lt;br&gt;
	  }&lt;br&gt;&lt;/p&gt;&lt;/a&gt;

&lt;b&gt;Rule 2: Be Consistent&lt;/b&gt;

&lt;p class="copy"&gt;Whatever style choices you make, stick with them. If you are 
          writing code for your own use, consistency will make it much easier to figure out what you 
          did when you want to change or update something. If you are a consultant writing code for 
          others, the next person who has to read your code will be very appreciative.&lt;/p&gt;

&lt;p class="copy"&gt;
          Pick a naming convention for your variables and stick with it. 
          This includes how you capitalize. SBasic is not case-sensitive, but your eyes are. 
          It is easier to separate variable names from 
          layout element names in your code if you name them consistently. Make the variable names 
          descriptive enough that you can remember what they are for.&lt;br&gt;&lt;br&gt;
          &lt;a class="bold_copy"&gt;Not recommended:&lt;/b&gt;&lt;br&gt;
	  &lt;a class="sbasic"&gt;var a as Int&lt;br&gt;
          VAR B AS string&lt;br&gt;
	  Var vCt as INT&lt;br&gt;&lt;br&gt;&lt;/a&gt;
          &lt;b&gt;Recommended:&lt;/b&gt;&lt;br&gt;
	  &lt;a class="sbasic"&gt;
	  var vApple As Int&lt;br&gt;
          var vBoy As String&lt;br&gt;
          var vCat As Int&lt;br&gt;&lt;/p&gt;&lt;/a&gt;

&lt;p class="copy"&gt;
	  Pick a &lt;a class="bold_copy"&gt;bracing style&lt;/a&gt; and stick with it. There are several legal bracing styles, plus BEGIN/END. 
          They are all acceptable, but choose one and always use it. The same goes for semicolons at 
          the ends of lines. SBasic can manage with or without the semicolons, but you should decide 
          which you will use.&lt;br&gt;&lt;br&gt;
          &lt;b&gt;Not recommended:&lt;/b&gt;&lt;br&gt;
	  &lt;a class="sbasic"&gt;
	  While vN &amp;lt; 100&lt;br&gt;
          {&lt;br&gt;
          &amp;nbsp;&amp;nbsp;&amp;nbsp;vNAmount = vN * 5;&lt;br&gt;
          &amp;nbsp;&amp;nbsp;&amp;nbsp;vNTotal = vNAmount * vNQty&lt;br&gt;
          }&lt;br&gt;
          While vX &amp;lt; 100 {&lt;br&gt;
          &amp;nbsp;&amp;nbsp;&amp;nbsp;vXAmount = vX * 5;&lt;br&gt;
          &amp;nbsp;&amp;nbsp;&amp;nbsp;vXTotal = vXAmount * vXQty;&lt;br&gt;
          }&lt;br&gt;
          While vY &amp;lt; 100 &lt;br&gt;
          BEGIN&lt;br&gt;
          &amp;nbsp;&amp;nbsp;&amp;nbsp;vYAmount = vY * 5&lt;br&gt;
          &amp;nbsp;&amp;nbsp;&amp;nbsp;vYTotal = vYAmount * vYQty;&lt;br&gt;
	  END&lt;br&gt;&lt;br&gt;&lt;/a&gt;
          &lt;b&gt;Recommended:&lt;/b&gt;&lt;br&gt;
	  &lt;a class="sbasic"&gt;
	  While vN &amp;lt; 100&lt;br&gt;
          {&lt;br&gt;
          &amp;nbsp;&amp;nbsp;&amp;nbsp;vNAmount = vN * 5&lt;br&gt;
          &amp;nbsp;&amp;nbsp;&amp;nbsp;vNTotal = vNAmount * vNQty&lt;br&gt;
          }&lt;br&gt;
          While vX &amp;lt; 100 &lt;br&gt;
          {&lt;br&gt;
          &amp;nbsp;&amp;nbsp;&amp;nbsp;vXAmount = vX * 5&lt;br&gt;
          &amp;nbsp;&amp;nbsp;&amp;nbsp;vXTotal = vXAmount * vXQty&lt;br&gt;
          }&lt;br&gt;
          While vY &amp;lt; 100 &lt;br&gt;
          {&lt;br&gt;
          &amp;nbsp;&amp;nbsp;&amp;nbsp;vYAmount = vY * 5&lt;br&gt;
          &amp;nbsp;&amp;nbsp;&amp;nbsp;vYTotal = vYAmount * vYQty&lt;br&gt;
	  }&lt;br&gt;&lt;/p&gt;&lt;/a&gt;

&lt;p class="copy"&gt;
          Decide how you are going to use white space and stick with it. If you are going to put spaces 
          between operators and operands, always do so. If you decide that you don't do that, never 
          do it.&lt;br&gt;&lt;br&gt;
          &lt;b&gt;Not recommended:&lt;/b&gt;&lt;br&gt;
	  &lt;a class = "sbasic"&gt;
	  Name = &amp;quot;Bob&amp;quot;&lt;br&gt;
          Age= 25&lt;br&gt;
          Gender = &amp;quot;Male&amp;quot;&lt;br&gt;
	  @MsgBox(&amp;quot;This is a&amp;quot;,&amp;quot;message from&amp;quot;, &amp;quot;the programmer&amp;quot;)&lt;br&gt;&lt;br&gt;&lt;/a&gt;
          &lt;b&gt;Recommended:&lt;/b&gt;&lt;br&gt;
	  &lt;a class="sbasic"&gt;
	  Name = &amp;quot;Bob&amp;quot;&lt;br&gt;
          Age = 25&lt;br&gt;
          Gender = &amp;quot;Male&amp;quot;&lt;br&gt;
	  @MsgBox(&amp;quot;This is a&amp;quot;, &amp;quot;message from&amp;quot;, &amp;quot;the programmer&amp;quot;)&lt;/p&gt;&lt;/a&gt;

&lt;b&gt;Rule 3: Use Variables&lt;br&gt;&lt;/b&gt;

&lt;p class="copy"&gt;Regardless of the many Application design reasons to use variables, there are also 
good programming practice reasons to use &lt;b&gt;variables&lt;/b&gt;. While it may seem easier to simply 
          work directly with Layout Element values, there is good reason not to do so. This is an 
          code example from the programming manual:&lt;/p&gt;
  
&lt;p class="sbasic"&gt;var vBonus as Double&lt;br&gt;&lt;br&gt;
          &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;If Salary&amp;nbsp; &amp;lt; 80000 Then &lt;br&gt;
	  &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{ &lt;br&gt;
          &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; vBonus = Salary * .02 &lt;br&gt;
	  &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} &lt;br&gt;
	  &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Else &lt;br&gt;
	  &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{ &lt;br&gt;
	  &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; vBonus = Salary * .035 &lt;br&gt;
	  &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} &lt;br&gt;
          &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;BonusAmount = @ToMoney(vBonus)&lt;/p&gt;
          
&lt;p class="copy"&gt;You may wonder why the value is not simply assigned to BonusAmount as it is calculated, rather 
          than using the vBonus variable, like this:&lt;/p&gt;

&lt;p class="sbasic"&gt;If Salary &amp;lt; 80000 &lt;br&gt;
          &amp;nbsp;&amp;nbsp; BonusAmount = .02 * Salary &lt;br&gt;
          Else&lt;br&gt;
          &amp;nbsp;&amp;nbsp; BonusAmount = .035 * Salary&lt;/p&gt;
          
&lt;p class="copy"&gt;While the reasons to use a variable may not be obvious in such a 
          simple piece of code, you should use variables rather than working directly with your 
          Layout Element values.&lt;/p&gt;

&lt;p class="copy"&gt;&lt;i&gt;Speed&lt;/i&gt; - It is much faster to operate on a variable than a Layout 
          Element value. &lt;br&gt;&lt;/p&gt;

&lt;p class="copy"&gt;
	  &lt;i&gt;Data integrity&lt;/i&gt; - You are doing all the calculations in a variable 
          and not affecting the actual Layout Element value until the last step. This way, if 
          something goes awry, such as division by zero, you have not saved a half calculated value 
          or corrupted your original value.&lt;/p&gt;

&lt;p class="copy"&gt;
	  &lt;i&gt;Code maintainability&lt;/i&gt; - No matter how many calculations you 
          perform, BonusAmount is only assigned in one place.&amp;nbsp; If something is wrong, you don't 
          have figure out which of the assignments is the problem.&lt;/p&gt;

&lt;p class="copy"&gt;
	  &lt;i&gt;Predictability&lt;/i&gt; - Sesame has strong data typing. Your temporary 
          value may not always meet type requirements. Assigning it to the Layout Element will force 
          it to the correct type and may change the value you thought you had.&lt;/p&gt;

&lt;p class="copy"&gt;These considerations may seem minor when dealing with a simple case 
          like the one above, however, with even a small amount of complexity, this becomes very 
          important. The example below is only a little more complex than the previous examples, but 
          the advantages of waiting until the calculations are complete to assign the value to 
	  BonusAmount should be more obvious. &lt;br&gt;&lt;br&gt;
	  &lt;a class="sbasic"&gt;
          var vBonus as Double &lt;br&gt;&lt;br&gt;
          &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;vBonus = Salary * .02 &lt;br&gt;
          &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;If Position = &amp;quot;Manager&amp;quot; Then vBonus = vBonus + (Salary * .025) &lt;br&gt;
          &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;If YearsWorked &amp;gt; 10 Then &lt;br&gt;
          &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{ &lt;br&gt;
          &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; vBonus = vBonus + (vBonus * .05) &lt;br&gt;
          &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} &lt;br&gt;
          &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Else &lt;br&gt;
          &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{ &lt;br&gt;
          &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; vBonus = vBonus + 10 &lt;br&gt;
          &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} &lt;br&gt;
	  &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;BonusAmount = @ToMoney(vBonus)&lt;/p&gt;&lt;/a&gt;

&lt;p class="copy"&gt;There are several kinds of variable scope available in SBasic. In 
          general, local variables are safer than global variables because everything that can 
          affect the variable's value is there in the same procedure. See the &lt;i&gt;Variables &lt;/i&gt;
          section for a detailed explanation of variable scope.&lt;/p&gt;

&lt;b&gt;Rule 4: One Way In, One Way Out&lt;/b&gt;

&lt;p class="copy"&gt;Having more than one way in and one way out of any particular procedure or control block is 
          asking for trouble. Not only does it reduce the reliability of your code, but it also 
          makes it far more difficult to figure out which part of your code is actually running. 
          This can make maintaining and debugging your code unnecessarily difficult.&lt;/p&gt;
          
&lt;p class="copy"&gt;
          GoTo is not the recommended way to stop code from running. If you GoTo a different Layout Element, 
          none of the code after the GoTo will run. If you are using GoTo with code after it, you 
          are better off setting a &amp;quot;quit&amp;quot; variable or using a control statement to control whether 
          that code runs. A &amp;quot;quit&amp;quot; variable is especially useful if you have a case where more than 
          one condition may cause the GoTo.&lt;br&gt;&lt;br&gt;
          &lt;b&gt;Not recommended:&lt;/b&gt;&lt;br&gt;
	  &lt;a class="sbasic"&gt;
	  If Amount &amp;gt; 1000&lt;br&gt;
          {&lt;br&gt;
          &amp;nbsp;&amp;nbsp;GoTo LargeInvoice&lt;br&gt;
          }&lt;br&gt;
          // The following lines will never run if Amount &amp;gt; 1000&lt;br&gt;
	  {&lt;br&gt;
	  &amp;nbsp;&amp;nbsp;vLineTotal = Amount * Qty&lt;br&gt;
	  }&lt;br&gt;
	  vInvoiceTotal = InvoiceTotal + vLineTotal&lt;br&gt;
	  InvoiceTotal = vInvoiceTotal&lt;br&gt;&lt;br&gt;&lt;/a&gt;
          &lt;b&gt;Recommended:&lt;/b&gt; &lt;br&gt;
	  &lt;a class="sbasic"&gt;
	  vQuit = 0&lt;br&gt;
          If Amount &amp;gt; 1000&lt;br&gt;
          {&lt;br&gt;
          &amp;nbsp;&amp;nbsp;&amp;nbsp;vQuit = 1&lt;br&gt;
          }&lt;br&gt;
          // Note that in this example, you could have checked&lt;br&gt;
          // any number of conditions before this point to decide&lt;br&gt;
          // whether to quit. &lt;br&gt;
          If vQuit = 0&lt;br&gt;
          {&lt;br&gt;
          &amp;nbsp;&amp;nbsp;&amp;nbsp;vLineTotal = Amount * Qty&lt;br&gt;
          &amp;nbsp;&amp;nbsp;&amp;nbsp;vInvoiceTotal = InvoiceTotal + vLineTotal&lt;br&gt;
          &amp;nbsp;&amp;nbsp;&amp;nbsp;InvoiceTotal = vInvoiceTotal&lt;br&gt;
          }&lt;br&gt;
          Else&lt;br&gt;
          {&lt;br&gt;
          &amp;nbsp;&amp;nbsp;&amp;nbsp;GoTo LargeInvoice&lt;br&gt;
	  }&lt;br&gt;&lt;br&gt;&lt;/a&gt;
          &lt;a class="bold_copy"&gt;Or:&lt;/a&gt;&lt;br&gt;
	  &lt;a class = "sbasic"&gt;
	  If Amount &amp;gt; 1000&lt;br&gt;
          {&lt;br&gt;
          &amp;nbsp;&amp;nbsp;&amp;nbsp;GoTo LargeInvoice&lt;br&gt;
          }&lt;br&gt;
          Else&lt;br&gt;
          {&lt;br&gt;
          &amp;nbsp;&amp;nbsp;&amp;nbsp;vLineTotal = Amount * Qty&lt;br&gt;
          &amp;nbsp;&amp;nbsp;&amp;nbsp;vInvoiceTotal = InvoiceTotal + 
          vLineTotal&lt;br&gt;
          &amp;nbsp;&amp;nbsp;&amp;nbsp;InvoiceTotal = vInvoiceTotal&lt;br&gt;
	  }&lt;/p&gt;&lt;/a&gt;

  &lt;p class="copy"&gt;
          Never alter a loop control variable from inside the loop. The only exception to this is when you 
          simply increment it inside a While loop. Altering the loop control variable from inside 
          the loop virtually guarantees unpredictable behavior and extremely difficult debugging. If 
          you need to end a loop early because a condition has been met, use a While loop with a 
          quit variable.&lt;br&gt;&lt;br&gt;
	  &lt;b&gt;Not recommended:&lt;/b&gt;&lt;br&gt;
	  &lt;a class="sbasic"&gt;
          var sStr as String&lt;br&gt;
          var vLoop as Int &lt;br&gt;&lt;br&gt;
          While vLoop &amp;lt; 100&lt;br&gt;
          {&lt;br&gt;
          &amp;nbsp;&amp;nbsp;vStr = LastName&lt;br&gt;
          &amp;nbsp;&amp;nbsp;If vStr = &amp;quot;Morgan&amp;quot; vLoop = 100&lt;br&gt;
	  &amp;nbsp;&amp;nbsp;vLoop = vLoop + 1 &lt;br&gt;
	  }&lt;br&gt;&lt;br&gt;&lt;/a&gt;

  	  &lt;b&gt;Recommended:&lt;/b&gt;&lt;br&gt;
	  &lt;a class="sbasic"&gt;
	  var vQuit as Int&lt;br&gt;
          var sStr as String&lt;br&gt;
          var vLoop as Int&lt;br&gt;&lt;br&gt;
          vQuit = 0 &lt;br&gt;
          While (vLoop &amp;lt; 100) And (vQuit = 0)&lt;br&gt;
          {&lt;br&gt;
          &amp;nbsp;&amp;nbsp;&amp;nbsp;vStr = LastName&lt;br&gt;
	  &amp;nbsp;&amp;nbsp;&amp;nbsp;If vStr = &amp;quot;Morgan&amp;quot; vQuit = 1&lt;br&gt;
	  &amp;nbsp;&amp;nbsp;&amp;nbsp;vLoop = vLoop + 1 &lt;br&gt;
	  }&lt;/p&gt;&lt;/a&gt;

&lt;b&gt;Rule 5: Use Procedures&lt;/b&gt;

&lt;p class="copy"&gt;Create &lt;b&gt;user defined functions and subroutines&lt;/b&gt; for repetitive calculations. Not only does this 
          save you a lot of typing, it also means that, if you want to change how something works, 
          you only have to change it in one place.&lt;/p&gt;

&lt;b&gt;Not recommended:&lt;/b&gt;

&lt;p class="sbasic"&gt;&lt;b&gt;LastName - OnFieldExit&lt;/b&gt;&lt;/p&gt;

&lt;p class="sbasic"&gt;var vLast as String &lt;br&gt;
var vMiddle as String&lt;br&gt;
var vFirst as String&lt;br&gt;
var vFullName as String&lt;br&gt;
var vSep as String&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;vLast = LastName&lt;br&gt;
&amp;nbsp;&amp;nbsp;vMiddle = MiddleName&lt;br&gt;
&amp;nbsp;&amp;nbsp;vFirst = FirstName&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;// Prevents an extra space if no Middle Name&lt;br&gt;
&amp;nbsp;&amp;nbsp;If Len(vMiddleName) = 0&lt;br&gt;
&amp;nbsp;&amp;nbsp;{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;vSep = &amp;quot;&amp;quot;&lt;br&gt;
&amp;nbsp;&amp;nbsp;} &lt;br&gt;
&amp;nbsp;&amp;nbsp;Else&lt;br&gt;
&amp;nbsp;&amp;nbsp;{ &lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;vSep = &amp;quot; &amp;quot;&lt;br&gt;
&amp;nbsp;&amp;nbsp;}&lt;br&gt;
&lt;br&gt;
vFullName = vLastName + &amp;quot;, &amp;quot; + vMiddleName + vSep + vFirstName&lt;br&gt;
FullName = vFullName
&lt;/p&gt;


&lt;p class="sbasic"&gt;&lt;b&gt;FirstName - OnFieldExit&lt;/b&gt;&lt;br&gt;&lt;br&gt;
var vLast as String &lt;br&gt;
var vMiddle as String &lt;br&gt;
var vFirst as String&lt;br&gt;
var vFullName as String&lt;br&gt;
var vSep as String&lt;br&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;vLast = LastName&lt;br&gt;
&amp;nbsp;&amp;nbsp;vMiddle = MiddleName&lt;br&gt;
&amp;nbsp;&amp;nbsp;vFirst = FirstName&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;// Prevents an extra space if no Middle Name&lt;br&gt;
&amp;nbsp;&amp;nbsp;If Len(vMiddleName) = 0&lt;br&gt;
&amp;nbsp;&amp;nbsp;{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;vSep = &amp;quot;&amp;quot;&lt;br&gt;
&amp;nbsp;&amp;nbsp;}&lt;br&gt;
&amp;nbsp;&amp;nbsp;Else&lt;br&gt;
&amp;nbsp;&amp;nbsp;{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;vSep = &amp;quot;&amp;quot;&lt;br&gt;
&amp;nbsp;&amp;nbsp;}&lt;br&gt;
&amp;nbsp;&amp;nbsp;vFullName = vLastName + &amp;quot;, &amp;quot; + vMiddleName + vSep + vFirstName&lt;br&gt;
&amp;nbsp;&amp;nbsp;FullName = vFullName&lt;br&gt;

&lt;p class="sbasic"&gt;&lt;b&gt;MiddleName - OnFieldExit&lt;/b&gt;&lt;br&gt;&lt;br&gt;

var vLast as String&lt;br&gt;
var vMiddle as String&lt;br&gt;
var vFirst as String&lt;br&gt;
var vFullName as String&lt;br&gt;
var vSep as String&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;vLast = LastName&lt;br&gt;
&amp;nbsp;&amp;nbsp;vMiddle = MiddleName&lt;br&gt;
&amp;nbsp;&amp;nbsp;vFirst = FirstName&lt;br&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;// Prevents an extra space if no Middle Name&lt;br&gt;
&amp;nbsp;&amp;nbsp;If Len(vMiddleName) = 0&lt;br&gt;
&amp;nbsp;&amp;nbsp;{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;vSep = &lt;br&gt;
&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;Else&lt;br&gt;
&amp;nbsp;&amp;nbsp;{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;vSep = &lt;br&gt;
&amp;nbsp;&amp;nbsp;}&lt;br&gt;
&amp;nbsp;&amp;nbsp;vFullName = vLastName + &amp;quot;, &amp;quot; + vMiddleName + vSep + vFirstName&lt;br&gt;
&amp;nbsp;&amp;nbsp;FullName= vFullName&lt;/p&gt;        


&lt;p class="copy"&gt;&lt;b&gt;Recommended:&lt;/b&gt;
&lt;p class="sbasic"&gt;&lt;b&gt;Global Code&lt;/b&gt;&lt;br&gt;&lt;br&gt;
Subroutine SetFullName()&lt;br&gt;
var vMiddle as String&lt;br&gt;
var vFirst as String&lt;br&gt;
var vFullName as String&lt;br&gt;
var vSep as String&lt;br&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;vLast = LastName&lt;br&gt;
&amp;nbsp;&amp;nbsp;vMiddle = MiddleName&lt;br&gt;
&amp;nbsp;&amp;nbsp;vFirst = FirstName&lt;br&gt;
&amp;nbsp;&amp;nbsp;// Prevents an extra space if no Middle Name&lt;br&gt;
&amp;nbsp;&amp;nbsp;If Len(vMiddleName) = 0&lt;br&gt;
&amp;nbsp;&amp;nbsp;{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;vSep = &amp;quot;&amp;quot;&lt;br&gt;
&amp;nbsp;&amp;nbsp;}&lt;br&gt;
&amp;nbsp;&amp;nbsp;Else&lt;br&gt;
&amp;nbsp;&amp;nbsp;{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;vSep = &amp;quot; &amp;quot;&lt;br&gt;
&amp;nbsp;&amp;nbsp;}&lt;br&gt;
&amp;nbsp;&amp;nbsp;vFullName = vLastName + &amp;quot;, &amp;quot; + vMiddleName + vSep + vFirstName&lt;br&gt;
&amp;nbsp;&amp;nbsp;FullName = vFullName&lt;br&gt;
End subroutine&lt;br&gt;
&lt;br&gt;

&lt;b&gt;LastName - OnFieldExit&lt;/b&gt;
&lt;br&gt;
SetFullName()&lt;br&gt;&lt;br&gt;

&lt;b&gt;FirstName - OnFieldExit&lt;/b&gt;
&lt;br&gt;SetFullName()&lt;br&gt;&lt;br&gt;

&lt;b&gt;MiddleName - OnFieldExit&lt;/b&gt;
&lt;br&gt;SetFullName()&lt;br&gt;&lt;br&gt;

&lt;p class="copy"&gt;&lt;a class="bold_copy"&gt;Rule 6: Be Specific&lt;/a&gt;&lt;br&gt;
It is never a good idea to make a computer quess at what you mean. When performing operations of values of different types, use &lt;i&gt;casting&lt;/i&gt; to make it clear to Sesame
what you want. The casting functions are those like &lt;i&gt;@Str&lt;/i&gt; and &lt;i&gt;@ToNumber&lt;/i&gt;, theat specifically convert a value to a particular type. If you make the computer guess , 10 + "Mary"
may produce a different result than "Mary" + 10.&lt;/p&gt;
&lt;p class="copy"&gt;&lt;b&gt;Not recommended:&lt;/b&gt;&lt;br&gt;
&lt;a class="sbasic"&gt;var vStr as String&lt;br&gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp; vStr = &amp;quot;Mary&amp;quot; + 10
&lt;/a&gt;&lt;/p&gt;
&lt;p class="copy"&gt;&lt;b&gt;Recommended:&lt;/b&gt;&lt;br&gt;
&lt;a class="sbasic"&gt;var vStr as String&lt;br&gt;&lt;br&gt;
	&amp;nbsp;&amp;nbsp; vStr = &amp;quot;Mary&amp;quot; + @Str(10)&lt;br&gt;
	&amp;nbsp;&amp;nbsp; // vStr = "Mary10"
&lt;/a&gt;&lt;/p&gt;

&lt;p class="copy"&gt;While these guidelines may seem unnecessary when you are writing a few simple lines of code, 
          keep in mind that it rarely stops with a few lines. As you learn more about Sesame and get 
          more comfortable with programming, you will want to improve your Application. Many of 
          those improvements are likely to take the form of SBasic code, both in event programming 
          and Mass Updates. As you write more code, and your code becomes more complex, you will be 
          glad that you employed good programming practices right from the beginning.&lt;/p&gt;</description><link>http://www.lantica.com/support/kb/article/86</link><pubDate>Wed, 17 Mar 2010 14:55:49 GMT</pubDate><guid isPermaLink="false">d8cf967165921849da060550d711a230</guid></item><item><title>Will Sesame run on my operating system?</title><description>Sesame is a 32 bit application that runs on the following operating systems:
&lt;ul&gt;
&lt;li&gt;Windows 95&lt;/li&gt;
&lt;li&gt;Windows 98&lt;/li&gt;
&lt;li&gt;Windows NT&lt;/li&gt;
&lt;li&gt;Windows 2000&lt;/li&gt;
&lt;li&gt;Windows ME&lt;/li&gt;
&lt;li&gt;Windows XP&lt;/li&gt;
&lt;li&gt;Windows Vista (32 bit)&lt;/li&gt;
&lt;li&gt;Windows Vista (64 bit as a 32 bit application)&lt;/li&gt;
&lt;li&gt;Windows 7 (32 bit)&lt;/li&gt;
&lt;li&gt;Windows 7 (64 bit as a 32 bit application)&lt;/li&gt;
&lt;/ul&gt;
As well as:
&lt;ul&gt;
&lt;li&gt;Linux (for Intel)&lt;/li&gt;
&lt;/ul&gt;</description><link>http://www.lantica.com/support/kb/article/3</link><pubDate>Thu, 11 Mar 2010 21:15:16 GMT</pubDate><guid isPermaLink="false">1fbaf9c1f652071ed254cb0759fd543c</guid></item><item><title>Merging Your Data Into Word Perfect (Versions 11 &amp; 12)</title><description>&lt;p&gt;1. Export data from Sesame with Field Name Headers&lt;/p&gt;
&lt;p&gt;&lt;img src="/images/Support/screenshots/wm_asciiexport.png"&gt;&lt;/p&gt;
&lt;p&gt;2. Open Corel Word Perfect&lt;/p&gt;
&lt;p&gt;3. In the "Insert" menu select "Spreadsheet/Database" and then click on "Import"&lt;/p&gt;
&lt;p&gt;&lt;img src="/images/Support/screenshots/wm_WP_menu.png"&gt;&lt;/p&gt;
&lt;p&gt;4. From the "Data Type" menu choose "ASCII Delimited Text"&lt;/p&gt;
&lt;p&gt;5. From the "Import as" menu choose "Merge Data File"&lt;/p&gt;
&lt;p&gt;6. In the "Filename" type in or browse for your export file&lt;/p&gt;
&lt;p&gt;7. Set the Field Delimiter to ","&lt;/p&gt;
&lt;p&gt;8. Set the Record Delimiter to "[CR][LF]"&lt;/p&gt;
&lt;p&gt;9. Check the "First record contains field names" checkbox and then click on "OK"&lt;/p&gt;
&lt;p&gt;&lt;img src="/images/Support/screenshots/wm_WP_import.png"&gt;&lt;/p&gt;

&lt;/td&gt;		

&lt;td width="300" valign="top" class="copy"&gt;

&lt;p&gt;10. From the "File menu select "New"&lt;/p&gt;
&lt;p&gt;&lt;img src="/images/Support/screenshots/wm_WP_save.png"&gt;&lt;/p&gt;
&lt;p class="bold_copy"&gt;NOTE: Saving MergeInfo.dat will save all your merge settings so you do not have to repeat the above steps.&lt;/p&gt;
&lt;p&gt;11. From the "File" menu select "New"&lt;/p&gt;
&lt;p&gt;12. From the "Tools" menu select "Merge"&lt;/p&gt;
&lt;p&gt;&lt;img src="/images/Support/screenshots/wm_WP_tools.png"&gt;&lt;/p&gt;
&lt;p&gt;13. Click on the "Form document" button and select "Create Form Document..."&lt;/p&gt;
&lt;p&gt;14. Select the "Associate a data file:" radio button and type or browse for your "MergeInfo.dat" file that was previously saved and then click "OK"&lt;/p&gt;
&lt;p&gt;&lt;img src="/images/Support/screenshots/wm_WP_associate.png"&gt;&lt;/p&gt;
&lt;p&gt;15. Without closing the "Merge" window click on the "Insert Field..." button on the top toolbar and place the fields in the appropiate spots by clicking "Insert", when completed click on "Close"&lt;/p&gt;
&lt;p&gt;&lt;img src="/images/Support/screenshots/wm_WP_insert.png"&gt;&lt;/p&gt;
&lt;p&gt;16. In the "Merge" window click on the "Merge" button&lt;/p&gt;
&lt;p&gt;&lt;img src="/images/Support/screenshots/wm_WP_merge.png"&gt;&lt;/p&gt;</description><link>http://www.lantica.com/support/kb/article/83</link><pubDate>Mon, 21 Dec 2009 21:47:35 GMT</pubDate><guid isPermaLink="false">8b2c631629990e5c37298324ae1f1084</guid></item><item><title>Merging Your Data Into Labels (Microsoft Word 2000)</title><description>&lt;p&gt;1. Export data from Sesame with Field Name Headers&lt;/p&gt;
&lt;p&gt;&lt;img src="/images/Support/screenshots/wm_asciiexport.png"&gt;&lt;/p&gt;
&lt;p&gt;2. Open Microsoft Word&lt;/p&gt;
&lt;p&gt;3. In the "Tools" menu select "Mail Merge..."&lt;/p&gt;
&lt;p&gt;&lt;img src="/images/Support/screenshots/wm_02mailmerge.png"&gt;&lt;/p&gt;
&lt;p&gt;4. Click on the "Create" button and from the provided menu choose "Mailing Labels..."&lt;/p&gt;

&lt;p&gt;5. In the window that pops up select the "Active Window" button&lt;/p&gt;
&lt;p&gt;6. Click on the "Get Data" button and from the provided menu choose "Open Data Source..."&lt;/p&gt;
&lt;p&gt;&lt;img src="/images/Support/screenshots/wm_02getdata.png"&gt;&lt;/p&gt;
&lt;p&gt;7. In the Files of Type: drop down at the bottom choose "All Files (*.*)" and browse to where your ASCII file is and select it&lt;/p&gt;
&lt;p&gt;&lt;img src="/images/Support/screenshots/wm_browse.png"&gt;&lt;/p&gt;
&lt;p&gt;8. Set the Field Delimiter to ","&lt;/p&gt;
&lt;p&gt;9. Set the Record Delimiter to "(enter)" and click "OK"&lt;/p&gt;
&lt;p&gt;&lt;img src="/images/Support/screenshots/wm_delimiter.png"&gt;&lt;/p&gt;
&lt;p&gt;10. Click "Setup Main Document" and choose what label you have and click "OK"&lt;/p&gt;
&lt;p&gt;&lt;img src="/images/Support/screenshots/wm_labeloptions.png"&gt;&lt;/p&gt;
&lt;p&gt;11. Insert your merge fields in the "Sample Label:" that is shown and then click on "OK"&lt;/p&gt;
&lt;p&gt;&lt;img src="/images/Support/screenshots/wm_createlabels.png"&gt;&lt;/p&gt;
&lt;p class="bold_copy"&gt;NOTE: Saving your document will cause Word to remember all your merge settings so you can begin from this step the next time you open your merge document.&lt;/p&gt;
&lt;p&gt;12. Click on "Merge..." and then click on "Merge"&lt;/p&gt;
&lt;p&gt;&lt;img src="/images/Support/screenshots/wm_merge.png"&gt;&lt;/p&gt;
</description><link>http://www.lantica.com/support/kb/article/79</link><pubDate>Mon, 21 Dec 2009 21:47:27 GMT</pubDate><guid isPermaLink="false">5e8c00544f0006d9dd8a978290a22825</guid></item><item><title>Merging Your Data Into Letters (Microsoft Word 2000)</title><description>&lt;p&gt;1. Export data from Sesame with Field Name Headers&lt;/p&gt;
&lt;p&gt;&lt;img src="/images/Support/screenshots/wm_asciiexport.png"&gt;&lt;/p&gt;
&lt;p&gt;2. Open Microsoft Word&lt;/p&gt;
&lt;p&gt;3. In the "Tools" menu select "Mail Merge..."&lt;/p&gt;
&lt;p&gt;&lt;img src="/images/Support/screenshots/wm_02mailmerge.png"&gt;&lt;/p&gt;
&lt;p&gt;4. Click on the "Create" button and from the provided menu choose "Form Letters..."&lt;/p&gt;
&lt;p&gt;&lt;img src="/images/Support/screenshots/wm_02formletter.png"&gt;&lt;/p&gt;
&lt;p&gt;5. In the window that pops up select the "Active Window" button&lt;/p&gt;
&lt;p&gt;6. Click on the "Get Data" button and from the provided menu choose "Open Data Source..."
&lt;p&gt;&lt;img src="/images/Support/screenshots/wm_02datasource.png"&gt;&lt;/p&gt;
&lt;p&gt;7. In the Files of Type: drop down at the bottom choose "All Files (*.*)" and browse to where your ASCII file is and select it&lt;/p&gt;
&lt;p&gt;&lt;img src="/images/Support/screenshots/wm_browse.png"&gt;&lt;/p&gt;
&lt;p&gt;8. Set the Field Delimiter to ","&lt;/p&gt;
&lt;p&gt;9. Set the Record Delimiter to "(enter)" and click "OK"&lt;/p&gt;
&lt;p&gt;&lt;img src="/images/Support/screenshots/wm_delimiter.png"&gt;&lt;/p&gt;
&lt;p&gt;10. Click "Edit Main Document"&lt;/p&gt;
&lt;p&gt;11. Insert your merge fields in the document by selecting the "Insert Merge Field" and then selecting the appropriate fields&lt;/p&gt;
&lt;p&gt;&lt;img src="/images/Support/screenshots/wm_02insert.png"&gt;&lt;/p&gt;
&lt;p class="bold_copy"&gt;NOTE: Saving your document will cause Word to remember all your merge settings so you can begin from this step the next time you open your merge document.&lt;/p&gt;
&lt;p&gt;12. In the "Tools" menu select "Mail Merge..."&lt;/p&gt;
&lt;p&gt;&lt;img src="/images/Support/screenshots/wm_02mailmerge.png"&gt;&lt;/p&gt;
&lt;p&gt;13. In the "Mail Merge Helper" select the "Merge..." button near the bottom and then select "Merge" button in the window that pops up&lt;/p&gt;
&lt;p&gt;&lt;img src="/images/Support/screenshots/wm_merge.png"&gt;&lt;/p&gt;</description><link>http://www.lantica.com/support/kb/article/80</link><pubDate>Mon, 21 Dec 2009 21:47:14 GMT</pubDate><guid isPermaLink="false">b62bad36eb4260a8c3b05779c6cdbcc0</guid></item><item><title>Merging Your Data Into Letters (Microsoft Word 2003)</title><description>&lt;p&gt;1. Export data from Sesame with Field Name Headers&lt;/p&gt;
&lt;p&gt;&lt;img src="/images/Support/screenshots/wm_asciiexport.png"&gt;&lt;/p&gt;
&lt;p&gt;2. Open Microsoft Word&lt;/p&gt;
&lt;p&gt;3. In the "Tools" menu select "Letters and Mailings" and then choose "Mail Merge Wizard..."&lt;/p&gt;
&lt;p&gt;&lt;img src="/images/Support/screenshots/wm_03mailmerge.png"&gt;&lt;/p&gt;
&lt;p&gt;4. On the right hand side select the "Next: Starting documents" button&lt;/p&gt;
&lt;p&gt;5. On the right hand side select the "Next: Select recipients" button&lt;/p&gt;
&lt;p&gt;6. On the right hand side select the "Browse" button&lt;/p&gt;
&lt;p&gt;7. In the Files of Type: drop down at the bottom choose "All Files (*.*)" and browse to where your ASCII file is and select it&lt;/p&gt;
&lt;p&gt;&lt;img src="/images/Support/screenshots/wm_browse.png"&gt;&lt;/p&gt;
&lt;p&gt;8. Set the Field Delimiter to ","&lt;/p&gt;
&lt;p&gt;9. Set the Record Delimiter to "(enter)" and click on "OK"&lt;/p&gt;
&lt;p&gt;&lt;img src="/images/Support/screenshots/wm_delimiter.png"&gt;&lt;/p&gt;
&lt;p&gt;10. On the window that pops up select "OK"&lt;/p&gt;
&lt;p&gt;&lt;img src="/images/Support/screenshots/wm_03recipients.png"&gt;&lt;/p&gt;
&lt;p&gt;11. On the right hand side select the "Next: Write your letter" button&lt;/p&gt;
&lt;p&gt;12. Write out your letter as you wish and then click on the "More Items..." button on the right hand side&lt;/p&gt;
&lt;p&gt;&lt;img src="/images/Support/screenshots/wm_03insert.png"&gt;&lt;/p&gt;
&lt;p&gt;13. Insert your database fields in the appropriate spots and when you are done, click the "Close" button&lt;/p&gt;
&lt;p class="bold_copy"&gt;NOTE: Saving your document will cause Word to remember all your merge settings so you can begin from this step the next time you open your merge document.&lt;/p&gt;
&lt;p&gt;14. On the right hand side select the "Next: Preview your letters" button&lt;/p&gt;
&lt;p&gt;15. On the right hand side select the "Next: Complete the merge" button&lt;/p&gt;
&lt;p&gt;16. Click "Print..." to print the letters, or click "Edit individual letters..." to merge to a new document&lt;/p&gt;
&lt;p&gt;&lt;img src="/images/Support/screenshots/wm_03endmerge.png"&gt;&lt;/p&gt;</description><link>http://www.lantica.com/support/kb/article/82</link><pubDate>Mon, 21 Dec 2009 21:47:05 GMT</pubDate><guid isPermaLink="false">bc9647e5911d1abfb8f55e6c06e89f5d</guid></item><item><title>Merging Your Data Into Labels (Microsoft Word 2003)</title><description>&lt;p&gt;1. Export data from Sesame with Field Name Headers&lt;/p&gt;
&lt;p&gt;&lt;img src="/images/Support/screenshots/wm_asciiexport.png"&gt;&lt;/p&gt;
&lt;p&gt;2. Open Microsoft Word&lt;/p&gt;
&lt;p&gt;3. In the "Tools" menu select "Letters and Mailings" and then choose "Mail Merge Wizard..."&lt;/p&gt;
&lt;p&gt;&lt;img src="/images/Support/screenshots/wm_03mailmerge.png"&gt;&lt;/p&gt;
&lt;p&gt;4. On the right hand side select the "Labels" radio button and then near the bottom select "Next: Starting document"&lt;/p&gt;
&lt;p&gt;&lt;img src="/images/Support/screenshots/wm_03labelsradio.png"&gt;&lt;/p&gt;
&lt;p&gt;5. On the right hand side select the "Label options..." button&lt;/p&gt;
&lt;p&gt;6. Choose the label that you will be using and select "OK"&lt;/p&gt;
&lt;p&gt;&lt;img src="/images/Support/screenshots/wm_labeloptions2.png"&gt;&lt;/p&gt;
&lt;p&gt;7. On the right hand side select the "Next: Select recipients..." button&lt;/p&gt;
&lt;p&gt;8. On the right hand side select the "Browse" button&lt;/p&gt;
&lt;p&gt;9. In the Filed of Type: drop down at the bottom choose "All Files (*.*)" and browse to where your ASCII file is and select it&lt;/p&gt;
&lt;p&gt;&lt;img src="/images/Support/screenshots/wm_browse.png"&gt;&lt;/p&gt;

&lt;p&gt;10. Set the Field Delimiter to ","&lt;/p&gt;
&lt;p&gt;11. Set the Record Delimiter to "(enter)" and click on "OK"&lt;/p&gt;
&lt;p&gt;&lt;img src="/images/Support/screenshots/wm_delimiter.png"&gt;&lt;/p&gt;
&lt;p&gt;12. On the window that pops up select "OK"&lt;/p&gt;
&lt;p&gt;&lt;img src="/images/Support/screenshots/wm_03recipients.png"&gt;&lt;/p&gt;
&lt;p&gt;13. On the right hand side select the "Next: Arrange your labels" button&lt;/p&gt;
&lt;p&gt;14. Click into the first label on your document and then on the right hand side select the "More Items..." button&lt;/p&gt;
&lt;p&gt;15. Insert your database fields in the appropriate spots by selecting the field and then selecting the "Insert" button, when completed click on the "Close" button&lt;/p&gt;
&lt;p&gt;&lt;img src="/images/Support/screenshots/wm_03insert.png"&gt;&lt;/p&gt;
&lt;p&gt;16. On the right hand side click the "Update all labels" button&lt;/p&gt;
&lt;p class="bold_copy"&gt;NOTE: Saving your document will cause Word to remember all your merge settings so you can begin from this step the next time you open your merge document.&lt;/p&gt;
&lt;p&gt;17. On the right hand side select the "Next: Preview your labels" button&lt;/p&gt;
&lt;p&gt;18. On the right hand side select the "Next: Complete the merge" button&lt;/p&gt;
&lt;p&gt;19. Click "Print" to print the letters, or click "Edit individual labels" to merge to a new document&lt;/p&gt;
&lt;p&gt;&lt;img src="/images/Support/screenshots/wm_03endmerge.png"&gt;&lt;/p&gt;</description><link>http://www.lantica.com/support/kb/article/81</link><pubDate>Mon, 21 Dec 2009 21:46:53 GMT</pubDate><guid isPermaLink="false">d67b301744de7d994754f48b64a922f0</guid></item><item><title>Merging Your Data Into Letters (Microsoft Word 2007)</title><description>&lt;p&gt;1. Export data from Sesame with Field Name Headers&lt;/p&gt;
&lt;p&gt;&lt;img src="/images/Support/screenshots/wm_asciiexport.png"&gt;&lt;/p&gt;
&lt;p&gt;2. Open Microsoft Word&lt;/p&gt;
&lt;p&gt;3. Click the "Mailings" toolbar at the top, Click on "Start Mail Merge" and choose "Letters".&lt;/p&gt;
&lt;p&gt;&lt;img src="/images/Support/screenshots/wm_07mailmerge.png"&gt;&lt;/p&gt;
&lt;p&gt;4. At the top click on "Select Recipients" and choose "Use Existing List..."&lt;/p&gt;
&lt;p&gt;5. In the Files of Type: drop down at the bottom choose "All Files (*.*)" and browse to where your ASCII file is and select it&lt;/p&gt;
&lt;p&gt;&lt;img src="/images/Support/screenshots/wm_07browse.png"&gt;&lt;/p&gt;
&lt;p&gt;5. Write out your letter as you wish and then click on the "Insert Merge Field" button at the top&lt;/p&gt;
&lt;p&gt;&lt;img src="/images/Support/screenshots/wm_03insert.png"&gt;&lt;/p&gt;
&lt;p&gt;6. Insert your database fields in the appropriate spots and when you are done, click the "Close" button&lt;/p&gt;
&lt;p class="bold_copy"&gt;NOTE: Saving your document will cause Word to remember all your merge settings so you can begin from this step the next time you open your merge document.&lt;/p&gt;
&lt;p&gt;7. Click "Finish &amp;amp; Merge " at the top. Choose "Print Documents..." to print the letters, or click "Edit Individual Documents..." to merge to a new document&lt;/p&gt;
&lt;p&gt;&lt;img src="/images/Support/screenshots/wm_07endmerge.png"&gt;&lt;/p&gt;</description><link>http://www.lantica.com/support/kb/article/135</link><pubDate>Mon, 21 Dec 2009 21:46:45 GMT</pubDate><guid isPermaLink="false">3292e0d67ed11466f08a1485c3011b83</guid></item><item><title>Merging Your Data Into Labels (Microsoft Word 2007)</title><description>&lt;p&gt;1. Export data from Sesame with Field Name Headers&lt;/p&gt;
&lt;p&gt;&lt;img src="/images/Support/screenshots/wm_asciiexport.png"&gt;&lt;/p&gt;
&lt;p&gt;2. Open Microsoft Word&lt;/p&gt;
&lt;p&gt;3. Click the "Mailings" toolbar at the top, Click on "Start Mail Merge" and choose "Letters".&lt;/p&gt;
&lt;p&gt;&lt;img src="/images/Support/screenshots/wm_07mailmergelabels.png"&gt;&lt;/p&gt;
&lt;p&gt;4. Choose the label that you will be using and select "OK"&lt;/p&gt;
&lt;p&gt;&lt;img src="/images/Support/screenshots/wm_07labeloptions.png"&gt;&lt;/p&gt;
&lt;p&gt;5. At the top click on "Select Recipients" and choose "Use Existing List..."&lt;/p&gt;
&lt;p&gt;6. In the Files of Type: drop down at the bottom choose "All Files (*.*)" and browse to where your ASCII file is and select it&lt;/p&gt;
&lt;p&gt;&lt;img src="/images/Support/screenshots/wm_07browse.png"&gt;&lt;/p&gt;
&lt;p&gt;7. Click into the first label on your document and then on the toolbar at the top click on "Insert Merge Fields"&lt;/p&gt;
&lt;p&gt;8. Insert your database fields in the appropriate spots by selecting the field and then selecting the "Insert" button, when completed click on the "Close" button&lt;/p&gt;
&lt;p&gt;&lt;img src="/images/Support/screenshots/wm_03insert.png"&gt;&lt;/p&gt;
&lt;p&gt;9. On the toolbar at the top click on "Update Labels"&lt;/p&gt;
&lt;p class="bold_copy"&gt;NOTE: Saving your document will cause Word to remember all your merge settings so you can begin from this step the next time you open your merge document.&lt;/p&gt;
&lt;p&gt;10. Click "Finish &amp;amp; Merge " at the top. Choose "Print Documents..." to print the letters, or click "Edit Individual Documents..." to merge to a new document&lt;/p&gt;
&lt;p&gt;&lt;img src="/images/Support/screenshots/wm_07endmerge.png"&gt;&lt;/p&gt;</description><link>http://www.lantica.com/support/kb/article/136</link><pubDate>Mon, 21 Dec 2009 21:46:36 GMT</pubDate><guid isPermaLink="false">79091d98a0744fb1575d97bcea31bbe5</guid></item><item><title>How do I change the port number for @SendMail()?</title><description>By default most SMTP servers accept connections on port 25 for sending email. Lately however many companies have been switching to a different port to try and combat spam email. If your SMTP server uses a port other than 25 you will need to change a file on your computer so the SBasic command @SendMail() will work. 

The file you will need to edit is the services file which can be found in the C:\WINDOWS\system32\drivers\etc. Open this file with Notepad. You will see a line that says

smtp               25/tcp    mail                   #Simple Mail Transfer Protocol

Change the 25 to the port number that your SMTP server uses and then click File-&gt;Save. The computer may need to be restarted in order for this change to take effect. </description><link>http://www.lantica.com/support/kb/article/134</link><pubDate>Mon, 21 Dec 2009 20:33:26 GMT</pubDate><guid isPermaLink="false">507f6ba5980769ce6ee90c19ad5ad1e7</guid></item><item><title>@SendMail() Error Codes. </title><description>@Sendmail is an SBasic programming command that sends an email message using the information in your database. @SendMail returns 0 if the function succeeded (the email was sent). A non-zero return value indicates a failure. The list of these return values are below. &lt;BR&gt;
&lt;BR&gt;
&lt;B&gt;-1&lt;/B&gt;	Unable to connect to SMTP server on SMTP port. Check internet connection, spelling of SMTP server name and SMTP port number of SMTP server. &lt;BR&gt;
&lt;B&gt;-2&lt;/B&gt;	Failure from SMTP server after initial connection (after HELO was sent). Possible causes are trying to access a SMTP server that requires a login and password without specifying one. 
&lt;BR&gt;
&lt;B&gt;-3&lt;/B&gt;	Failure from SMTP server after sending from address. Check the From address to verify that it is a valid email address.
&lt;BR&gt;
&lt;B&gt;-4&lt;/B&gt;	Failure from SMTP server after sending recipient list. Check the To, CC and BCC addresses to verify that they are a valid email address.
&lt;BR&gt;
&lt;B&gt;-5&lt;/B&gt;	Failure from SMTP server after sending body and subject of email
&lt;BR&gt;
&lt;B&gt;-6&lt;/B&gt;	Failure to open attachment files for sending. Check file path, that the file exists and that the current user has read permission to the file
&lt;BR&gt;
&lt;B&gt;-7&lt;/B&gt;	Failure from SMTP server after sending end of message tag. 
&lt;BR&gt;
&lt;B&gt;-8&lt;/B&gt;	Failure from SMTP server after sending log off command. 
&lt;BR&gt;
&lt;B&gt;-9&lt;/B&gt;	Authorization failure. Check spelling of username and password
&lt;BR&gt;</description><link>http://www.lantica.com/support/kb/article/133</link><pubDate>Mon, 21 Dec 2009 17:42:28 GMT</pubDate><guid isPermaLink="false">74660240a6931d09e0e6612a77f9347b</guid></item><item><title>Programmed Retrieve Specs</title><description>&lt;p class="bold_copy"&gt;What is a Programmed Retrieve?&lt;/p&gt;

&lt;p class="copy"&gt;Q&amp;As database search options are extensive. 
    When these run out you can always use a &lt;a class="copy_italic"&gt;programmed&lt;/a&gt; Retrieve Spec. 
    This more recent capability programmable Retrieves, added in Q&amp;A version 
    4.0is not used nearly as much as it ought to be. The good news is that 
    Sesame supports Retrieve Spec programming just like Q&amp;A. There are some 
    relatively minor differences between the two, however. I want to tell you 
    what these are, and in the process show you how you can use Retrieve Spec 
    programming to good effect.&lt;/p&gt;
    
&lt;p class="bold_copy"&gt;Retrieve Programming: two methods&lt;p&gt;

&lt;p class="copy"&gt;Retrieve programming must be enclosed by what are called French braces { 
    }. They contain the programming expression you want Q&amp;A to evaluate, which 
    will determine which record or records Q&amp;A returns to your desktop, or to a 
    mail merge, Mass Update, Report or other task that includes record selection 
    as part of it. Your expression can take one of two forms: Either a value, 
    such as a number, a date or a text string, or a Boolean expression that 
    evaluates to either True or False. (Q&amp;A's &amp;quot;Yes/No&amp;quot; fields are Boolean). As 
    an example of a value expression, lets take a search for dates falling due 
    within the next seven days, where the due date will always be in the future. 
    At the Retrieve Spec, you could type the following into the Due Date or 
    similarly named field, as long as its a proper date type field:&lt;/p&gt;

&lt;p class="bold_copy"&gt;&amp;lt; { @Date + 7 }&lt;/p&gt;

&lt;p class="copy"&gt;Notice that the less-than operator (&amp;lt;) is 
    outside the main expression enclosed by the French braces. In this case, the 
    expression is evaluated by Q&amp;A and returns a date seven days in the future 
    from the current date. When coupled with the &amp;lt;, this tells Q&amp;A to find all 
    the records where the Due Date field contains a date that is earlier than 
    the date that is seven days from today. Another example would be to find 
    people with four-character surnames:&lt;/p&gt;

&lt;p class="bold_copy"&gt;Surname: ={@Len(Surname) = 4}&lt;/p&gt;

&lt;p class="copy"&gt;This would produce records containing surnames such as Bird and Shaw.&lt;/p&gt;

&lt;p class="copy"&gt;This is the first way to use Retrieve programming. You could call it 
    implied comparison, since the expression 
    directly relates to the contents of the Retrieve Spec field in which youve 
    typed it.&lt;/p&gt;

&lt;p class="copy"&gt;The second methodcall it truth-of-expressionis independent of 
    the field into which it is typed. It 
    can be considered universal to all the fields on the form. It starts with 
    the French braces:&lt;/p&gt;
    
&lt;p class="bold_copy"&gt;Surname: {@Len(Surname) = 4}&lt;/p&gt;

&lt;p class="copy"&gt;When the expression inside the French braces 
    is evaluated and then tested against a particular record, it will result in 
    either a True or a False. If true, the record is included; if false it 
    is not. A programming expression used in this way does not relate to the 
    field it happens to be put in. Place it in a different field and the result 
    will be the same.&lt;/p&gt;
    
&lt;p class="bold_copy"&gt;About Sesame&lt;/p&gt;

&lt;p class="copy"&gt;Q&amp;A and Sesame support both these methods. But there is a difference you 
    need to know.&lt;/p&gt;

&lt;p class="copy"&gt;We all know that Q&amp;A is a very forgiving 
    product. You can put Dont Know in a date field. You can name a field 
    150 and have a programming statement that says:&lt;/p&gt;
    
&lt;p class="bold_copy"&gt;Total = #200 + 150&lt;/p&gt;

&lt;p class="copy"&gt;Q&amp;A will use the value thats in field 150 
    rather than add the number 150. Thats neat. But its extremely difficult to 
    replicate in a modern program that has a wider scope than Q&amp;A.&lt;/p&gt;

&lt;p class="copy"&gt;Q&amp;As forgiving nature extends to Retrieve 
    Spec programming as well. Youve seen these two methods. If you use the 
    first method, your programming expression produces a value. If you want that 
    value to be compared to a field, you can put it in that field and put an 
    equal sign in front of the French braces. In Q&amp;A, if you omit the equal 
    sign, Q&amp;A will handle it anyway. Likewise if you do the opposite, and put an 
    equal sign in front of the French braces when using method two, Q&amp;A 
    accommodates these errors. Sesame doesn't.&lt;/p&gt;
    
&lt;p class="copy"&gt;The following are valid in Sesame:&lt;/p&gt;

&lt;p class="bold_copy"&gt;Rating: ={Key - 14}&lt;/p&gt;

&lt;p class="bold_copy"&gt;Any Field: {Rating = Key - 14}&lt;/p&gt;

&lt;p class="copy"&gt;However, if you swap the equal sign to the 
    second example, it is incorrect syntax and wont work in Sesame, even though 
    this improper practice is tolerated in Q&amp;A.&lt;/p&gt;
    
&lt;p class="copy"&gt;One thing you wont be able to carry forward 
    to Sesame is the use of logical field numbers in programming. You have to 
    use field names, plain and simple. Logical field numbers are actually a 
    carryover from Q&amp;A 3.0, where you couldnt use field names in programming 
    and were forced to assign a logical field number to any field you wanted to 
    reference in programming.&lt;/p&gt;

&lt;p class="copy"&gt;Again, this can be justified by stating that 
    Q&amp;A is extravagantly accommodating regarding such numbering. The numbers 
    used are just for the Program Spec. So, you can have a numbering scheme in 
    the Program Spec, another in the Navigation Spec, another in each of many 
    saved Mass Update Specs, more yet in saved Retrieve Specs, and so on.&lt;/p&gt;
    
&lt;p class="copy"&gt;Using field names is ultimately just simpler&lt;/p&gt;

&lt;p class="bold_copy"&gt;Why would you want Retrieve Spec programming?&lt;/p&gt;

&lt;p class="copy"&gt;Being able to use Retrieval expressions can come in handy in various 
    situations. They come into their own when you use them as Saved Retrieves. 
    This can be as standalone Retrieve Specs, or as the Retrieve Spec saved as 
    part of Reports or Print Specs.&lt;/p&gt;
    
&lt;p class="bold_copy"&gt;Compare to current date&lt;/p&gt;

&lt;p class="copy"&gt;As you saw in the first example, you can compare a date field to the current 
    date. This is invaluable for finding records for the next week, for the last 
    14 days, for next month, for this month, for the past 90 days, and so forth. 
    You dont have to type in a new range of dates every time you perform the 
    task, such as:&lt;/p&gt;

&lt;p class="bold_copy"&gt;Date Due: &amp;gt;=8/14/2003..&amp;lt;= 8/21/2003&lt;/p&gt;

&lt;p class="copy"&gt;or simply this:&lt;/p&gt;

&lt;p class="bold_copy"&gt;Date Due: 8/14/2003..8/21/2003&lt;/p&gt;

&lt;p class="copy"&gt;Here are a few more examples of using Retrieve Spec expressions with date ranges:&lt;/p&gt;

&lt;p class="bold_copy"&gt;{JobDate &amp;gt;= @Date - 7 And JobDate &amp;lt;=@Date + 7}&lt;/p&gt;

&lt;p class="copy"&gt;(JobDate 1 week either side of today.)&lt;/p&gt;

&lt;p class="bold_copy"&gt;{@Month(JobDate) = @Month(@Date) And @Yr(JobDate) = @Yr(@Date)}&lt;/p&gt;

&lt;p class="copy"&gt;(JobDate this month.)&lt;/p&gt;

&lt;p class="bold_copy"&gt;{@Replace(DOB, @Yr(DOB), @Yr(@Date)) &amp;gt;= @Date and @Replace(DOB, @Yr(DOB), @Yr(@Date)) &amp;lt; @Date + 7}&lt;/p&gt;

&lt;p class="bold_copy"&gt;(Birthday (DOB) within the next week.)&lt;/p&gt;

&lt;p class="bold_copy"&gt;Searching for non-standard characters&lt;/p&gt;


&lt;p class="copy"&gt;Retrieve Spec programming can help you find characters that shouldn't be in a field.  For example, to search for &amp;ntilde; in a field name Reading1:&lt;/p&gt;

&lt;p class="bold_copy"&gt;{@Instr(Reading1, @Chr(241)) &amp;gt; 0}&lt;/p&gt;

&lt;p class="bold_copy"&gt;Complex string manipulation&lt;/p&gt;

&lt;p class="copy"&gt;To find records where the third-from-last character in the Item field is a backslash:&lt;/p&gt;

&lt;p class="bold_copy"&gt;{@Mid(Item, @Len(Item)-2, 1) = \}&lt;/p&gt;

    
&lt;p class="copy"&gt;To find field values of a certain length&lt;/p&gt;

&lt;p class="copy"&gt;Short, or especially, long values, which 
    might cause problems with mailing labels, merge documents or exports:&lt;/p&gt;

&lt;p class="bold_copy"&gt;{@Len(Comments) &amp;gt; 255}&lt;/p&gt;

&lt;p class="copy"&gt;Although the @Len function is commonly used 
    to determine the length of a text string, it can also be used though to find 
    the length of a number field. An integer from 0 to 9 will have a length of 
    1, an integer from 10 to 99 will have a length of 2, and so forth. A 
    definite case of a solution in search of a problem!&lt;/p&gt;
    
&lt;p class="bold_copy"&gt;Mixed search logic&lt;/p&gt;

&lt;p class="copy"&gt;Where Retrieve Spec programming really comes into its own, is where you have 
    mixed And and Or conditions across fields. Such retrieves are impossible 
    to do without programming.&lt;/p&gt;
    
&lt;p class="copy"&gt;The best example is the Chase Creditors 
    situation. You want to print out a list of, or send letters to, all those 
    people who are overdue on their payments. Who do you the send the letters to?&lt;/p&gt;

&lt;p class="copy"&gt;You want those who are overdue a long time 
    who owe a moderate amount, and you also want those who owe you a lot even if 
    they are less severely overdue. In Retrieve Spec terms you want:&lt;/p&gt;

&lt;p class="bold_copy"&gt;Overdue moderate time AND amount due is large&lt;/p&gt;

&lt;p class="copy"&gt;or...&lt;/p&gt;

&lt;p class="bold_copy"&gt;Overdue long time AND amount due is moderate&lt;/p&gt;

&lt;p class="copy"&gt;You need criteria in two fields, and you 
    need a mixed And and Or across them. Assuming theres a Date Paid which 
    is blank if not paid, and fields for Invoice Date and Amount, the programmed 
    Retrieve would look like this:&lt;/p&gt;

&lt;p class="bold_copy"&gt;Date Paid:&lt;/p&gt;

&lt;p class="bold_copy"&gt;Any Field: { (Invoice Date &amp;lt; @Date-30 AND Amount &amp;gt; 5000 ) OR (Invoice Date &amp;lt; @Date - 60 AND Amount &amp;gt; 2000 ) }&lt;/p&gt;

&lt;p class="copy"&gt;To repeatyou create and then save these 
    Retrieve Spec programs, either with Reports or as standalone Saved Retrieve 
    Specs. The example above will produce different records each day because the 
    dates are being compared to the current date, no matter what date that is.&lt;/p&gt;
    
&lt;p class="copy"&gt;Furthermore, all these programmed 
    Retrievesif they dont start with an equals sign, and if they use Field 
    Nameswill not only translate into Sesame from your Q&amp;A database, but will 
    work in Sesame to give you the same consistent results.&lt;/p&gt;

&lt;p class="bold_copy"&gt;New simple case-sensitive search support&lt;/p&gt;
&lt;p class="copy"&gt;Q&amp;A offers you a way to perform a case-sensitive search: but it's pretty 
    clumsy and hardly anyone knows it. Sesame does very much better. In Sesame, 
    all you have to do is to prefix your retrieve parameter with the ' symbol 
    (called an apostrophe), and the whole text string is searched case sensitive. So, 
    to find &amp;quot;BBC&amp;quot; in lower case:&lt;/p&gt;

&lt;p class="bold_copy"&gt;Company: 'bbc&lt;/p&gt;

&lt;p class="copy"&gt;You'll get a match on bbc but not BBC or Bbc&lt;/p&gt;

&lt;p class="copy"&gt;This article by Alec Mulvey is adapted from one published in the August 2003 
    issue of &lt;a class="copy_italic"&gt;The Quick Answer&lt;/a&gt;.&lt;/p&gt;
</description><link>http://www.lantica.com/support/kb/article/87</link><pubDate>Fri, 04 Dec 2009 14:26:49 GMT</pubDate><guid isPermaLink="false">3e4d04546bab837bdb08a35cf4502a68</guid></item><item><title>Reserved Words</title><description>&lt;table border="0" cellpadding="2" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="525"&gt;
&lt;tr&gt;&lt;td width="100%" class="copy"&gt;
The following words are reserved by Sesame. You cannot use them as the 
name of something else. Sesame is case-insensitive, so 'clear', 'CLEAR' and 'Clear' are 
all the same reserved word.&lt;br&gt;&lt;br&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;table border="1" cellspacing="0" cellpadding="0" style="border-collapse:collapse;mso-padding-alt:0in 5.4pt 0in 5.4pt" class="copy"&gt;

&lt;tr&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;@&lt;/td&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;@Ab&lt;/td&gt;

&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;@Abs&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;@Ad&lt;/td&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;@Add&lt;/td&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;@As&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;@Asc&lt;/td&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;@Askuser&lt;/td&gt;

&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;@Av&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;@Avg&lt;/td&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;@Beenhere&lt;/td&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;@Cgr&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;@Ch&lt;/td&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;@Chr&lt;/td&gt;

&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;@Closecommandarea&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;@Color&lt;/td&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;@Currentelement&lt;/td&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;@D&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;@Da&lt;/td&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;@Date&lt;/td&gt;

&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;@De&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;@Decimals&lt;/td&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;@Del&lt;/td&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;@Di&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;@Ditto&lt;/td&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;@Dm&lt;/td&gt;

&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;@Dom&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;@Dow&lt;/td&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;@Dow$&lt;/td&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;@Dw&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;@Dw$&lt;/td&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;@Error&lt;/td&gt;

&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;@Ex&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;@Exit&lt;/td&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;@Exp&lt;/td&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;@Fedit&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;@Field&lt;/td&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;@Filename&lt;/td&gt;

&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;@Fn&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;@Formfieldvalue&lt;/td&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;@Formresultsetcurrentposition&lt;/td&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;@Formresultsettotal&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;@Frac&lt;/td&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;@Fv&lt;/td&gt;

&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;@Globalvalue&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;@Group&lt;/td&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;@Height&lt;/td&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;@Help&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;@Hgt&lt;/td&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;@Hp&lt;/td&gt;

&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;@In&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;@Insert&lt;/td&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;@Instr&lt;/td&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;@Int&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;@Ir&lt;/td&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;@It&lt;/td&gt;

&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;@Label&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;@Layout&lt;/td&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;@Left&lt;/td&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;@Len&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;@Loadcopyspec&lt;/td&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;@Loadexportspec&lt;/td&gt;

&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;@Loadimportspec&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;@Loadmassupdatespec&lt;/td&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;@Loadretrievespec&lt;/td&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;@Loadsortspec&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;@Lookup&lt;/td&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;@Lookupr&lt;/td&gt;

&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;@Lt&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;@Lu&lt;/td&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;@Lur&lt;/td&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;@Macro&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;@Max&lt;/td&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;@Md&lt;/td&gt;

&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;@Mid&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;@Min&lt;/td&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;@Mn&lt;/td&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;@Mod&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;@Modified&lt;/td&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;@Month&lt;/td&gt;

&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;@Month$&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;@Msg&lt;/td&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;@Msgbox&lt;/td&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;@Mt&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;@Mt$&lt;/td&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;@Mx&lt;/td&gt;

&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;@Newline&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;@Nl&lt;/td&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;@Nmb&lt;/td&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;@Notifyform&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;@Num&lt;/td&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;@Number&lt;/td&gt;

&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;@Pageextentx&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;@Pageextenty&lt;/td&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;@Platform&lt;/td&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;@Play&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;@Pmt&lt;/td&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;@Popupmenu&lt;/td&gt;

&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;@Pv&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;@Readonly&lt;/td&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;@Recordmodifieddate&lt;/td&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;@Recordmodifiedtime&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;@Replace&lt;/td&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;@Replfir&lt;/td&gt;

&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;@Repllas&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;@Rest&lt;/td&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;@Resultsetcurrentposition&lt;/td&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;@Resultsettotal&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;@Right&lt;/td&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;@Rnd&lt;/td&gt;

&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;@Round&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;@Rt&lt;/td&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;@Save&lt;/td&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;@Select&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;@Selecttreeitem&lt;/td&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;@Sendmail&lt;/td&gt;

&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;@Sgn&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;@Shell&lt;/td&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;@Sq&lt;/td&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;@Sqrt&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;@Std&lt;/td&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;@Str&lt;/td&gt;

&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;@Sum&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;@T&lt;/td&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;@TD&lt;/td&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;@Text&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;@Time&lt;/td&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;@TM&lt;/td&gt;

&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;@Tme&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;@TN&lt;/td&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;@Todate&lt;/td&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;@Tomoney&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;@Tonumber&lt;/td&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;@Totime&lt;/td&gt;

&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;@Toyesno&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;@TT&lt;/td&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;@Txt&lt;/td&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;@TY&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;@Ud&lt;/td&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;@Update&lt;/td&gt;

&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;@Us&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;@Userid&lt;/td&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;@Userselect&lt;/td&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;@Usl&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;@Var&lt;/td&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;@Visibility&lt;/td&gt;

&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;@Width&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;@Wth&lt;/td&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;@Xlookup&lt;/td&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;@Xlookupr&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;@Xlr&lt;/td&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;@Xlu&lt;/td&gt;

&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;@Xpos&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;@Xus&lt;/td&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;@Xuserselect&lt;/td&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;@Xuserselectr&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;@Xusr&lt;/td&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;@Year&lt;/td&gt;

&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;@Ypos&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;@Yr&lt;/td&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;And&lt;/td&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;Array&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;As&lt;/td&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;Beenhere&lt;/td&gt;

&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;Begin&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;Boolean&lt;/td&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;Booleanelement&lt;/td&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;Char&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;Charelement&lt;/td&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;Clear&lt;/td&gt;

&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;Closecommandarea&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;Cls&lt;/td&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;Createnewrecord&lt;/td&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;Date&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;Dateelement&lt;/td&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;Dimlimit&lt;/td&gt;

&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;Dims&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;Double&lt;/td&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;Doubleelement&lt;/td&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;Downto&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;Elementtype&lt;/td&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;Else&lt;/td&gt;

&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;End&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;Eq&lt;/td&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;Exit&lt;/td&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;False&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;Fileclose&lt;/td&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;Filedelete&lt;/td&gt;

&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;Fileexists&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;Filegeterrormsg&lt;/td&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;Filegetlasterror&lt;/td&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;Fileopen&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;Filepos&lt;/td&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;Filereadchar&lt;/td&gt;

&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;Filereadln&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;Fileseek&lt;/td&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;Filesize&lt;/td&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;Filewrite&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;Filewriteln&lt;/td&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;Finishpage&lt;/td&gt;

&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;For&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;Forceredraw&lt;/td&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;Formfieldvalue&lt;/td&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;Formresultsetcurrentposition&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;Function&lt;/td&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;Ge&lt;/td&gt;

&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;Globalvalue&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;Gosub&lt;/td&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;Goto&lt;/td&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;Gt&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;Height&lt;/td&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;Hgt&lt;/td&gt;

&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;If&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;Int&lt;/td&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;Intelement&lt;/td&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;Label&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;Le&lt;/td&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;Loiter&lt;/td&gt;

&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;Lookup&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;Lookupr&lt;/td&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;Lt&lt;/td&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;Lu&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;Lur&lt;/td&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;Navigate&lt;/td&gt;

&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;Ne&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;Newpage&lt;/td&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;Next&lt;/td&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;No&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;Not&lt;/td&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;Notifyform&lt;/td&gt;

&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;Of&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;On&lt;/td&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;Or&lt;/td&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;Printstring&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;Random&lt;/td&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;Readchar&lt;/td&gt;

&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;Readln&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;Readonly&lt;/td&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;Rem&lt;/td&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;Removerecordfromresultset&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;Resultsetcurrentposition&lt;/td&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;Return&lt;/td&gt;

&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;Set&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;Setbooleanelement&lt;/td&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;Setcharelement&lt;/td&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;Setdateelement&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;Setdoubleelement&lt;/td&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;Setintelement&lt;/td&gt;

&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;Setstringelement&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;Settimeelement&lt;/td&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;Step&lt;/td&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;Stop&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;String&lt;/td&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;Stringelement&lt;/td&gt;

&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;Subroutine&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;Tab&lt;/td&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;Then&lt;/td&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;Time&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;Timeelement&lt;/td&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;To&lt;/td&gt;

&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;Tolower&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;Toupper&lt;/td&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;True&lt;/td&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;Us&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;Userselect&lt;/td&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;Usl&lt;/td&gt;

&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;Var&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;Visibility&lt;/td&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;While&lt;/td&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;Width&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;Write&lt;/td&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;Writeln&lt;/td&gt;

&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;Wth&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;Xlookup&lt;/td&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;Xlookupr&lt;/td&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;Xlr&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;Xlu&lt;/td&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;Xor&lt;/td&gt;

&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;Xpos&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;Xpost&lt;/td&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;Xpostr&lt;/td&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;Xus&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;Xuserselect&lt;/td&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;Xuserselectr&lt;/td&gt;

&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;Xusr&lt;/td&gt;
&lt;/tr&gt;

&lt;tr&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;Yes&lt;/td&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;Yesno&lt;/td&gt;
&lt;td valign="top" style="padding:0in 5.4pt 0in 5.4pt"&gt;Ypos&lt;/td&gt;
&lt;/tr&gt;

&lt;/table&gt;
</description><link>http://www.lantica.com/support/kb/article/132</link><pubDate>Thu, 03 Dec 2009 17:30:02 GMT</pubDate><guid isPermaLink="false">a956c7753b73a5476360725f93352051</guid></item><item><title>Get Rid of IE 8 Warnings about Sesame</title><description>&lt;p class="bold_copy"&gt;From the &lt;a href="http://www.insidesesame.com"&gt;Inside Sesame&lt;/a&gt; Help Desk&lt;/p&gt;

&lt;p class="copy_italic"&gt;I updated my computer to install the new Internet Explorer from Microsoft. It's version 8. Ever since I did this I get a warning about opening Sesame and a question as to whether I want to run this software. It happens every time I start Sesame. Is there a problem with Sesame and IE8? I know that there were other compatibility issues with programs like McAfee antivirus and IE8 but I thought all of the issues had been fixed in the final IE8 release.&lt;br /&gt;
Debra&lt;/p&gt;

&lt;p class="copy"&gt;This is a problem caused by the security settings in both IE8 and Windows XP (Sp2 or 3), or Windows Vista. It's a known issue that's all over the Microsoft support web sites. There are all kinds of proposed registry hacks and fix-it tools. It isn't limited to Sesame. It affects other network or local programs running on your system that Windows isn't fully aware of. The reason it's happening now is that IE8 reset your IE7 security settings in a strange way. Regardless of all of the proposed fixes you can find on the web, there's a really easy way.&lt;/p&gt;

&lt;p class="copy"&gt;Start IE8. Choose Tools / Internet Options / Security. Click on the Local Intranet icon and then the Sites button. A dialog box like the one below will appear.&lt;/p&gt;
&lt;div align="center"&gt;
   &lt;img src="/images/Support/article_screenshots/HelpDeskMay09-Fig6.png"&gt;&lt;br /&gt;
&lt;i&gt;IE8 Local Intranet site security settings.&lt;/i&gt;
&lt;/div&gt;
&lt;p class="copy"&gt;The rest of this will sound crazy but it works. Unclick the Automatically detect intranet network checkbox. Make sure the other three checkboxes remain checked (they should be by default). Click OK and OK again. Close IE8 and all warnings about Sesame will go away. You'll have to do this on each computer that's running Sesame and has IE8 installed on it.&lt;/p&gt;

</description><link>http://www.lantica.com/support/kb/article/131</link><pubDate>Thu, 03 Dec 2009 16:25:08 GMT</pubDate><guid isPermaLink="false">e0bcb1e2c8a67dbcdd45075b1431b0d0</guid></item><item><title>Totals Only Reports</title><description>&lt;p class="bold_copy"&gt;From the &lt;a href="http://www.insidesesame.com"&gt;Inside Sesame&lt;/a&gt; Help Desk&lt;/p&gt;

&lt;p class="copy_italic"&gt;My guess is that this has been asked before, but one of the things I miss from Q&amp;A is the ability to make a Totals Only report simply by setting an option at the Print Option screen. What I want to do is see a total of all my orders paid by check, credit card or PO for a given time period. I don't need all the details. I just want the totals for each so I can confirm my deposits. I read the approach on the Lantica Software website about using two different views in a report design but, to be honest, it's confusing to me. Isn't there a simpler way to accomplish what I need?&lt;br /&gt;
Bill S&lt;/p&gt;

&lt;p class="copy"&gt;You're not the only one who wants to practice the KIS (keep it simple) principle. It's the best design policy around. If you can accomplish the same end with a simpler approach - do it. It will make your life easier today and will allow the person who updates your work to have a much easier time of it.
&lt;br /&gt;&lt;br /&gt;
So here goes - a simple way to do a totals only report.
&lt;br /&gt;&lt;br /&gt;
The reason the sample at lantica.com uses multiple views is to be able to get the field value and the total on the same line. But here's an easier way to do the same thing.
&lt;br /&gt;&lt;br /&gt;
Layout your regular report with the subtotals and totals you want. The easiest way is to use Sesame 2.0's Report Wizard. You can add a static text LE to tell the user what the totals are on the bottom line.
&lt;br /&gt;&lt;br /&gt;
Now what we need to do is get rid of the detail lines and move Type down to the subtotals line so it lines up with the subtotal amount. You get rid of the detail lines by making them Not Visible in the Property Editor. &lt;br /&gt;&lt;br /&gt;
In order to get those Types to appear once in the footer where the subtotals are, you need to capture the value of the Type before you start each group, then copy that value into the footer. To do this, create two unbound value fields - one in the header area (we can use Group Header 2 since it also breaks by Type) and one in the subtotal footer - TypeCopy and TypeCopy1 respectively. Make the one in the header invisible.&lt;br /&gt;&lt;br /&gt;
One more step. Open the program editor and add this program to the TypeCopy LE:&lt;/p&gt;
&lt;pre&gt;
TypeCopy = Type
TypeCopy1 = TypeCopy
&lt;/pre&gt;

&lt;p class="copy"&gt;Basically the steps are (1) hide the detail data, (2) copy the first description of each line to a header, then (3)copy that value to the footer where the subtotal will appear. The sample database includes totals only reports for Types of Donation, Donors, and even the dreaded Totals by Month.
&lt;/p&gt;
</description><link>http://www.lantica.com/support/kb/article/130</link><pubDate>Thu, 03 Dec 2009 16:16:41 GMT</pubDate><guid isPermaLink="false">f6d1f72032ca9dddf9884579ce310967</guid></item><item><title>Group 'Then' Conditions by Bracketing Them</title><description>&lt;p class="bold_copy"&gt;From the &lt;a href="http://www.insidesesame.com"&gt;Inside Sesame&lt;/a&gt; Help Desk&lt;/p&gt;

&lt;p class="copy_italic"&gt;I thought I had my application in Sesame just about done but I can't seem to get my programming right. What I want it to do is make a certain three fields visible for only me and not for the rest of my staff. What's happening is they are all invisible to them but only one is visible even to me. I'm using On-Form-Entry programming like this:&lt;/p&gt;
&lt;pre&gt;
Visibility(Field1, 1)
Visibility(Field2, 1)
Visibility(Field3, 1)

If @UserId &lt;&gt; "MyLogon" Then
Visibility(Field1, 0);
Visibility(Field2, 0);
Visibility(Field3, 0);
&lt;/pre&gt;
&lt;p class="copy_italic"&gt;Can you help me?&lt;br /&gt;
Larry&lt;/p&gt;

&lt;p class="copy"&gt;This is a simple but common error that people have been making since the dawn of the If/Then statement. If the result (the Then portion) of your test condition (the If portion) contains multiple statements, they must be separated and grouped. You successfully separated them with semicolons but you didn't group them. What your statement really says as it stands is this: 
&lt;br /&gt;&lt;br /&gt;
If it's me, Then leave field one visible. It goes on to say that regardless of who it is, make Field2 invisible and make Field3 invisible.
&lt;br /&gt;&lt;br /&gt;
Change the If/Then portion of the statement to this:&lt;/p&gt;
&lt;pre&gt;
If @UserId &lt;&gt; "MyLogon" Then
{
     Visibility(Field1, 0);
     Visibility(Field2, 0);
     Visibility(Field3, 0);
}
&lt;/pre&gt;
&lt;p class="copy"&gt;Now you are saying, when my condition is met do everything enclosed in the brackets. You can leave out the word Then and you don't need the semicolons when each statement is on a separate line. 
&lt;/p&gt;</description><link>http://www.lantica.com/support/kb/article/129</link><pubDate>Thu, 03 Dec 2009 15:52:40 GMT</pubDate><guid isPermaLink="false">f154a5dde10ffe3128d9c567ac322cbf</guid></item><item><title>See More Data in Multi-Line Fields</title><description>&lt;p class="bold_copy"&gt;From the &lt;a href="http://www.insidesesame.com"&gt;Inside Sesame&lt;/a&gt; Help Desk&lt;/p&gt;

&lt;p class="copy_italic"&gt;In my old Q&amp;A database, if I put more data than could be displayed in a multi-line field, or even a single line field, I'd see an arrow at the end of the field indicating that there was more data and that I should press F6 to expand the field to see it all. Is there a way I can get the same indicator in Sesame?&lt;br /&gt;
Warren&lt;/p&gt;

&lt;p class="copy"&gt;There is no way in Sesame to have an arrow displayed at the end of a field to indicate that there is more data than you can see in the field. However, with a little clever design you can make the field do just what you need. In a single line text field this really isn't an issue. You will see that there's more data because what shows will butt up against the right edge of the layout element. In a multi-line element you have a valid argument, but here's the easy solution: make the field a bit larger in height, about half a line larger than the defaults (or half a line larger than the amount of lines you want to see.&lt;/p&gt;
&lt;p class="copy"&gt;Your settings will vary based on the number of lines you want to see displayed and the font size you're using. Use the Property Editor's Look/Position tab to get the current height of the field and then try some data. If you need to make it higher use the Property Editor Position tab Height setting to increase it by 8 to 10 pixels. &lt;/p&gt;

&lt;p class="copy"&gt;Now you can see at a glance that there's more data in the field.&lt;/p&gt;
</description><link>http://www.lantica.com/support/kb/article/128</link><pubDate>Wed, 02 Dec 2009 16:44:02 GMT</pubDate><guid isPermaLink="false">3c7c44019ac38c681986ec9877fa21e3</guid></item><item><title>Programming Events and Combo Boxes</title><description>&lt;p class="bold_copy"&gt;From the &lt;a href="http://www.insidesesame.com"&gt;Inside Sesame&lt;/a&gt; Help Desk&lt;/p&gt;

&lt;p class="copy_italic"&gt;Is there a way I can make my programming run when I select something from a combo box list rather than having to wait until I click out of the combo box into another field. In other words, I want to be able to see the results of my selections as I click on them so I can decide if I've made the right choice. I've programmed something like this in the combo box (called Type) in the on-element-change event:&lt;/p&gt;
&lt;pre&gt;
If Type = "Machine1" Then
{ Hours = "12"; Technician = "Clay"; Schedule = "ASAP"; Priority = 1}
Else 
If Type = "Machine2" Then
{ Hours = "1"; Technician = "Bill"; Schedule = "CALL FOR APPT" ; Priority =2 }
Else
If Type = "Machine3" Then
{ Hours = "TBD"; Technician = "TBD"; Schedule = "As Available" ; Priority = 3}
&lt;/pre&gt;
&lt;p class="copy"&gt;I'd like to be able to click and see the results so I can change them without leaving the field and coming back.&lt;br /&gt;
Jason&lt;/p&gt;

&lt;p class="copy"&gt;You're using the On-Element-Change event which doesn't trigger until you leave the field. So even though you've made a selection and changed what is showing in the combo box, Sesame doesn't recognize it until you move on. You should use the On-Element-Immediate-Change event instead and you'll see the programming fire as you select a drop down entry from the list. When you use this event in a combo box - where you can also type an entry in the box - remember that the program will fire with each keystroke. As long as you take this into account it should give you just what you need.&lt;/p&gt;
</description><link>http://www.lantica.com/support/kb/article/127</link><pubDate>Wed, 02 Dec 2009 16:36:55 GMT</pubDate><guid isPermaLink="false">c6904390dfbd907502cb45d732771528</guid></item><item><title> Change Button and Tab Titles Without Renaming</title><description>&lt;p class="bold_copy"&gt;From the &lt;a href="http://www.insidesesame.com"&gt;Inside Sesame&lt;/a&gt; Help Desk&lt;/p&gt;

&lt;p class="copy_italic"&gt;I have almost finished my design and I am very proud of what I have been able to accomplish. I have downloaded version 2.1 and really like the new button menus. But I don't like the names that appear on them or on the tabs at the bottom of each form as it opens. I realize that most of this is my fault in that I didn't do very good planning. If I had, I would not have named one of my forms "OUTEXP," I would have named it "EXPERT CASE DATA" so that's what would show on the menus and tabs. That is only one example of the bad habits my prior relationship with Q&amp;A got me into (no more than eight characters, etc.). So, here is my question. Since I have so much programming and so many lookup fields that use these field names, is there any way I can change the names on the buttons and tabs without renaming my forms and then redoing my programming? Please say there is!&lt;br /&gt;
Steve&lt;/p&gt;
&lt;p class="copy"&gt;
Of course there is. There's almost always a way to do anything in Sesame. Sometimes it takes some imagination and creative programming and sometimes it is simply taking advantage of built-in programming commands. The latter is all you need contend with here.&lt;/p&gt;

&lt;p class="copy"&gt;You make a valid point. If you have a complex application with many databases and forms, changing a form name or database name could have far reaching consequences.&lt;/p&gt;

&lt;p class="copy"&gt;The best way to address this is to change what you see, not what Sesame sees and works with. The tool for this is the AddToTranslationTable() command. It has been around since version 1. You can use the translation table to change strings that appear on the parts of the screen you normally can't control into something else. &lt;/p&gt;

&lt;p class="copy"&gt;If you place AddToTranslationTable() programming in the Application Programming (Application / Application Property Manager / Program Application) you will change how items are displayed throughout your entire application, including the button menus. AddToTranslationTable does not change the actual content of the item, only its appearance as drawn on the screen. It does not replace anything in memory, so it has no effect on any programming statements using the original names.&lt;/p&gt;
 
&lt;pre&gt;// Change Tab Titles and Buttons on Menus (Lines are CASE sensitive)
AddToTranslationTable("OUTEXP", "EXPERT CASE DATA")
AddToTranslationTable("Search/Update OUTEXP", "Search/Update EXPERT CASE DATA")
&lt;/pre&gt;

&lt;p class="copy"&gt;Remember that the strings you use in AddToTranslationTable() are case sensitive both in what you are replacing and what you want to see as the replacement. Also remember to do your translation changes in all places you feel are necessary. For example, in your case you might also want to replace the titles in the Sort and Mass Update spec windows.&lt;/p&gt;</description><link>http://www.lantica.com/support/kb/article/126</link><pubDate>Wed, 02 Dec 2009 15:18:26 GMT</pubDate><guid isPermaLink="false">92b7fd9d6ba3605c2efa598ed3546f36</guid></item><item><title>Retrieve Records For a Date Within a Range Of Dates</title><description>&lt;p class="bold_copy"&gt;From the &lt;a href="http://www.insidesesame.com"&gt;Inside Sesame&lt;/a&gt; Help Desk&lt;/p&gt;

&lt;p class="copy_italic"&gt;Is there a way I can retrieve a record with a certain day in a field that falls between a starting and an ending date? In other words, if I have a date field that shows when people are arriving and another when they are leaving. Can I retrieve the records where a date or group of dates are between the arriving and departing dates? I've tried to use complex retrieve programming but there is no way my users will be able to do that.&lt;br /&gt;
Moshe&lt;/p&gt;

&lt;p class="copy"&gt;There are a few ways to do this but the approach we took was to give you something that was easy for your users. The best solutions for the user usually mean a little extra work on the part of the application designer. That is the case here.&lt;br /&gt;&lt;br /&gt;

The idea was to come up with a way for the user to search the database by being prompted for dates, from a pop-up calendar, to search for. No programming and no confusion for a data entry person. To accomplish this you would add one new field and a command button to your form. Both of these items will only be visible to the user at the Search (retrieve spec) screen. There is a sample application supplied with this month's issue named Included Dates.DB so you can see how this will work for you.&lt;br /&gt;&lt;br /&gt;

We are going to add a Keyword field called Search Date. This will be where your users will search for single or multiple dates without the need for date math. Right next to it we will put a command button called CmdSearch. Change the LE Label of the button to @2&gt; so it displays a small down arrow. Size it and move it right next to the Search Date element.&lt;/p&gt;

&lt;p class="copy"&gt;Now to the rest of your work &#xE2;&#x20AC;&#x201C; programming the elements to do what you want.
&lt;br /&gt;&lt;br /&gt;
First, in your form's On-Form-Entry event:&lt;/p&gt;
&lt;pre&gt;
//Set Visibility of Search LE's - Hide them except at Search
If @Mode()&lt;2
{
	Visibility(Search Date, 0)
	Visibility(CmdSearch, 0)
}
&lt;/pre&gt;
&lt;p class="copy"&gt;Next in the form's On-Retrieve Spec-Open event:&lt;/p&gt;
&lt;pre&gt;
//Set Visibility of Search LE's to visible
If @Mode()=2
{
	Visibility(Search Date, 1)
	Visibility(CmdSearch, 1)
}
&lt;/pre&gt;
&lt;p class="copy"&gt;Then in the Search Date (Keyword Field) On-Form-Change event:&lt;/p&gt;
&lt;pre&gt;
var vDate as Date
Var i as Int
var n as int

// This makes a 'hidden' search field with all of the attendance dates for
// this specific record in a format that they can easily be searched
// as a keyword field complete with semicolons in the proper space
 
i = 0         // How Many Days between Arrival and Departure
n = 0        // Use as a Loop counter

// Check that Arrive and Depart Dates are valid
If @IsBlank(Arrive On)=0 and @isblank(Depart On)=0 And @TD(Depart On)&gt;=@Td(Arrive on)
{
	Clear(Search Date)
	i = @Tn(@Td(Depart On)-@td(Arrive On))
	If i = 0 
	{	
		vDate = Arrive On
		Search Date = @AsFormattedByLE(Arrive On, 1, vDate) 
	}
	Else
	{
		For n = 0 to i
			vDate = Arrive On
			Search Date = Search Date + @AsFormattedByLE(Arrive On, 0, vDate+n) + ";"
		Next
	
		Search Date = @ReplLas(Search Date, ";", "")
	}
}
&lt;/pre&gt;
&lt;p class="copy"&gt;Lastly, in the command button On-Element-Entry event:&lt;/p&gt;
&lt;pre&gt;
var vChoice as Date

// Ask the Users what they want to do and pop up calendars to help them do it
If @Mode()=2                   // Only do this at Search mode 
{
	Clear (Search Date)
	If  @AskUser("Do You Want To Find Records By","Dates of Arrival and Departure?","")
	{
		// Pops up a calendar so you can select a date. 
		vChoice = @Calendar(@Date, "Select START Search Date")

		// Make sure you selected a date.
		If Not @Error
		{
			// put selected date in the LE
			Search Date = @AsFormattedByLE(Arrive On, 0, vChoice) + ";"
	
			// Message to go on to the end date choice.
			@MsgBox("You Have Selected a Start Search Date, Now Select an End Date","If You Only Wish to Search For 1 Day","Make the End Date the Same as the Start Date")
	
			// Pops up calendar AGAIN to select END date. Starts at already selected date
			vChoice = @Calendar(vChoice, "Select ENDING Search Date")
	
			// Make sure you selected a date.
			If Not @Error
				
			// Show the selected date on the Form.
			Search Date = Search Date + @AsFormattedByLE(Arrive On, 0, vChoice)
		}
	}
}	
&lt;/pre&gt;
&lt;p class="copy"&gt;Does that seem like a lot of work? It really isn't considering it is only copy and paste for you and then button clicking for your users.&lt;br /&gt;&lt;br /&gt;

They will click on the Arrow (command Button) and be asked if they want to search for attendees by date. If they answer yes, they will be presented with calendars to select their starting and ending search dates. Once they do that, they enter whatever other criteria they need to refine their search and press F10. They will get the records for those people who will be in attendance during the range of days they entered. They can print out a list with a count (quick report) or - and here is a neat side benefit - you can get a Keyword Report of attendees by individual day based on that new Search Dates field. &lt;/p&gt;
</description><link>http://www.lantica.com/support/kb/article/125</link><pubDate>Wed, 02 Dec 2009 15:03:53 GMT</pubDate><guid isPermaLink="false">d508e39a76794b3fa2896e014f95e683</guid></item><item><title>Security Can Do More Than Protect Your Data</title><description>&lt;p class="bold_copy"&gt;From the &lt;a href="http://www.insidesesame.com"&gt;Inside Sesame&lt;/a&gt; Help Desk&lt;/p&gt;

&lt;p class="copy_italic"&gt;I have a hopefully easy requirement that I just can't find a way to accomplish. Is there a way for Sesame to know which computer it's working on? What I mean is can it tell what workstation is entering or modifying data? I want to add a field that tells me who was the last person to add or modify a record and when they did it. I can figure out the when but I can't get Sesame to tell me who did it.&lt;br /&gt;
Pat&lt;/p&gt;

&lt;p class="copy"&gt;
This is just one of the reasons you should be using security in your databases. Of course it will protect access to your databases but maybe you feel that you don't need that type of protection. That's OK. Let's look at some uses for security other than protection.
&lt;br /&gt;&lt;br /&gt;
Before we begin - a word of caution. If you are using security and you have multiple databases in your application where you are doing external lookups from one to the other, you must set an external lookup userID and password. This is done on the Application Settings tab of the Security Manager. The external lookup password is not one that a user needs to log on with. It's an internal password sent from one database to the other that says it is OK to provide your data. You need to create the external user as if they were a real person and then give them a password. After that's done, you re-enter that information on the settings tab. While this is an internal function, remember that it can also be used to log onto the application, so give it a level of complexity that matches that required by your overall application security.   
&lt;br /&gt;&lt;br /&gt;
In addition, even if you are not really concerned with true security, please establish one administrative group with an ID and Password that you do not share with everyone. Also set this as the only group that can redesign the application. This is just insurance against future problems such as a disgruntled employee changing all the passwords and locking all of you out of the system. &lt;/p&gt;

&lt;p class="copy"&gt;Now, on to your question. Once you have assigned security id's and passwords to each of your users, they will have to use them to log into your application. Once they do, Sesame will know who they are. If you want to keep it simple (and not really secure) you could assign each person an id and password of their first and last name, respectively. &lt;br /&gt;&lt;br /&gt;

On your form add a new text field called Changed By and a corresponding date field called On. Program your form On-Form-Change event as follows:&lt;/p&gt;
&lt;pre&gt;
Changed By = @UserId
On = @Date  
&lt;/pre&gt;
&lt;p class="copy"&gt;That's all it takes to do what you asked for but, now that you have security instituted, here are a few more ideas.&lt;br /&gt;&lt;br /&gt;

Make certain fields visible only to certain people or groups.
In your Form's On-Form-Entry event:&lt;/p&gt;
&lt;pre&gt;
If @Mode()&lt;2        // Adding or Updating records
{
	If @UserId="Bill" or @UserId="Tom"  
// You could also do this by @Group rather than person by person
	{
		// Hide the following form elements
		Visibility(Customer Comment, 0)
		Visibility(Profit, 0)
		Visibility(Another LEName, 0)
	}
	Else     // If it is not these users
	{
		Visibility(Customer Comment, 1)
		Visibility(Profit, 1)
		Visibility(Another LEName, 1)
	}
}
&lt;/pre&gt;
&lt;p class="copy"&gt;Make records read only for certain groups of people
In your Form's On-Form-Entry event:&lt;/p&gt;
&lt;pre&gt;
Var vElements as String
Var vCnt as Int
Var vLoop as Int
Var vName as String
Var vNN as Int		//For Special Read Only Set

//Use On Form Entry to set all elements to Read only (not grey) for low level users
If @mode()=1 and @Group="users" 
{	
	vElements = @StringArrayElementList()
	vCnt = @CountStringArray(vElements)
	vLoop = 0

	While vLoop &lt; vCnt
	{
		vLoop = vLoop + 1
        		vName = @AccessStringArray(vElements, vLoop)
        		SetThisElement(vName)
		vNN = @ElementType(ThisElement)
		If (vNN &gt; 999 and vNN &lt; 1009) 
		{
    			ReadOnly(ThisElement, 2)
		}
	}
	UnSetThisElement()
}
&lt;/pre&gt;
&lt;p class="copy"&gt;These are just a few of the things you can do once you have added security to your application. Use your imagination and you will find even more.&lt;/p&gt;

</description><link>http://www.lantica.com/support/kb/article/124</link><pubDate>Wed, 02 Dec 2009 14:43:18 GMT</pubDate><guid isPermaLink="false">c5c6342faded8e6c6bf594f1c0ae4a3d</guid></item><item><title>Limit Field Data Lengths and Words</title><description>&lt;p class="bold_copy"&gt;From the &lt;a href="http://www.insidesesame.com"&gt;Inside Sesame&lt;/a&gt; Help Desk&lt;/p&gt;

&lt;p class="copy_italic"&gt;I have two specific needs concerning the data my people enter. First I would like to be able to set a specific length for certain fields to make sure that they always enter meaningful data. For instance, an automobile VIN (vehicle Identification Number) is always 17 characters long. It can contain numbers and letters but the length never varies. I would like to make sure the users can't enter any more or less characters than that in the VIN field. In another field, I want to control their verbosity. I have a field called "Short Comment". I don't want my employees to enter a book. I want to see 25 words or less in this field. I can't find a way to do these things but I am sure there is one. Can you give me a clue?&lt;br /&gt;
Christian&lt;/p&gt;

&lt;p class="copy"&gt;These are both variants on the same theme. The best way to do both is by using On-Element-Exit programming. We are supplying a sample database called Lengths.DB so you can see and copy the programming and play with variations. Let's look at the rules we need to consider for each case.&lt;br /&gt;&lt;br /&gt; 

In the first scenario if the user has entered anything (the form element is not empty) then it must be exactly 17 characters long. If it is not, tell the user about it and keep him or her in the element until they make it the correct length or blank it.&lt;br /&gt;&lt;br /&gt;

The second scenario "if anything has been entered in the element, it cannot be more than twenty-five words" is a bit trickier. It is easy to count the number of characters but how do we know how long twenty-five words is? Well, we can assume that each word has a space after it. To a computer a space is not a blank but a real character. It is represented by the ASCII character 32. So, if we can count the character 32's, we will know how many words there are in the field. This will work as long as we remember that sometimes people use spaces instead of tabs and sometimes they will put a couple of spaces between sentences. We have to take care of these issues. Like in the first case, if there are more than 25 words we need to tell the user and keep him or her in the element until they correct it or blank it. &lt;br /&gt;&lt;br /&gt;

Now that we know the rules let's use Sesame's Trap function to implement them. Trap is the best way to control a variable user input if you do not want them to leave the data element until they get it right.&lt;br /&gt;&lt;br /&gt;

In both cases (letters and word counts) the first thing we want to do is set the trap when the user enters the element. So, in the On-Element-Entry events for both elements put this programming statement:&lt;/p&gt;
&lt;pre&gt;
// Set the Trap 
     Trap(ThisElement, 1)
&lt;/pre&gt;
&lt;p class="copy"&gt;Now, for the first case (exactly 17 characters) program the On-Element-Exit of the element VIN like this:&lt;/p&gt;
&lt;pre&gt;
// Check if trap has been set
     If @Trap(ThisElement) = 2
     {
	     // Check that something has been entered
             If @IsBlank(ThisElement)=0 	
 	     {
		     // If they did it right clear the trap
		     If  @Len(ThisElement)=17				
                     {
			// Release the trap
			Trap(ThisElement, 0)
                     }
	 	     //If they didn't
 		     Else
		     {
			// Show error message
			@MsgBox(@ElementName(ThisElement) + " must be 17 characters long!", "", "")
		     }
 	      }

	      // Very Important - If the element is empty also release the trap
	      Else Trap(ThisElement, 0)
     }
&lt;/pre&gt;
&lt;p class="copy"&gt;Now let's look at the On-Element-Exit statement for condition 2 and the element named WORDS. It is the same concept as condition 1 but we need a way to count the number spaces or @Chr(32)'s. If we had a string array, or a set of values separated by semicolons, Sesame could easily count them. So we will make our words into a temporary string array by converting the spaces to semicolons:&lt;/p&gt;
&lt;pre&gt;
var nn as Int
var vData as String

// Set the variable equal to the data in the element. 
// Then use the variable for the program calculation
vData = Words

// Check if trap has been set
If @Trap(ThisElement) = 2
{
	// Check that something has been entered
	If @IsBlank(ThisElement)=0 	
	{
		// Replace any semicolons that might be in the data
		vData = @Replace(vData, ";", "|")
		
		// Make sure there is no space at the end of the words
		If @Rt(vData, 1) = @Chr(32)
		{
			vData = @ReplLas(vData, @Chr(32), "")
		}
		
		// Replace the Spaces with semicolons to 
		// make the data look like a string array
		vdata = @Replace(vData, @Chr(32), ";")
		
		// Count how many 'strings' (words) there are
		nn = @CountStringArray(vData)
		
		// If they did it right (less than 26) clear the trap
		If nn &lt; 26				
		{
			// Release the trap
			Trap(ThisElement, 0)
		}
		// If they didn't (more than 25)
		Else
		{
			// Show error message
			@MsgBox(@ElementName(ThisElement) + " must be no more than 25 WORDS long!", "It is now " + nn + " WORDS long.", "")
		}
	}

	// Very Important - If the element is empty also release the trap
	Else Trap(ThisElement, 0)
}
&lt;/pre&gt;
&lt;p class="copy"&gt;There you have it. Count your characters and your words. Modify these statements to match your exact needs. Remember, to use the Trap function you must have both an On-Element-Entry and On-Element-Exit statement. &lt;/p&gt;

</description><link>http://www.lantica.com/support/kb/article/123</link><pubDate>Wed, 02 Dec 2009 14:27:09 GMT</pubDate><guid isPermaLink="false">f9a94e4b7f56d6b395d1a7fdd97d58bc</guid></item><item><title>Manage Changes to Your WordMerge Documents</title><description>&lt;p class="bold_copy"&gt;From the &lt;a href="http://www.insidesesame.com"&gt;Inside Sesame&lt;/a&gt; Help Desk&lt;/p&gt;

&lt;p class="copy_italic"&gt;As you've pointed out in the past, MS Word does not allow multiple people to open the same merge document on different stations. We followed all the rules and we maintain a separate directory of master documents on the server. We always set them to merge with a file that resides in the C:\Sesame2\Docs folder. And we copy these files to all of the users C:\sesame2\docs folder about once a month. Therein lies the problem. Some of our users have gotten so good with the applications that they will make changes to a document and even save a copy back to the master folder. However, they don't tell anyone about it and their changes won't appear on the other users' computers until the next copy routine. This gets complicated by the fact that we can now get two different versions of the same letter printed from two different computers. Is there a way we can use our master documents or a way to automate our copy routine?&lt;br /&gt;
Betsy&lt;/p&gt;

&lt;p class="copy"&gt;Can you use the master documents? No, and you stated the reason - Microsoft Word won't let you. Can you better handle you copy routine and automate it so everyone always has the latest merge documents? Yes - you can do it every time a user opens the Sesame application, and very easily.&lt;/p&gt;

&lt;p class="copy"&gt;The secret is to use the ability Sesame has to program the Application. This means that when Sesame opens your application you have it run programming. And since Sesame can run Windows operating system commands via the @Shell() command, you can make it do things outside the Sesame program. In this case, we want to copy all the files that are on the server in the C:\Sesame2\docs folder (along with all subfolders) to the local user's computer every time he or she starts Sesame. Start by selecting Application / Application Property Manager from the Designer menu. In the Application Property Manager dialog, select Program Application.&lt;/p&gt;

&lt;p class="copy"&gt;The only Element you can program is Application and the only event is On-Application-Open. Place the following statement there:&lt;/p&gt;
&lt;pre&gt;
var n as Int
 
// Copy The Docs from Server to Local Drives
// Substitute your server network name below
n = @Shell("xcopy \\ServerName\sesame2\docs C:\Sesame2\Docs /S /Y")
&lt;/pre&gt;
&lt;p class="copy"&gt;Make sure you substitute your server computer Network Share Name for ServerName. Also make sure that the server's Sesame2/Docs folder is shared and permissions set for read and write on the network. The /S and /Y switches in tell Xcopy to copy (S)ubdirectories and to say (Y)es to any overwrite confirmation prompt. Save the programming, Reconcile your design, and you now will be copying your master documents to each user every time they open the application.&lt;/p&gt;</description><link>http://www.lantica.com/support/kb/article/122</link><pubDate>Tue, 01 Dec 2009 21:15:37 GMT</pubDate><guid isPermaLink="false">e3bffb1863d1a58418c81e86953ab427</guid></item><item><title>Check Whether a Form is Open</title><description>&lt;p class="bold_copy"&gt;From the &lt;a href="http://www.insidesesame.com"&gt;Inside Sesame&lt;/a&gt; Help Desk&lt;/p&gt;

&lt;p class="copy_italic"&gt;I need to make sure that a certain form in my Sesame application is closed before I allow some programming to run from another form. It involves a rather large import of data, a bunch of calculations, and a posting routine. Because I am doing so many records at one time I want to make sure that the receiving database is closed before the process starts. Is there a way to do this?&lt;br /&gt;
Tom&lt;/p&gt;

&lt;p class="copy"&gt;Sesame's @FormResultSetTotal() returns a count of the number of records currently open in a specified form. If there are no records open in that form, it will return -1. This can be used to check if a form is open.&lt;/p&gt;

&lt;p class="copy"&gt;For this example let's assume we have an application with two databases that each have a single form. We'll call the first one Residents and the second one Receipts. We need to post all of our monthly receipts to a balance field on each resident's record. This answer will not address the actual posting, just the conditional statement to make sure that the Residents database isn't open.&lt;/p&gt;

&lt;p class="copy"&gt;In whatever element you are using to do the posting, place this conditional statement in front of the rest of your programming:&lt;/p&gt;
&lt;pre&gt;var vcnt as int 

vcnt = @FormResultSetTotal("Residents") 
If vCnt = -1 
{
     // Put the posting operation here
     // make sure it all is within this set of brackets
} 
Else 
{
     @MsgBox("Residents is open.","Operation will not continue.","Please close Residents.")
}
&lt;/pre&gt;</description><link>http://www.lantica.com/support/kb/article/121</link><pubDate>Tue, 01 Dec 2009 20:43:49 GMT</pubDate><guid isPermaLink="false">91878e2ce0008fe81f41577f02440d55</guid></item><item><title>Spell Checker in Sesame 2.1 Not Working</title><description>&lt;p class="bold_copy"&gt;From the &lt;a href="http://www.insidesesame.com"&gt;Inside Sesame&lt;/a&gt; Help Desk&lt;/p&gt;

&lt;p class="copy_italic"&gt;I downloaded the new Sesame 2.1 upgrade for one reason only. I want to use the spell checker. I don't want to use it in interactive mode, I just want to be able to check spelling in certain fields. I installed the new executables and restarted Sesame but the spell checker doesn't seem to work.&lt;br /&gt;
Shawn&lt;/p&gt;

&lt;p class="copy"&gt;If you downloaded the executables only for updating your Sesame it should also have created a file named dictionary.txt in your Sesame2 folder. What seems to be the problem here is that you then copied your Sesame executables to each of your other computers but didn't copy the dictionary file. Make sure that each machine has a copy of dictionary.txt in the Sesame start in folder and your spell checker should work just fine.&lt;/p&gt;</description><link>http://www.lantica.com/support/kb/article/120</link><pubDate>Tue, 01 Dec 2009 20:32:28 GMT</pubDate><guid isPermaLink="false">120fd6a7167674cf717784087cfc77ef</guid></item></channel></rss>
