Help  |   Contact Us  |   About Us  |   News and Events
Books, conferences, and other information about... Moving to Linux Switching to OOo Building Linux Apps Using Visual FoxPro
Buy      Download      Your Account      Catalog      Support      Conferences      Resources      Fun

Fundamentals: Building Visual Studio Applications on a Visual FoxPro 6.0 Foundation

If you have a question about the technical contents of this book, please contact the author(s). Their email address(es) can usually be found in their bios in the About the Author section at the front of the book or on the author's bio page (click on the author's name on the book's main page.

Page 69 and beyond.

Chapter 3 makes repeated references to date values and have several examples which indicate that you can use {mm/dd/yy} to represent a valid date. For instance on page 117 the code states:

delete for dbirth>{11/6/1968}

Actually, this line of code may give you a compile-time error, Ambiguous date/datetime constant, depending on the setting of the Year 2000 compliance setting in Tools | Options | General tab. If the setting is set to 0-Off, the code will compile fine. If it's set to 1-Constants or 2-Constants plus CTOD() and CTOT(), you will get an error.

In order to eliminate this error, (1) date constants should be presented in the form {^CCYY/mm/dd}, like {^2002/12/31}, and (2) the functions CTOD and CTOT should not be used anymore.

Page 116.

The example on DELETED's setting wasn't very clear.

Then you get the list and simply use the APPEND FROM command to add it to your CUSTOMER table:
should be
Then you get the list, set DELETED ON, and simply use the APPEND FROM command to add it to your CUSTOMER table:

The code should read like this.

set talk ON
set deleted OFF
* next command returns the value "100"
* now make the records disappear
set deleted ON
* next command returns the value "77"
* (23 records in PROSPECT are deleted)
* now let's add the non-deleted PROSPECT records 
select 0
set deleted OFF
* next command returns the value "500"
* next command also returns "500"
set deleted ON
* message "77 records added" appears after the following
* command is completed
append from PROSPECT
* next command returns the value "577"

Page 120.

Repeated questioning jut
should be
Repeated questioning just

Page 187

In your "Fundamentals" book in Chapter 7 you talk about how to remove a menu option by putting a directive (*:IF) in the comment field of the prompt opitons in the menu designer. I have done this with no results.

I also opened my menu.mpr and viewed it and there is no IF/ENDIF code for either bar. Am I missing something or is there a typo somewhere? I also have not found any documentation of this in any MS Foxpro resources.

You need to have GENMENUX installed for the *: directives to take effect. See page 187 and beyond for details.

Page 316.

working on new and existing projects instead of slogging
should be
working on new and exciting projects instead of slogging

Page 327, third paragraph.

"Open the Menu Builder"
should be
"Open the Menu Designer"

Page 330.

Step 2. Based on: hwcustom
should be
Step 2. Based on: custom

Page 334.

Step 8. Set classlib to &luTemp
should be
Set classlib to (luTemp)
Set help to &luTemp
should be
Set help to (luTemp)
Set resource to &luTemp
should be
Set resource to (luTemp)

Page 342.

Step 2. Based on: hwcustom
should be
Step 2. Based on: custom

Page 347

You made a combo box in the base classes with the controlsource "aitems" and a proberty that shows up in the listing of class properties as aitems[1,0]. In the init() code you make aitems=''.

How do you get the aitems[1,0] to list in the class properties list? I missed something somewhere! As I said previously, I need to understand this - it really bugs me.

Create a property for the combo like so:
This makes it an array property that you can then redime as you need!

Page 351.

In Step 4: "method of all your command buttons"
should be
"method of all your text boxes"

Page 352.

Step 6. Select an icon for this class from the
should be
Step 6. Select an icon for this class for the

Page 357.

Step 6. The Align Left Edge
should be
Step 6. The Align Top Side

Page 357.

Step 6. Use the Format, Vertical
should be
Step 6. Use the Format, Horizontal

Page 366.

Select the Add Method menu
should be
Select the New Method menu

Page 389.

should be

Page 393.

'at the end of this chapter'
should be
'at the end of the next chapter'

Page 400.

case type( m.cNaField ) = "CM"
should be
case type( m.cNaField ) $ "CM"

Page 405.

I notice that near the bottom of page 405 you evaluate x.mi to determine if it is numeric. As far as I can tell m.ix = ITKEY.iLastKey which is defined as a character in ITKEY and is never converted to a numeric value. Am I missing something? It appears to me that type("m.ix") will always equal "C". Which also means that the line m.ix = m.ix + 1 will always bomb because the program is tying to add a numeric to a character.

ITKEY.iLastKey should be an integer field (that's why it's prefixed with "i"). If it's not, then it's just a mistake in the setup of the ITKEY table...

If, of course, you wanted to have keys that could be alphanumeric, you'd need iLastKey to be cLastKey, and then do a lot more work incrementing the value, cuz you couldn't just "add one"....

Page 406.

replace ITKEY.tChanged with m.lcNaUser
should be
replace ITKEY.cChanged with m.lcNaUser

Page 430.

The methods in ITPROC.PRG are moved to Olib. However, they're already moved to oApp on page 344.


Page 621.

A reader writes: "In Fundamentals, 25-3-2 you write about HTML Help:
"The Help() methodóin the Form classócontains the following code:
set topic to alltrim(thisform.caption)
set topic to
Thus, when the user clicks the Help button, the help topic is set to the caption and then the .CHM file is opened."

However, in Hacker's Guide for VFP 6 I read: "SET TOPIC doesn't work at all with HTML Help."

Yesterday I downloaded Microsoft HTML Help version 1.3 and after having created a chm file I could not get "set topic to" to work.

The same reader follows up with additional information:

How to do it without "set topic to" was revealed to me today thanks to Tim Witort: