Knowledge Base

You receive a "Compiled code for this line too long" error message in Visual FoxPro

Article ID: 111991

Article Last Modified on 2/12/2007


APPLIES TO


This article was previously published under Q111991

SYMPTOMS

Although the Microsoft FoxPro command-line length limit is 2,048 bytes, a line of compiled code cannot exceed 1,024 bytes (1 KB). This means that you can write a line of code that contains fewer than 2,048 characters that will generate a "Compiled code for this line too long" (1252) error message.

In Microsoft Visual FoxPro, the maximum number of characters per line is 8 KB. The maximum size of a line of compiled code is 4 KB. For more information about various Visual FoxPro software capacities, see the "System Capacities" topic in Visual FoxPro Help.

CAUSE

The relationship between the character representation of a command and its compiled or "tokenized" length is unpredictable.

Variable names and object references of different lengths may compile to the same number of bytes. For example, a reference to the memory variable "A" compiles to 3 bytes. However, a reference to the variable "ABCDEFGH" also compiles to 3 bytes. Similarly, a reference to the number "1" and a reference to the number "200" will each compile to 3 bytes. For this reason, shortening alias names has no effect on the length of the tokenized line.

In addition, white space and literal strings (character strings placed within quotation marks) are not tokenized. Therefore, eliminating spaces and indentation in the command line also will not affect the tokenized line length.

WORKAROUND

To work around this behavior, use one of the following methods:
  • Use an ON ERROR routine that traps errors 18 (Line too long), 1252 (Compiled code for this line too long), and 1812 (SQL statement too long).
  • Replace literal strings with variable references. This would also work for date literals (for example, {12/30/93}) and many numeric literals (for example, 4.5).

    For example, in the following SELECT-SQL command, the quoted text strings, "Allied Products" and "Microsoft Corp.", cannot be tokenized any further:
          SELECT * FROM customer ;
               WHERE company = "Allied Products" or company = "Microsoft Corp."
    						
    To work around this behavior, create a set of variables such as the following:
          m.company1="Allied Products"
          m.company2="Microsoft Corp."
    						
    Then, change your SELECT command line to the following:
          SELECT * FROM customer;
               WHERE company=m.company1 or company=m.company2
    						
    In many cases, this command will tokenize smaller than the original command.

    Note This method does not work for small integers (less than 256) because the size of a tokenized 1-byte integer is the same as the size of a tokenized variable reference.

REFERENCES

For more information, see the "Error Messages" topic in FoxPro online Help.

Also, see the following documentation:
  • FoxPro for MS-DOS "Developer's Guide," Appendix A
  • FoxPro for Windows "Developer's Guide," Appendix B
  • FoxPro for Macintosh "Developer's Guide," Appendix B

Additional query words: FoxMac FoxDos FoxWin VFoxWin 2.50 2.50a 2.50b 2.50c 2.60 errmsg err msg browse create table insert rqbe limitation capacities capacity

Keywords: kberrmsg KB111991