Talk About Network

Google


Register and Login
Nick
Password
Register create new account Sign up is FREE and you can post replies, new topics, bookmark posts and more!
Recover lost password


Mac > Mac Data Bases > [FAQ] FileMaker...
Latest [ Topics | Posts ] Archive Post A New Topic Post a Reply
<< Topic < Post Post 1 of 1 Topic 170 of 224
Post > Topic >>

[FAQ] FileMaker Pro - database for Macintosh and Windows

by Martin Trautmann <traut@[EMAIL PROTECTED] > Feb 18, 2006 at 05:26 AM

Archive-name:    databases/filemaker-pro/faq
Posting-Frequency: monthly
Last-modified:   1996/10/09 
Version:       3.1
URL:
<ftp://ftp.th-darmstadt.de//pub/database/filemaker-pro/[FAQ]%20FileMaker%20Pro>
"Text release"
URL: <ftp://ftp.th-darmstadt.de//pub/database/filemaker-pro/faq.fp3.sit>  
      "FMP 3.0 template"
Changes:       indicated within the table of contents by "!"

 
---------------------------------------------------------------------------
             Frequently Asked Questions on FileMaker Pro
 
1  Where can I get information from
!  1.1     Internet sites
!  1.2     Software and templates
!  1.3     Newsgroups
!  1.4     Mailing lists
!  1.4.1    FMPRO-L
!  1.4.2    FMPRO
!  1.4.3    FMPRO-CGI
!  1.5     Forums
!  1.6     Books
 
2  Version History
  2.1      What is the current version of FMPro for Macintosh
  2.2      Is Filemaker Pro relational
  2.3      When will FMPro 3.0 be released
!  2.4     Features of FMPro 3.0
  2.5      FileMaker Pro Server
 
3  FMPro 3.0
  3.1      Think relational
!  3.1.1    Many to many relations (m:n)
  3.2      What are ****tals?
  3.2.1     Sorting ****tal Records
  3.3      Bug & Wish List
  3.4      Relational Examples
  3.4.1     Self Joining list
!  3.5     Globals
 
4  Field Formats and Index Values
  4.1      What do I need index values for?
  4.2      Lookups
  4.3      Text formats and Index basics
  4.3.1     Character translation for indexed values
  4.4      Printing index fields
  4.5      Number format
  4.6      Date format
  4.7      Time format
  4.8      Hidden fields
!  4.9     Sorted lists
 
5  Repeating Fields
  5.1      Convert repeating fields to non repeating fields
  5.2      Convert nonrepeating fields to repeating field
  5.2.1     How to create ASCII-29
  5.3      Merge separate records to a single repeating field
  5.4      Removing duplicates or Sychronizing databases
!  5.4.1    Removing duplicates - another approach
 
6  Find
!  6.1     Some facts
!  6.2     Perform scripted find
!  6.3     No matching records found
!  6.4     Find on multiple fields
!  6.5     Find with AND / OR / NOT
!  6.6     Find on a subset
 
7  Scripting
  7.1      ScriptMaker
  7.1.1     What's that restore option? - Find & sort within a script
  7.1.2     Special options
  7.1.3     Documenting scripts
  7.1.4     Recursive and Conditional scripts
  7.1.5     Dummy entries
  7.1.6     Go to last record
  7.1.7     Schedule Scripts
  7.2      AppleEvents
  7.2.1     FMP documentation
  7.2.2     Classes
  7.2.3     References
  7.2.3.1   References table
  7.2.4     List of events
  7.2.5     Sending events
  7.3      AppleScript
  7.3.1     System requirements
  7.3.2     General documentation
  7.3.2.1   Books
  7.3.2.2   Online documentation
  7.3.4     Tips
  7.3.5     Examples
  7.3.5.1   Load all image files
  7.3.5.2   Idle handler
  7.3.5.3   Object not found / error -1728
  7.3.5.4   Multiple finds
  7.3.6     Call AppleScript
  7.4      Aretha / Frontier
  7.5      Other tools
  7.5.1     Quickeys
  7.5.2     KeyQuencer
!  7.5.3    Tools for Windows
 
8  Miscellaneous Tips
  8.1      Removing password
  8.2      Undocumented features
  8.3      Shortcuts
  8.4      Compatibility between DOS and Mac release
  8.5      Buttons
  8.6      Resources for dialog boxes
  8.7      The special name "-" as list separator
  8.8      WWW, HTML and CGI
!  8.8.1    HTML text conversion
  8.9      Comments within calculations
  8.10     Empty fields
  8.11     Sort Order
  8.12     Switch printers
  8.13     Error Codes
  8.14     Get User's Name / Limit Access to Certain Users
!  8.15     Use // as literal text
!  8.16     Faster Screen Redraw
!  8.17     Date calculation
!  8.18     Displaying Data as a Table
!  8.19     Zoom window size
 
9  Data Exchange
  9.1      Copy a layout from one database to another
  9.2      Modify layout objects
  9.3      Copy a record or list of records to other applications
  9.4      Ex****t / Im****t
!  9.5     Ex****t formatted text / RTF
!  9.6     Access Files Remotely
 
10 Useful Tools
  10.0     Useful tools
  10.1     Print2Pict
  10.2     Acid Jazz etc.
  10.3     BBEdit Lite
  10.4     Ram Disk
  10.5     Send Mail from within FMP
  10.6     Dump Mail to FMP
  10.7     Fax from FMP
  10.8     Speed Doubler
  10.9     ROFM CGI
!  10.10    GTQ library
 
11 Special Solutions
!  11.1     Templates for collecting CDs
!  11.2     Numbers to Text
 
12 About
!  12.0     About

------------------------------
 
Subject: 1  Where can I get information from
   
1.1   Internet sites
 
 Claris WWW
 (updaters, templates, technical sup****t articles, trial software and
 product literature):
 http://www.claris.com
 Claris FAQs on FileMaker Pro 2.x:
 http://www.claris.com/TS/FAQs/IndexFileMakerPro2.x.html
 http://www.claris.com/TS/FAQ/FileMakerPro2.x.html
 Claris FMPro and HTTP (featured article):
 http://www.claris.com/TS/Featured/FMProCGI/Article.html
 Claris FTP server (anonymous downloads):
 ftp://ftp.claris.com
 Claris Tech Info Database (more than 4000 searchable articles):
 gopher://spinaltap.micro.umn.edu/70/computer/Claris/FileMaker
 gopher://spinaltap.micro.umn.edu:70/77/computer/Claris
 http://www2.claris.com/techinfo/
 http://www2.claris.com/cgi-bin/eg/techinfo_search.html
 "search engine"
 Tips from the File Maker User Group (FMUG)
 at Massachusetts Institute of Technology (MIT):
 http://web.mit.edu/mugs/www/fmtips.htm
 Misc. sites collected by Joel Bowers <jmba@[EMAIL PROTECTED]
>:
 ftp://ftp.th-darmstadt.de//pub/database/filemaker-pro/faq.fm.sit "Home
 site of the FAQs, compressed database release"
 http://www.cis.ohio-state.edu/hypertext/faq/usenet/databases/filemaker-p
 ro/faq/faq.html "FAQ monthly html release"
 http://www.kudosnet.com/ISO/ISOmain.html
"ISO Magazine"
 http://rowen.astro.wa****ngton.edu/
"ROFM CGI AppleScript OSAX"
 http://macweb.com/
"WWW server for FMP"
 http://www.amug.org/~hposoft
 "CSA member"
 http://ape.com/Diana/
 http://www.blueworld.com/lists/fmpro/
"mailing list FMPRO"
 http://www.bluefin.net/~jmba/
"CSA member"
 http://canstock.com/
 http://delcom.accsyst.com
 http://www.icon.co.at/icon/e-filefax.html
"Send Fax"
 http://www.in.net/~wrskas/Index.html
"templates for barcharts, FMP3"
 http://www.macvantages.com/
"CSA member"
 http://www.magic.ca/~octal/octal.html
"CSA member"
 http://www2.pps.ca/emplys/kb/kbhome.html
 http://www.shore.net/~tsginc/FM.htm
"CSA member"
 http://www.syspac.com/~suncou
 http://www.tiac.net/users/eweiser/index.html
"CSA member"
 ftp://ftp.th-darmstadt.de//pub/database/filemaker-pro/ "Plain text FAQs,
 old postings of FMPRO-L, various templates"
 http://www.Xon-Xoff.com
"French User Group"
 http://www.venus.it/FMP
[Italian]
 http://www.algonet.se/macboden/
[Swedish]
 More Links that may have some FileMaker Connections
 http://www.artscope.com
 http://www.macsite.com/macsite/searcher.html
 http://www.intac.com/~salenick/sa.html
 http://users.aol.com/stevem7994/DPpage/DailyPlanner.HTML
 http://www.powerfiles.com
"PowerFiles - A good source for Database
 Solutions, Templates, Demos and Tips (FMP 2.x and 3.0)." (by Allison
 Glass)
   
1.2   Software and templates
 
 sumex-aim.stanford.edu (info-mac) and its mirrors, most in directory
 Applications and Database, e.g.:
 ftp://ftp.switch.ch//mirror/info-mac/app/
 ftp:/info-mac/app/
 ftp:/info-mac/data/
 (a notation sup****ted e.g. by Anarchie, a ftp and archie software by
 Peter Lewis, to get it from your favorite mirror)
 Umich and its mirrors, e.g.:
 ftp://mac.archive.umich.edu/mac/util/filemaker/
 ftp:/mac/util/filemaker/
 Archie:
 Many templates contain either .fm or FMP within the name - so you may
 perform an archie or index search on those characteristic expressions.
 Claris:
 ftp://ftp.claris.com/pub/USA-Macintosh "Software"
 ftp://ftp.claris.com/pub/USA-Macintosh/Updaters/ "Updaters"
 ftp://ftp.claris.com/pub/USA-Macintosh/Solutions_Showcase/ "Solutions"
 ftp://ftp.claris.com/pub/USA-Macintosh/Templates/ "Templates"
 ftp://ftp.claris.com/pub/USA-Macintosh/Trial_Software/ "Trial_Software"
 America Online:
 Business Section/Database Sup****t/ "FileMaker Pro Templates"
 CompuServe:
 Claris Sup****t
 Claris BBS:
 The Claris BBS is a file upload/download service. You can download
 updaters, trial software, templates, and frequently asked questions.
 Call 408-987-7421 with your communications software set for 8/N/1 to
 connect at speeds up to 14,400 bps.
 Claris Solutions Alliance:
 Commercial Database Developpers. Demos and Solutions are available on
 the Claris sites.
 (see information in section Forums)
 Demos:
 http://www.ccsi.com/n-perspect
 http://www.magic.ca/~octal/octal.html
 Commercial templates and free tips to AppleScript and FMP.
 http://www.amug.org/~hposoft/
 Commercial templates, free tips and demos.
   
1.3   Newsgroups
 
 news:comp.sys.mac.databases
 Posting concerning FMPro may appear in comp.sys.mac.apps,
 comp.sys.mac.misc, comp.databases, de.comp.databases, several local and
 IBM-PC related groups as well, but I highly recommend to keep them in
 comp.sys.mac.databases only.
   
1.4   Mailing lists
 
 FMPRO-L is the main list on FileMaker Pro where these FAQs were composed
 from. It is a well attended list with about 20 messages per day.
 There are currently two further lists for discussion of Filemaker Pro
 topics available: The regular Filemaker Pro list (fmpro@[EMAIL PROTECTED]
),
 and one for discussion of Filemaker Pro CGIs (fmpro-cgi@[EMAIL PROTECTED]
),
 both created in August 1995. They offer WWW sup****t on
 <http:www.blueworld.com>, e.g. to subscribe and search for old articles
 (searchable archive).
   
1.4.1  FMPRO-L
 
 send to this list: FMPRO-L@[EMAIL PROTECTED]
 Claris FileMaker Pro discussions
 This mailing list is for discussions on all aspects of the FileMaker Pro
 database development environment, published by Claris Cor****ation. Both
 the Mac and the Windows versions of the program are welcome topics of
 discussion, as are future speculations on the direction of the
 environment. Posters should refrain from submitting enclosed database
 files to the list, and any freeware and shareware databases should be
 submitted to the appropriate Mac and/or Windows anonymous ftp sites. On
 the  Macintosh side, these are sumex-aim@[EMAIL PROTECTED]
 and
 mac.archive.umich.edu.
 To subscribe to this list:
 Send to: LISTSERV@[EMAIL PROTECTED]
 Subject: subscribe
 Message: subscribe fmpro-l <your full name here>
 To Unsubscribe from this list:
 Send to: LISTSERV@[EMAIL PROTECTED]
 Subject: unsubscribe Message: SIGNOFF FMPRO-L
   
1.4.2  FMPRO
 
 send to this list: fmpro@[EMAIL PROTECTED]
 "This list was created after consulting with several prominent FMPRO
 developers as well as Claris Tech., all of whom had no knowledge of an
 existing FMPRO list. As well, we've created the associated FMPRO-CGI
 list to allow for an adequate forum for that specific topic." (from
 bill@[EMAIL PROTECTED]
 (Bill Doerrfeld))
 Commands should be put in the message body of the message sent to the
 list request address, "fmpro-request@[EMAIL PROTECTED]
". Here are the
 commands currently recognized by this list:
 To subscribe to the list fmpro: subscribe fmpro
 If you need a digest version of the list, use the command: subscribe
 digest fmpro
 This command unsubscribes you from one of the lists: unsubscribe fmpro
 To get the help file, send: help
   
1.4.3  FMPRO-CGI
 
 send to this list: fmpro-cgi@[EMAIL PROTECTED]
 "CGI stands for "Common Gateway Interface". The CGI definition provides
 a standard for external gateway programs to interface with information
 servers such as MacHTTP. If You're running Your own WWW-Server, You can
 define FORMS, that Users can fill out. The contents can go into a
 FMP-Database - using these  CGI's)
 More Information: http://hoohoo.ncsa.uiuc.edu/cgi/overview.html
"
 (from schneima@[EMAIL PROTECTED]
 (Markus Schneider))
 Commands should be put in the message body of the message sent to the
 list request address, "fmpro-request@[EMAIL PROTECTED]
". Here are the
 commands currently recognized by this list:
 To subscribe to the list fmpro-cgi: subscribe fmpro-cgi
 If you need a digest version of the list, use the command: subscribe
 digest fmpro-cgi
 This command unsubscribes you from one of the lists: unsubscribe
 fmpro-cgi
 To get the help file, send: help
   
1.5   Forums
 
 Full-service Sup****t Forums
 (from Jim_Spelman@[EMAIL PROTECTED]
)
 Claris does not provide person-to-person sup****t via the Internet.
 [They] invite you to visit [their] full-service sup****t forums on the
 online services below, which include discussion boards monitored by
 Claris Technical Sup****t staff, TechInfo database, and extensive
 software libraries. [Their] forums on America Online and eWorld also
 offer product registration and ordering.
 America Online: keyword CLARIS
 CompuServe: GO CLARIS
 eWorld: shortcut CLARIS
 AppleLink: Third Parties: Claris or CLARIS.TECH
 Claris BBS  408-987-7421
 Contact the online service of your choice for a member****p kit. Prices
 and policies current as of 12/1/94. All prices are in U.S. dollars
 unless specified otherwise.
 America Online, 800-827-6364 in U.S. or 1-703-448-8700
 Free kit, 10 hour free trial offer, $9.95 per month includes 5 hours
 free time, $3.50 for each additional hour.
 (keyword: CLARIS)
 CompuServe, 800-848-8199 or 1-614-529-1349 in the U.S., (+44)
 272-760-681  in Europe, 9-9 London time
 Kit is  $25 and includes  $25 usage credit for first month. The $25 is
 refundable if you discontinue during the first month. Subscription price
 is $8.95 per month for access to basic services, with extended services
 being $9.60 per hour at 2400 baud and $16 per hour at 9600.
 (keyword: GO CLARIS)
 eWorld, 800-775-4556 or 1-408-974-1236
 Free software kit offer until 12/31/94. Offer good in U.S. only. Monthly
 fee of $8.95 which includes 2 hours of use during non-prime time (6 PM
 to 6 AM local time). Each additional hour is charged at $4.95 per hour.
 An additional $2.95 per hour will be charged for all prime-time usage (6
 AM to 6 PM local time).
 (go to shortcut: CLARIS)
 AppleLink, 800-877-8221
 Kit is $70. Monthly minimum charge of $12. Connect charges at 2400 baud
 are $12 per hour plus a 5.5 cent surcharge for every 1000 keystrokes.
 Rates for 9600 baud are $37 hour with no surcharge.
 (Third Parties: Third Parties A-G: Claris)
 Claris Solutions Alliance:
 Member****p $249 per year. "Our goal is to provide consistent,
 industry-leading marketing service and sup****t to third-parties creating
 new Windows and Macintosh solutions that address the specific business
 productivity needs of users."  Contact Claris, P.O. Box 58168, MS C-22,
 Santa Clara, CA 95052
    800-800-8954 (FAX),
    408-727-8227 (Customer Assistance)
    408-727-9054 Technical Sup****t Macintosh
    408-727-9004 Technical Sup****t Windows
 Directory from Claris Customer Assistance (408/727-8227).  This is a
 150+ page book listing Consultants, Trainers and Custom Developers of
 Claris Products.
   
1.6   Books
 
 Various books are available, from beginner to advanced users.
 See www.claris.com
 Stephen Cobb, Chey Romfo: 'The Stephen Cobb User's Guide to FileMaker'.
 Windcrest (Blue Ridge Summit, PA)
 Rich Coulombre, Jonathan Price: 'FileMaker Pro 2.0 for Macintosh'.
 Addison Wesley Publi****ng Company, 1993,
 ISBN 62212-2, Pages/Price unknown
 Guy Kawasaki: 'Database 101'. Peachpit Press Inc., 1991
 Maria L. Langer: 'FileMaker Pro 2.0 for the Mac in a Nutshell'.
 SYBEX,1993
 Charles Rubin: 'The Macintosh Bible   Guide to FileMaker Pro'. Peachpit
 Press Inc., 1993
 Charles Rubin: 'The Macintosh Bible   Guide to FileMaker Pro 2.0'.
 Peachpit Press Inc., 1993
 Michael Singer: 'Database Design with FileMaker Pro'. John Wiley & Sons,
 ISBN 0-471-02022-2, $ 24.95 (3/94), Pages unknown
 Barrie Sosinsky: 'Using FileMaker Pro 2.0 for the Mac'. Que Corp, 1992
 Barrie Sosinsky: 'Using FileMaker Pro 2.0 for Windows'
 Books for FMP 3.0:
 C. Ann Brown: 'FileMaker Pro 3 for Macintosh: Visual QuickStart Guide'.
 Peachpit Press, 1996/04, ISBN 0-201-88357-0 (1995/10), 256 pages, $16.95
 Don Crabb, Jeff Gagne: 'The Guide to FileMaker Pro'. Hayden Books
 Alex Kennedy: 'Filemaker Pro 3.0'. Addison Wesley, 1996/04, ISBN
 0-201-87762-7 (1995/12), 512 pages, $39.95
 Tom Maremaa: 'FileMaker Pro for Macs for Dummies', IDG Books Worldwide,
 Inc., 1995/12, ISBN 1-56884-906-0 (1995/03)
 Chris Moyer: 'Special Edition Using FileMaker Pro', Que, 1996/01, ISBN
 0-7897-0662-8 (1995/11), $34.99 (Retail Price)
 Steven A. Schwartz / MacWorld: 'FileMaker Pro 3.0 for Mac', 2nd Edition.
 IDG Books Worldwide, 1996/03, ISBN 1-56884-728-9 (1995/09), $34.99
 Charles Rubin: 'The Macintosh Bible   Guide to FileMaker Pro 3.0'. 3rd
 ed., 1996/04, Peachpit Press, ISBN 0-201-88356-2 (1995/10), 496 pages,
 $24.95
 Course Material:
 John Latrash: 'Claris FileMaker Pro 3.0 Macintosh and Windows 95: Quick
 Course'. South-Western Educational Publi****ng
 Newsletters:
 'The FileMaker Re****t', published 10 x a year,
 Elk Horn Publi****ng / P.O. Box 1300 / Freedom / CA  95019  / Phone (408)
 726-1232 / Fax (408) 726-1233
 16 pages $65 per year
 'Inside FileMaker Pro', published monthly
 The Cobb Group / P.O. Box 35160 / 9420 Bunsen Pkwy, Ste. 300 /
 Louisville, KY  40220 / 40232-9719 / Phone: 800-223-8720
 12 pages $39 per year
 The ISO Magazine
 <http://www.kudosnet.com/ISO/ISOmain.html>
 FMPro online user magazine / ISO <ISOeZine@[EMAIL PROTECTED]
>
 First year subscriptions are free
 Audio and Video Cassettes:
 check www.claris.com

------------------------------
 
Subject: 2  Version History
   
2.1   What is the current version of FMPro for Macintosh
 
 FMPro 3.0:
 Macintosh: 3.0v3 (US), other national releases
 Windows95: 3.0
 Win3.1: ?
 Windows3.1: announced for June 1996
 (source: BUSINESS WIRE--April 23, 1996, from Steve Dell
 <stevedell@[EMAIL PROTECTED]
>)
 trial software:
 <ftp://ftp.claris.com//pub/USA-Macintosh/Trial_Software/FileMakerPro3.0v
 2Trial.sea.hqx>
 <ftp://ftp.claris.com//pub/USA-Windows/Trial_Software/fmtrial.exe>
 updaters from 3.0v1
 <ftp://ftp.claris.com//pub/USA-Macintosh/Updaters/>
 FMPro 2.1:
 US: 2.1v3
 trial software:
 <ftp://ftp.claris.com//pub/USA-Macintosh/Trial_Software/FileMakerPro2.1v
 3.sea.hqx>
 updater from 2.0:
 <ftp://ftp.claris.com//pub/USA-Macintosh/Updaters/FileMakerPro2.1v3.sea.
 hqx>
 <ftp://ftp.claris.com//pub/USA-Windows/Updaters/fmup21v3.exe>
 and on info-mac mirrors
 German: 2.1Dv3
 updater from 2.0 available on www.claris.com
   
2.2   Is Filemaker Pro relational
 
 FMPro 3.0: Yes. It sup****ts many-to-one and one-to-many relations.
 Many-to-many relations are possible by a manual table.
 As a personal statement: I doubt that FMP fulfills every definition of a
 relational database. My experience is that it sup****ts various statical
 (manual) relations and works as a kind of "bidirectional lookup". It
 lacks dynamic relations based on other criteria such as a field or file
 name.
 FMPro 2.1 has some features, e.g. lookup fields, that may perform some
 relational tasks.
   
2.3   When will FMPro 3.0 be released
 
 It's available since 18/12/1995.
 Pricing is:
 Mac     $199
 Win(95) $199
 upgrade $99
 The runtime version should be available for CSA members from March '96
 on.
   
2.4   Features of FMPro 3.0
 
 Relational capabilities:
 * Sup****ts one-to-many, and many-to-one relations
 * many-to-many relations can be masked to one-to many relations
 * Relations are defined in a define relations dialog box. Where you
 relate the current file to another, and then build relation****ps from
 field to field.
 * Has a ****tal tool that let you view data from one file in another
 files layouts. You define a ****tal area then drag an external field into
 it.
 * Lookup functions remain.
 User Interface:
 * Button drawing and defining is done in one step.
 * Buttons in 3D-look
 * Layouts can be hidden
 * Possibility to toggle window refresh on and off
 * Fixed paper margins
 * Redirect Cancel command
 Scripting
 * If..then..else (conditional) statements in scripts
 * Loops
 * Sup****t for relational requirements
 * Improved halt or pause of scripts (while other scripts execute)
 * Replace field by results of a calculation (Set field, Paste result)
 * Copy record, Copy all records to clipboard as tab-delimited text
 * No Paste of multiple fields in one step
 * Scroll window instead of (Home, Page Up, etc.) with freeze or zoom
 percentage
 * Comment lines within scripts
 * Perform on exit script
 * In sup****t of new features:
   Revert Record/Request, Exit Record/Request,
   Toggle Text Ruler, Set Use System Formats, Recover,
   Show Message, Beep,
   Change Password, Set Multi-User
   Flush Cache to Disk (Save changes)
 * PlainTalk sup****t (Mac only)
 * Better sup****t for Apple events and Applescript (Mac only)
 * Send/execute of complete AppleScripts (Mac only)
 * Object Linking and Embedding OLE: insert, update (Windows only)
 * Dynamic Data Exchange DDE: send (Windows only)
 * Send mail (Windows only)
 * No copy/paste of scripts/scriptsteps
 Calculations
 * New functions:
   LeftWords, MiddleWords, RightWords
   PatternCount, WordCount
   Substitute, Occurence
   GetRepetition
   GetSummary
   DayOfWeek
 * About 30 status messages
 * Loops: Loop...ExitLoop
 * Field verification (validation) by calculations
 * User-specified error message
 * Autoenter of data via calculations (entered data is editable)
 * Global fields, entered only once
 * Custom date format
 Data storage and exchange
 * file size maximum expanded to 2 gigabytes (previously 32MB)
 * ability to open up to 50 files simultaneously (previously 16 files)
 * Conversion from FMP 2.1 by simple "point and click" process
 * Indexing of fields only on demand
 * Display index by word or field
 * Database opens with default password
 * Drag and drop text from one field to another and to other applications
 * Ex****t functions are improved, making it easier to select and arrange
 fields for ex****t
 * Automatic generation of a new database from text files, spreadsheets,
 database files
 * The TCP/IP sup****t will let you network cross-platform over LAN's and
 the Internet.
 * Phone dialing through speaker or modem
 * The file limit will be bigger and it can sup****t 50 simultaneous
 users.
 * Containers instead of Picture/Sound, additionally for movies and OLE
 (Windows 95). Data is held internal or as file reference
 * No SQL sup****t by FMP itself, possible via third party products
 * Only AppleScript as interface (Mac only)
 Text editing
 * Mail Merge within FMP (more powerful than sliding objects)
 * Individual paragraph formats
 * Text with Tabs and fill characters
 * Rulers within text fields
 * Text formatting tool bar
 * with font, size, alignment, tab stops, character styles
 * Vertical adjustment of text within field (Top, bottom, centered)
 * Field contents can be included in text with markers
 * No hyphenation or soft-hyphens
 * Replace data based on calculation (even calculations on itself)
 * Revert record as undo on complete record
 * Value listings improved, e.g. as list from related fields
 System Requirements Macintosh:
 * System 7.0 or later, recommended 7.1 or later
 * CD-ROM  or 1.4 MB disk drive
 * 4 MB RAM, recommended 8 MB for 680X0 Macintosh, required 8 MB by Power
 Macintosh
 System Requirements Windows 95:
 * Intel compatible PC
 * Windows 95 or Windows NT 3.51 or later
 * 8 MB RAM, recommended 16 MB for Windows NT
 * CD-ROM or 3.5" disk drive
 ("Claris will consider adding sup****t for Windows 3.1 for a future
 version of FileMaker Pro [...] based on the speed of migration to
 Windows 95..."; MS Access also doesn't sup****t Windows 3.1)
 (From a Claris press release, 24/08/95)
   
2.5   FileMaker Pro Server
 
 Q. What exactly is FileMaker Pro Server 2.1?
 A. FileMaker Pro Server now sup****ts the Novell IPX/SPX network protocol
 (using the Novell MacIPX system extension) in addition to the AppleTalk
 protocol sup****ted in the previous version of FileMaker Pro Server.
 FileMaker Pro Server also introduces multi-protocol sup****t for
 cross-platform workgroups.
 (From a Claris press release, 24/08/95)
 >> Further information in this press release, dated 24/08/95, is
 available.
 >> Is anyone willing to compose an appropriate description? See:
 <ftp://ftp.th-darmstadt.de//pub/database/filemaker-pro/New FM Pro 3
 Info>
 keywords: multi-protocol, performance improvements of FMP Server 2.1,
 68K/PPC machines only, upgrad price $99 (after 3/95 free), up to 100
 users may now open up to 16 files

------------------------------
 
Subject: 3  FMPro 3.0
   
3.1   Think relational
 
 FileMaker Pro 3.0 is a further improvement of the simple, flat database
 concept of a table.
 It sup****ts "relational capabilities". What's this? If you knew FMPro
 2.1, it's a kind of editable, bidirectional lookup.
 A relation is a kind of static connection when a certain field of a
 record of a database matches its counterpart somewhere else. Based on
 this relation you may get the contents of other related fields to this
 matching record.
 The basic relation is from one field to another one, a one-to-one
 relation. Example: a relation from a customer database to get related
 data from an address database, based on the matching customer id.
 You may have multiple records that share the same information - this is
 a many-to-one relation. Here the concept of relations demonstrates its
 major power: you change the information only once, and immediately it
 becomes available for all other records that hold a relation to this
 information. Example: A customer ordered multiple times. His address is
 still the same.
 Some definitions on database concepts (by demey@[EMAIL PROTECTED]
 (Hendrik
 Demey)):
 * A relation****p: a "virtual" link between 2 different databases (based
 on a link between 2 *identical* fields in these 2 databases), allowing
 information from database 1 (the parent) to be displayed in database 2
 (the child). The relation****p is based on an exact match between two
 fields in the parent and child database. The trigger field is also
 called a "primary key". When a child database looks at information from
 its parent, it will display this "primary key". Some databases are
 constructed to display information from several "parents", in that case
 all the "primary keys" are called "foreign keys", because they uniquely
 identify information in other databases.
 * A related field: Information in a related field exists only in another
 (the parent) database, and not in the database in which this field is
 being looked at (the child). Related fields are represented by their
 name being prerended by a double colon (::related_field_name). If You
 try to ex****t all the info of a certain record to a tab delimited file,
 starting from a database with one or more related fields, based on one
 or more relation****ps, the info from the related field is not ex****ted
 to this text file, as it does not exist in this specific child database,
 but only in its related parent.
 Comment: you may include related records for ex****t. This will include
 EVERY matching record! Example:
 Field 1, Related::Field 2 will ex****t as
 Key1,"The first related field"
 ,"Another related field, matching to Key1, too"
 * A ****tal is a new kind of lay-out tool in FM3, by which You create a
 "window" inside the child database enabling You to view the related
 fields from a parent database. In a one to many relation****p (e.g. a
 database of a school, with the parent a list of all pupils, the class
 they attend and their home address; the child is a database of all
 classes. Selecting a specific class will give a view of all pupil
 records attending this specific class), this ****tal will present a list
 view of all related records, based on a specific relation****p. A
 specific ****tal can only be based on *only one* relation****p. In a
 datase, several relation****ps can be created to different (or the same,
 even the same child) files, therefore, more than one different ****tals
 can be created. If specifically enabled, it is possible to create new
 records with new information (e.g. a new pupil entering a certain class)
 in a ****tal, that will be posted into the parent database. Again, if
 specifically enabled, records viewed through a ****tal can be deleted
 from their parent, while being looked at from the child database.
 * A lookup physically copies information from the parent database, again
 based on a specific relation****ps (this is different in FM3 from earlies
 versions!). Ex****ting a tab delimited text file from a record contains
 also the info carried over from a related file through a lookup field.
 Information in a lookup field is static. Once copied over from the
 parent database, the information inside this lookupfield stays
 unchanged, even if the content of the parent field in the parent databse
 is changed in the meantime. Only if specifically asked by a relookup
 command, or by changing the information in the trigger field (the one on
 which the relation****p of this lookup is based) will a new relookup be
 performed by FM3 and the content of the lookup field be renewed/matched
 to the parent. Existing contents will get overwritten.
 * Pros and cons of related fields/****tals versus lookup fields:
 - Information in a ****tal or related fields is dynamicaly updated, each
 time the information in the parent database is changed. Lookup fields
 are static.
 - Related databases are smaller than databases based on lookup fields.
 - Related databases present consistent information.
 - Lookups present static information.
 Take a set of invoices and the tax amount (a percentage) based on a
 related field. If You change this tax level, all invoices (included
 older ones) will represent this new value, and all invoices (including
 the older ones) will be recalculated. With a tax based on a lookup
 field, the information in the older invoices remains unchanged, and
 therefore correct. Only newly created invoices will be based on the new
 tax level. (Insofar a relookup order is not being issue!!!)
 - In a lookup field, an exact match is not necesssary; they are more
 flexible regarding the match field to copy next higher or lower matching
 values. In a relation****p an exact match is an absolute necessity in
 order to obtain related records. The dialog box of the lookup definition
 contains 4 radio buttons, enabling the user to define an exact match,
 copy an item lower or higher than, or put up a dialog box with a
 message.
 * Types of relation****ps:
 - One-to-one: only one record corresponds to a certain trigger.
 Information based on a one-to-one relation can easily be entered in the
 same database, in one record.
 - One-to-many: one record in the parent corresponds with multiple
 records in the child (or vice versa). This kind of information is
 represented on the "layout" of an FM3 database by a related field (for a
 many-to-one) or a ****tal (for a one-to-many).
 - Many-to-many: several one-to-many relation****ps exist at the same
 moment, and between the same groups.
   
3.1.1  Many to many relations (m:n)
 
 There are multiple problems on defining many-to-many / m:n relations.
FMP's solution is
 not to sup****t them directly. However, you may use them by mapping a m:n
relation
 manually down to m:1 and 1:n. For that purpose you may have to create a
separate file.
 Example: There's a nice learning example with multiple teachers and
pupils. A teacher may
 have different pupils, a pupil several teachers.
 Teacher database              M:N database        Pupil database
 Key, Teacher Name    Teacher key, Pupil key       Key, Name
 T1,  AAA                      T1, P1              P1,  ZZZ
 T2,  BBB                      T1, P2              P2,  ZZX
 T3,  CCC                      T2, P2              P3,  ZZY
 Now you may get every pupil taught by teacher AAA, or any teacher of
pupil ZZX.
 Workaround:
 Relations within FileMaker Pro are based on indexed lines. A line is
composed of all
 characters up to the end of line (in fact it's an end of paragraph,
entered by <return> or the
 full, last line) with a maximum of 60 characters; from the 61st character
and up is not
 used. Only text fields should hold return symbols. You may use them e.g.
for a one-to-may
 key or a many-to-one key, and thus as well for a many-to-many key.
 Example:
 The teacher database may hold the record and fields
 Teacher: T1, Pupils: "P1<return>P2"
 This will relate to both pupils ZZZ (P1) and ZZX (P2)
 Within the Pupil database you may use
 Pupil: P1, Teachers: "T1<return>T2"
 Now you may find from P1 all other pupils of his class of teacher T1.
   
3.2   What are ****tals?
 
 Q: What are ****tals?
 A: Imagine them as a window to look through at datas within another
 database.
 Actually, there are some limitations:
 * In a ****tal, records are displayed in their order of creation only.
 * Deleting ****tals should be done very carefully.
 If you delete a record, and permit deletion of related records, you may
 remove data that is still used for other records.
 If you do not use deletions properly, you may delete by mistake actual
 or related records.
 A related record may contain more data than what you see within the
 ****tal.
 But here the Pros:
 They are fast and flexible!
 You may use them to navigate around quickly by the "Go to related
 record" script command.
 Additional note on sliding ****tals: From FMP 3.0v3 on fields must be
 perfectly enclosed to slide properly.
   
3.2.1  Sorting ****tal Records
 
 ****tals have no option to sort, but show the records in order of
 creation.
 There are various workarounds:
 - For complete databases this will force a permanent, resorted order:
 * sort the database in question in correct order,
 * create a clone,
 * im****t to the clone
 - For small sets of records
 1) Flag the records in the ****tal
 2) Sort the records in the many file (contains the ****tal records)
 3) Duplicate the sorted records (in creation order the duplicates are
 already sorted)
 4) Delete the flagged records
 5) View the records in the one file through the ****tal
 (re****ted by Kirk Bowman <bowman@[EMAIL PROTECTED]
>)
 Example from Ted Shapiro, NY:
 ----------
 By the way, here's a not too horrible method for sorting the contents of
 a ****tal, aka the SORTAL (tm):
 - Many students have registered for one class.
 - Each class has a unique ID#.
 - In the CLASSES file there is a ****tal to view students in the related
 file ROSTERS.
 In CLASSES -- script: SORTAL Part 1
   Freeze Window
   Copy Class ID#
   Perform script (External: ROSTERS "SORTAL Part 2")
   Refresh Window
 In ROSTERS -- script: SORTAL Part 2
   Perform Script (Find & Flag Class ID)
   Perform Script (Sort StudentLastName)
   Perform Script (DupeLoop)
   Perform Script (Find Flagged & Delete)
 script: Find & Flag Class ID
   Enter Find Mode
   Paste (Select, "Class ID")
   Perform Find
   Replace (No Dialog, "Flag", "1")
 script: Sort StudentLastName
   Sort (Restore, no dialog)
 script: DupeLoop
   Go to Record/Request (First)
   Loop
    Duplicate Record/Request
    Clear (Select, "Flag")
    Go to Record/Request (Exit after last, Next)
   End Loop
 script: Find Flagged & Delete
   Perform Find (Restore) --- this is find Flag=1
   Delete All Records (No Dialog)
 ----
 Another solution is to go via a separate database. Example: database 1
 holds field A as trigger for ****tal B. A script finds all matching
 values in database 3 and sorts them properly. Then the script lets
 im****t all relevant ****tal data to a special database 2 that only holds
 e.g. the ****tal data. The ****tal then gets all data from this ****tal
 database 2 to database 1.
   
3.3   Bug & Wish List
 
 Send suggestions and bug re****ts to www.claris.com on their suggestion
 page.
 http://www2.claris.com/forms/suggestion.html
"Suggestions & Bug re****ts"
 "James Fortier" <jim40er@[EMAIL PROTECTED]
> maintains a list that may be
 available on
 http://www.ecxs.com/filemaker/ftp/FixesFeaturesFolder.sea.hqx
   
3.4   Relational Examples
 
 This section will describe unusual solutions for relations to
 demonstrate the capabilities. Please forward your examples for
 inclusion!
   
3.4.1  Self Joining list
 
 In case you want to see a ****tal of records that match a valid search
 criterion only:
 "Now here's something else that's way cool about Self-joins.  If you
 want to generate aggregate data on only a subset of your database, you
 can do so in the following manner:
 1) Create a text field called, say, FoundSet.
 2) Create a calculation field called, say, FoundSetIndex as a
 concatenation of YourKeyValue (such as Customer ID, Client ID, or
 whatever) & FoundSet.  Make the result text.
 3) Create a self-relation on FoundSetIndex, i.e., have the same file
 point back to itself.
 4) Define your aggregate function to be dependent on the related
 (self-joined) field (this is im****tant).
 5) Find the records you want to work with
 6) Go to the FoundSet field and replace the value in your current found
 set with something like an "F".  This makes only the current found set
 records create the self-join.
 7) Stand back and view in amazement the power of FMP3.
 PS Don't forget to clear the value in the FoundSet field before you exit
 the script."
 (from Jim Burd <burdman@[EMAIL PROTECTED]
>)
 <value sensitive lists under construction, currently about 8
 alternatives to verify and classify>
   
3.5   Globals
 
 Globals are helpful im many ways.
 They may hold variables, such as
 - a predefined constant value that you use throughout your database
 This may be e.g. a user-defined delimiter for phone numbers, a certain
 key word, a signature, logo, warning etc.
 - a variable value, such as the layout number, a buffer for some
 calculation, replace, set field, copy or paste script step etc.
 Globals are not as global as you might expect. When a database is shared
 between multiple users, every user may modify the global value on his
 own, although he may not be able to save this modified value.
 Be warned that when you clone a database, the value of a global field
 will be removed as well!
 Global fields may be repeating fields. Thus you may use e.g. a
 calculation or script to extract one of multiple choices for variables
 or even pictures.
 Global fields may not get indexed. This may look obvious, but results in
 some drawbacks. A major one is visible for relations: They only may be
 built on indexed values. But as soon as a calculation includes an
 unindexed value, such as another unstored calculation or global field,
 it may not get indexed any more.
 BTW you get a warning when you build a relation on a global field
 itself, but it still is possible. A suitable example is e.g. a dummy
 relation (global field one to related field one, both contain the value
 "1") to a shared database in order to use the same - maybe global -
 information within different databases.
 Any global field within another database may be accessed by any
 relation, regardless how nonsensical or matching this relation****p is.
 "did you know you can still modify globals:
  - even if the file is "locked" in the finder
  - even if the file is on a locked disk/volume
  - even if the access privileges are set to disallow edits
 The only way to prevent mods are to set the access privileges for that
 field to be read-only.
 Interestingly, the first two attempts above allow changes which don't
 get saved to disk, but the third does get saved - which could be a
 "gotcha" if you assume otherwise."
 (by Eric Scheid <ironclad@[EMAIL PROTECTED]
>)

------------------------------
 
Subject: 4  Field Formats and Index Values
   
4.1   What do I need index values for?
 
 Most operations are based not on the value typed by hand, but on an
 indexed value that was derived from the actually typed value.
 Rapid find commands, comparisons, lookups and calculations all are
 triggered on the index value.
 The index of a field can be displayed by cmd-I. It is a list of all
 indexed values, sorted in alphabetical order.
 The index can be used to select and paste previously entered values
 rapidly.
 Index also works on check boxes and radio buttons - as cut, copy and
 paste do.
 Indexing works different on various field formats.
 Indexing is not done immediately. At least after selecting the next
 record, the index should get updated properly.
 Due to conversions, bugs or system crashes, the index may get corrupted.
 In this case find and lookup won't work properly. Im****ting in a clone
 of the database will force the construction of a new index.
 Calculations take the indexed value for comparisons. Such "A" = "a" is
 true. If you want to use an exact comparsion, you may use the Exact
 function. Exact("å", "a") then will return false.
   
4.2   Lookups
 
 Lookups are based on the indexed values of all records. It will copy a
 value from the first, matching record that it finds.
 For FMP2.1 lookups are based on matching words:
 Example:
 Lookup File "main", Current File "main"
 Copy the contents of "Field1" into the field "Lookup_Field"
 when the value in "Field2" matches a new entry in "Field2"
 This will cause a self lookup, pasting a matching value.
 Text Field2 contains "A B" (record 1) and "B A" (record 2). Both fields
 are indexed as "A " and "B ". Creating a new record "A B" will copy
 Field1 from Record "A B" to the Lookup_Field. Creating a new record "B
 A" will copy from Record "A B", too, since the triggers "A " and "B "
 are the same.
 A lookup on "A" or "B" may match an existing record as well, since all
 words of the actual record ar matched. This may even work on incomplete
 words.
 If you want to copy from exact matching values, use the non-separating
 delimiter option-space. "B<option-space>A" gets indexed as it is. Words
 only get indexed up to 20 characters!
 Lookups will be used only after you entered new data in the trigger
 field (Field1 in example).
 A relookup on all selected records can be forced by selecting the lookup
 trigger field and choosing Relookup from the menu Edit.
 Lookups don't work based on multiple trigger fields. Concatenating
 multiple fields by a calculation and triggering on the calculation is
 possible.
 Relookups on calculations don't work by selecting the calculation field,
 but by selecting any of the fields it is based on.
 For FMP3 lookups are based on exactly matching lines. They use the same
 mechanism as used for relations - check the matching section.
   
4.3   Text formats and Index basics
 
 For an introduction, see the manual "working with Information in
 Records" (Section 4), "Using the Index" (4-9):
 - "Each word in a text field is indexed separately so you can later find
 the records that contain any word you've typed"
 - "Punctuation and special characters aren't indexed"
 - the first character of a word is converted to Upper Case
 - all other characters will get lower case
 - an additional blank character gets appended at the end of the Word
 Example: "this wordTest" is indexed as "This ", "Wordtest "
 The ordinary range for characters is [a..z], [A..Z]. The numbers [0..9]
 get treated as usual. The non-separating blank "option-space" is treated
 like an ordinary character, thus preventing the separation of words.
 Some unusual behaviors I found are (undocumented - don't rely on them):
 - Indexed words are limited to the first 20 characters! Since find
 requests and lookups are based on the index, take care of this
 limitation!
 - Text following an underscore won't get indexed for FMP2.1! "Text_A"
 and "Text_B" both get indexed as "Text ". Don't use the underscore as
 non-separating delimiter!
 - Some special 8-bit characters get translated! Most of the accented
 characters are translated to plain characters. Some special characters
 get translated to two character combinations, e.g. the German Umlaute
 ae, oe, ue and ss. The ligatures fi and fl get lost for FMP2.1!
 - Between characters &, -, / and ' are handled properly, otherwise
 ignored.
 - Between numbers ,, . and : are handled properly, otherwise ignored.
 - Other characters get ignored. All ignored characters work like a
 space, for index display, calculation, find and word delimiter.
 This behavior belongs to text fields. The text limit is 64k, with any
 number of lines. For other field types the behavior may be different, as
 described below.
 FMPro 3 takes an almost identical mechanism for words, but builds its
 index on lines with a maximum of 60 characters instead.
   
4.3.1  Character translation for indexed values
 
 Some of the following 8-bit characters might get lost while mailing.
 Messages posted to newsgroups will be converted to the ISO 8859-1
 (Latin) character set (by YA-NewsWatcher 2.0.29 or better). Messages
 mailed will get translated as Quoted Printable (MIME) (by Eudora 1.5.3
 or better). Please don't complain about messed up characters in this
 subsection.
 ====== Original and Converted Character for Index (US-Version) ======
   Ä  Å  Ç  É  Ñ  Ö  Ü  á  à  â  ä  ã  å  ç  é  è  ê  ë
   A  A  C  E  N  Oe Ue a  a  a  ae a  a  c  e  e  e  e
   í  ì  î  ï  ñ  ó  ò  ô  ö  õ  ú  ù  û  ü
   i  i  i  i  n  o  o  o  oe o  u  u  u  ue
   ß
   ss
   Æ  Ø
   Ae O
   ª  º
   a  o
   æ  ø
   oe o
   À  Ã  Õ  ‘  ¦
   A  A  O  Oe oe
   ' (upper apostrophe = ANSI 213 = 0xD5)
   '
   Þ  þ ligatures fi and fl get lost
 ======================================================================
 Modifications for FMPro 3.0:
 ====== Original and Converted Character for Index (US-Version) ======
   ' '
   ' '
   Þ  þ
   fi fl
   ======================================================================
   
4.4   Printing index fields
 
 The Index itself is not printable. Workarounds are:
 * ex****t all text, then sort and remove the duplicates.
 "It's easy to do on an UNIX mainframe (sort -u flatfile) but takes some
 time [...] It will not return the real index but the contents of a
 field." (from Patrick Delges <pdelges@[EMAIL PROTECTED]
>)
 * ex****t all text, open a text editor with spelling capabilities and
 create a dictionary with all words,
 * ex****t all text, convert all blanks to Carriage Returns, thus creating
 a list of all words, im****t, use strategy to remove all duplicates,
 * to print the index of a particular field, create a new layout,
 selecting the columnar re****t option. Select the field that you wish to
 print the index of.
 Double click on the body part and make it a sub summary when sorted on
 the field in question. Now sort the database on that field and print
 from this layout.
 (from tscott@[EMAIL PROTECTED]
 (Timothy Scott))
 * If you want to ex****t just the index of the field, create a new field
 of type summary. Sort the database on the field you want to ex****t.
 Select the field you want to ex****t and deselect the others. Now select
 your summary field just by clicking on the field name. You now get an
 extra option "Summarise By..." - click on this button, tick to the left
 hand side of the field name, click on OK and then untick the new field
 (if you want to) that FMPro wishes to ex****t.
 (from tscott@[EMAIL PROTECTED]
 (Timothy Scott))
 * Consider Print2Pict to get the contents of a print as readable text
 file.
 * A final solution to extract a table of all field contents by Excel
 Did you ever try to create an index for all fields of a FMP3 database?
 Here's a quick and dirty method that I just developped by using excel
 macros (German release 4.0)
 steps required:
 ex****t all from fmp, e.g. tab delimited
 open for Excel, option e.g. text tab delimited
 create a macro table
 make the proper macros,
 then let it go.
 The two macros required are, as pasted from Excel,
 Extract (a)
 =AUSWÄHLEN("S1")
 =ZELLEN.EINFÜGEN(1)
 =AUSWÄHLEN("Z1S1")
 =FORMEL("=Z1S2")
 =AUSWÄHLEN("Z2S1")
 =FORMEL("=WENN(GLÄTTEN(ZS(1)) = GLÄTTEN(Z(-1)S2);"""";GLÄTTEN(ZS(1)))")
 =KOPIEREN()
 =AUSWÄHLEN("Z1S2")
 =ENDE.AUSWÄHLEN(4)
 =AUSWÄHLEN("ZS(-1)")
 =AUSWÄHLEN(POSTEXT(AKTIVE.ZELLE())&":Z3S1")
 =EINFÜGEN()
 Dateiname=DATEI.ZUORDNEN(1)
 =KOPIEREN("s2")
 =NEU(1)
 =EINFÜGEN()
 Dateineu=DATEI.ZUORDNEN(1)
 =GEHEZU(Z1S2)
 =RÜCKSPRUNG()
 (hm, pasting from Excel as international macro doesn't work. Maybe
 someone does request the excel macro file itself and translate it
 properly. Here's a dictionary: select = auswählen, insert =
 zellen.einfügen, formula = formel, copy = kopieren, reftext = postext,
 cell = zelle, active = aktive, paste = einfügen, new = neu, get.document
 = datei.zuordnen. goto = gehezu, return = rücksprung, trim = glätten,
 row = Zeile, r = z, column = Spalte, c = S, activate = aktivieren, sort
 = ordnen, edit = bearbeiten, delete = löschen, if = wenn,
 datei.berechnen = calculate.document, paste.special = inhalte.einfügen)
 This macro creates a first column that computes its value as "" if it is
 the same as the previous one, otherwise the value itself, both related
 to the next, second column. IT REQUIRES THAT THE FIRST COLUMN OF THE
 TABLE HAS NO EMPTY CELLS AND AN ENTRY FOR EVERY RECORD.
 The second macro takes an unprocessed column, moves it to the second
 column, sorts, computes the values and appends them to a new table. You
 must place it as the second column of your macro table, otherwise the
 goto commands will fail.
 SortAndFilter (b)
 =AKTIVIEREN(Dateiname)
 =AUSWÄHLEN("S3")
 =KOPIEREN()
 =AUSWÄHLEN("S2")
 =EINFÜGEN()
 =ORDNEN(1;"Z1S2";1)
 =AUSWÄHLEN("S3")
 =BEARBEITEN.LÖSCHEN(1)
 =WENN(Z1S2="";RÜCKSPRUNG();)
 =DATEI.BERECHNEN()
 =AUSWÄHLEN("S1")
 =KOPIEREN()
 =AKTIVIEREN(Dateineu)
 =AUSWÄHLEN("Z1S(1)")
 =INHALTE.EINFÜGEN(3;1;WAHR;FALSCH)
 =ORDNEN(1;AKTIVE.ZELLE();2)
 =GEHEZU(Z2S2)
 =RÜCKSPRUNG()
 As you might see, this macro shall stop on the first, blank column. You
 may force a new execution of the second script. If you assigned a proper
 name and opt-cmd abbreviation (in my case it is Name "SortAndFilter" for
 Z1S2, cmd-opt-b) the simple cmd-opt-b keystroke will let it run up to
 the next blank column.
 Now, maybe someone else can help me on the "" problem - unfortunately
 this is not empty, but sorts in front of any other value. How may I
 force it to be empty? Assigning NV() is no good, skip blank lines on
 paste.special with results only does not work, and the German docs are
 incredibly poor.
   
4.5   Number format
 
 Entries may be up to 255 characters in only one line. Most characters
 are accepted, but only numbers will be recognized. Thus you can enter
 currency symbols, decimal points, percent symbols etc.
 The valid numbers are 0..9
 Leading "-" is recognized as minus
 , (comma) and . (dot) may be used as delimiters. The symbols are treated
 differently in international versions! In Germany "," is a decimal
 delimiter, "." marks thousands, in US it's just vice versa. FMPro seems
 to recognize the system settings.
 Yes and True are translated to 1
 No and False are translated to 0
 All other characters are just ignored, except blank and Š (="...") that
 work as separators.
 No additional blank is appended to the index value. Only 122 characters
 will get indexed.
 Examples:
 "1.2 DM" is "1.2" (US) or "12" (German)
 "-3"     is "-3"
 "4-5"    is "45"
 "6Š7"    is "6" and "7"
 "8 Pounds 9 Pence" is "8" and "9"
 Some less known fact is, that the internal representation will use 15
 digits only! Thus the TextToNum(of a 16 digit credit card number) will
 get rounded to 15 digits. The random function only produces 15 digit
 values.
 Counting serial numbers from
 999 999 999 999 999 will continue with
 999 999 999 999 1000 thus taking the leading part as text, increasing
 only the last part before the delimiter. This is the same usage as
 serial numbers with a leading string.
 The maximum possible serial number is "2147483647". Counting from there
 on FMP may produce "-2147483648", "--2147483647", "---2147483648".
 2147483648 equals 2^31. The possible integer range of 32 bit is
 -2147483647 ... 2147483647.
 As indicated elsewhere, 2147483647 ist the last possible number for a
 goto last record script.
 One may assume that the internal representation of numbers is either as
 32 bit integers (within the range -2^31 ... +2^31) or as 64 bit floating
 number with 54 bits mantissa (2^54 = 1.8 * 10^16, artificial limit at
 10^16 - 1), one bit sign and maximum 9 bits exponent for a 64 bits
 representation. A typical size of 32 bit CPUs for the data type floating
 double (64 bits) is 2.2 * 10^-308 to 1.7 * 10^308 (plus and minus, 15
 digits precission)
   
4.6   Date format
 
 Entries may be only one line long.
 The date format depends on the system settings. Possibilities are
 day/month/year, month/day/year and year/month/date.
 For further explanations the German format DD.MM.YYYY is used.
 Input may be any valid one to four digit number, from x.x.x to
 xx.xx.xxxx. The valid range is from 01.01.0001 to 31.12.3000.
 Any single non-numerical character may be used as delimiter.
 If the year is omitted, the actual year will be used. Taking only two
 digit years should take the actual century.
 Examples:
 "1.1.1"   is "01.01.0001"
 "29.2.94" is "29.02.94"
 "1-4+04"  is "01.04.04"
 "1-4"     is "01.04.95"
 Some more words on the actual date format: The date is stored similar to
 a numerical value. Calculations on dates will work like those on
 numerical values. Conversions are done automatically but may work
 different than you might expect! Take care and it will be very powerful.
 The date with the number 1 is "01.01.0001" although our calendar didn't
 exist at that time, but only since the Gregorian calendar was introduced
 today      728 460 is "16.06.1995"
 maximum  1 095 727 is "31.12.3000"
 next higher values might be displayed as "?" and won't get indexed, but
 e.g. 1 000 000 000 is "04.01.*0,1" as date
   
4.7   Time format
 
 Although various output formats are possible, the input is limited to
 numerical values and the colon as delimiter.
 AM/PM is available for 12-hour formats.
 Additional time information is allowed, depending on your system
 settings. Example: while typing, it was "15:48:23 Uhr", indexed as
 "15:48:23"
 Input format is hours/minutes/seconds Input may be from "x:xx" to
 "xx:xx:xx" in the valid range The valid range is between -32767..32767
 hours.
 Similar to the dates, the internal representation can be handled as
 number in seconds from time "00:00:00" (see above).
 The time with the number
 0 is "00:00:00"
 -60 is "-00:01:00"
 Numbers outside the valid range may be converted properly.
 Tip: If you needed the input format minutes/seconds, just use "HH:MM"
 instead! Most of the time this is fine, e.g. for recording the length of
 CD tracks. If you need the real time for another calculation, convert it
 by a division /60.
   
4.8   Hidden fields
 
 In order to paste values to a certain field, e.g. while using scripts,
 find dialogs etc., the field must be available on the choosen layout.
 If the field shall be available but not be displayed you may
 - assign a field size of 1 by 1 point to the field:
 select layout mode, display and edit size (recommended)
 - assign an invisible font color to the text:
 choose background color as text font
 - hide the field behind another field:
 just move another field on top of it. Fields are staggered by order of
 creation but may be moved by Arrange forward/backward
 - exclude the field from the tab order:
 edit the tab order, exlude it or move it to a late tab order
 (recommended as additional step)
 FMP3 offers a new command "Set Field" that works both on visible and
 excluded fields. Set Field also works on fields in the header or footer
 of a list layout, while those fields are not editable otherwise.
 Warning: Set Field may only enter data of the proper type, such as a
 real date to a date field. If you want to find e.g. the records within
 the last thirty days, by a find string including a ">" symbol, you have
 to use a paste command instead, such as
   Paste Result["> "&Status(CurrentDate)-30]
   
4.9   Sorted lists
 
 FMP3 offers pop up lists based on two fields. In general they get
 alphabetized by their second field. If you don't want this behavior,
 turn off indexing for the second field or, if you have to have it
 indexed, make an unindexed calculation field to show the value. (from
 Stefan Schutt <stefan@[EMAIL PROTECTED]
>)

------------------------------
 
Subject: 5  Repeating Fields
   
5.1   Convert repeating fields to non repeating fields
 
 * Im****t all data in a clone of the database, splitting repeating fields
 to single records.
 If repeating fields don't seem to split properly, check that they are
 real repeated fields. Contents that are separated by <returns> may look
 like separate repetitions, but are in fact within the same field.
 (by Steve Rothman <steve_rothman@[EMAIL PROTECTED]
>)
 * Create a script to copy from repeating field entries to separate
 fields.
 * Create the single fields as calculation fields from the repeating
 fields, change the format from calculation to the format desired.
 <gopher://spinaltap.micro.umn.edu/00/computer/Claris/FileMaker/Splitting
 the Contents of a Repeating Field into Separate Fields>
   
5.2   Convert nonrepeating fields to repeating field
 
 Create a script:
 <gopher://spinaltap.micro.umn.edu/00/computer/Claris/FileMaker/Moving
 Data to Repeating Fields Using a Script>
 * Ex****t as text, convert record delimiter to repeating field delimiter
 (ASCII-29) and reim****t.
 The fields of comma-separated text will be stored in a way like:
 repeatingfield 1<ASCII-29> 2<ASCII-29>3
 To move separate fields A, B, C to a single repeating field,
 - ex****t as text: A, B, C
 - use a standard text editor or a conversion utility to replace the
 comma with <ASCII-29>
 - reim****t to a repeating field
 This works with merge format and tab separated text as well.
 * Use commercial software (MakeRepeats)
   
5.2.1  How to create ASCII-29
 
 The character ASCII-29 is not on the keyboard and is invisible most
 often. However, some editors will display it, e.g. as a small box.
 Editors like MS Word or Alpha allow for input of decimal code to create
 this character.
 The easiest solution is to open any ex****ted database with a suitable
 editor, copy the ASCII-29 character and paste it where necessary. For
 reusage it's appropriate to put it in the scrapbook.
 The very easiest solution is to select this "" - if you are lucky, it's
 still there.
   
5.3   Merge separate records to a single repeating field
 
 * Create a script to copy from several records to a repeating field.
 * Ex****t as text, convert delimiter to ASCII-29, reim****t
 The procedure is similar to merging separate fields, but requires some
 additional effort.
 Example:
 Consider a database with the records spearated by Carriage Return <CR>,
 ex****ted as comma delimited, with fields: Name, Text
 "A","1"<CR>
 "B","1"<CR>
 "A","2"
 It should be merged to a database
 "A","1"<ASCII-29>"2"<CR>
 "B","1"
 This can be done by sorting the records and replacing the <CR> with
 <ASCII-29>. To separate between the records A and B some additional
 criterion is required.
 Unfortunately FMPro doesn't allow the comparison of a record with the
 previous one. So one chance is to make this comparison externally, e.g.
 via a spreadsheet application.
 Another solution is:
 create the fields:
 serial number SN (number): Auto-enter serial number
 serial number lookup SNL(number): Copy SN if Name matches
 mark record MR (calculation): If( SN = SNL, Name, "")
 The sorted database now looks like this: fields:
 Name, Number, SN, SNL, MR
 "A","1",1,1,"A"<CR>
 "A","2",3,1,<CR>
 "B","1",2,2,"B"
 Ex****t the fields MR and Number, replace <CR>," with <ASCII-29>" and
 im****t. Further more you can find all non-blank MR, sort them similar
 and im****t all other fields.
 For further improvements think about "replace all with new serial
 number", "relookup" and "sort, im****t to clone".
   
5.4   Removing duplicates or Sychronizing databases
 
 First, you should make sure what a duplicate is.
 FMP2.1 may treat "firstname lastname" and "lastname, firstname" as
 duplicate since both entries contain the same words. Even a later record
 that only contains "lastname" may get recognized as a duplicate of the
 first ones. Check the sections for indexing to understand why.
 FMP3 introduced another type of relation that is based on lines (total
 max. 60 characters) instead of words (multiple, up to 20 characters
 each). A find for duplicates is still based on the indexed words.
 In order to remove duplicates, you have to identify them as a duplicate.
 You can do so on a single field that should be unique (such as the
 Social Security Number), a combination of multiple or all fields (e.g.
 FirstName & LastName) or a combination of all (e.g. LastName &
 Left(FirstName, 3) & Length(comments))
 This is a "duplicate key" suitable for comparisons. You then may
 identify all records by a find for "!", a lookup or a FMP3 relation. A
 further step may be the comparison whether the other fields are really
 identical, e.g. by comparing all fields by calculation or script.
 Here is a simple example to mark every record that has a matching
 duplicate record with the value "1".
 * use a key field "serial number" (number):
   auto-enter serial number
 This field holds a unique identifier for every record
 * define a lookup field "unique lookup" (lookup, number):
    if "duplicate key" fields are equal, then copy the serial number
 This will copy the serial number of the matching record. If there is an
 already existing record, it will get another serial number than the own
 one. Due to the indexing mechanism it will return for newly created, not
 yet matching entries a zero value (nothing, 0 or a dummy value when
 defined so).
 * define a calculation field "unique calculation" (calculation, number)
 =
   if(serial number = unique lookup, 0, 1)
 Thus every record gets flagged by a number or any other specified text
 that there is another, duplicate record. You may use this flag to find
 and remove duplicates or to display a warning. Original and duplicate
 may be within the same or different files.
 Lookups only show proper values at the point of creation. They get
 updated if the actual record is modified or a relookup is performed, but
 not if the first, original record is removed. For FMP3 one may use
 relations instead.
   
5.4.1  Removing duplicates - another approach
 
 Here's a more detailed description by Jason Hirschhorn
 <jason@[EMAIL PROTECTED]
> that uses the "!" as find duplicate command
 instead.
 =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
 FileMaker Pro 2.x
 Removing duplicate information from a database is frequently necessary,
 especially after updating a central database from another database. Here
 is a method to remove duplicate records from a FileMaker Pro 2.0 file
 that takes advantage of the new ScriptMaker features of FileMaker Pro
 2.0.
 Before you begin, save a copy of your database as a backup and make a
 clone as a working copy of the database. Fill the working copy with
 several duplicate records. Read the User's Guide and, using the working
 copy, practice making scripts until you understand and are comfortable
 with using ScriptMaker. You will also need a field with a unique value
 that will uniquely identify an individual or item and its duplicates but
 will not find non-duplicate records. Some examples of this are:
 * a field with a social security number (unique to an individual and
 will find all duplicate records of the person)
 * a field with a unique code number (unique to an item and that will
 find all duplicates of a part, customer or other item number; do not use
 record number as this is a changing value)
 * a field that combines the contents of several fields to create a
 unique value. (this unique value must identify duplicate records without
 finding any other records.
 A word about the unique field If you do not have a field that already
 contains a value unique to the individual person, company, or item, you
 will have to create one. For
 example, if you have an address book database you would not want to
 remove all the people that share the last name "Jones," just duplicates
 of each individual. And, if the database contains the fields FirstName,
 LastName, Address, City, State, Zip, and PhoneNumber, you can create a
 calculation field that concatenates (combines) two or more of these
 fields to create a unique field. You can call your new unique field
 DuplicateCalc:
   DuplicateCalc (calculation, text result) = FirstName & LastName & Zip
 The result will be a single text string that looks this:
 FirstNameLastNameZip. Some examples might look like this:
 JohnSmith10825               MadelineKwan60610
 PierreMyers33976
 This approach works well for most databases, but it's still possible to
 have more than one "John Smith" in the same zip code. In this case you
 may want to add another field, such as a phone number, to be sure that
 this DuplicateCalc field will always be unique und
 er any circumstance. Just make sure the maximum length of the unique
 field is less than 20
 characters; FileMaker Pro 2.x does not index any single text string
 beyond that limit.
 This limit of 20 characters is for every single word. You may use
 multiple words, but both "word1 word2" and "word2 word1" get indexed the
 same, and "word1" alone may relate to both. FileMaker Pro 3.0 takes
 instead a line of 60 characters as index for relations and lookups.
 Setting up the scripts
 Now that you have a field you can depend on to match duplicate records,
 you are ready to set up the scripts that will delete duplicates. In your
 working copy of the database create a new layout (call it "Find
 Duplicates") that will show only the unique field and the fields used to
 define it.
 Advantages & Disadvantages
 The advantage of this process is that it automates the task of removing
 duplicates by using the scripting capability of FileMaker Pro. The
 drawback is that it slows down as the database increases in size and the
 first occurrence of a record is retained and all others are deleted, not
 necessarily the one with the latest entered information. Duplicate
 records
 with spelling errors will NOT be found using this method.
 Creating the scripts
 The scripts must be created from the last to the first. The script that
 finds and deletes the duplicates must be created before the cleanup
 script. If you must edit the scripts after creating them do not replace
 the "Find Requests" or repeat step 1 before editing the script.
 1. Choose Find from the Select menu, and type an exclamation point (!)
 into the "DuplicateCalc" field created above, and click Find. Review the
 records to confirm that only duplicates have been found. To fully review
 the records go to a layout that shows all the information in each
 record. Be sure to return to the "Find Duplicates" layout before
 continuing.
 2. Open ScriptMaker from the Scripts menu and create a new script called
 "Delete Loop". This script should have the following steps:
 Perform Find [Restore]
 Go to Next Record/Request [Exit script after last]
 Go to Next Record/Request [Exit script after last]
 Go to Record/Request [No dialog, 1]
 Copy [Select, "DuplicateCalc"]
 Enter Find Mode [ ]
 Paste [Select, "DuplicateCalc"]
 Perform Find [ ]
 Omit
 Delete Found Set [No dialog]
 Perform Script [Sub-scripts, "Delete Loop"]
 With that script completed, now create the second script Remove
 Duplicates. This script will perform some setup work for the "Delete
 Loop" and do some clean up work afterwards. This script is the one that
 you will select from the Scripts menu to perform the remove duplicate
 process.
 [Note: For FMP3 you may use the newer loop functions instead]
 3. Open ScriptMaker from the Scripts menu and create a new script called
 "Remove Duplicates". Include this script in the menu. For convenience
 wehave used the name "First Field", which is the first field that shows
 in the Find Duplicates layout, but it cannot be the DuplicateCalc field.
 This script should have the following steps:
 Enter Browse Mode [ ]
 Go to Layout [Find Duplicates]
 New Record/Request
 Go to Field ["First Field"]
 Paste Literal ["ABC123"]
 Duplicate Record/Request
 Perform Script [Sub-scripts, "Delete Loop"]
 Enter Find Mode [ ]
 Go to Field ["First Field"]
 Paste Literal ["ABC123"]
 Perform Find [ ]
 Delete Found Set [No dialog]
 You have now successfully created a set of scripts that will delete all
 the duplicate records in your database. Note: using the value "ABC123"
 will work even if the "First Field" is defined as a number.
 [Note: For FMP3 you do not have to create a dummy duplicate record
 "ABC123" but may check whether 0 records were found]
 Before testing the script, make sure you have a backup copy in case
 something goes wrong, then choose "Remove Duplicates" from the Scripts
 menu. FileMaker will begin identifying and removing duplicate records
 from your file.
 You are now ready to work on the data from the original database.
 1) In your working copy find all records.
 2) Delete all records (use the Delete Found Set option from the Edit
 menu).
 3) Im****t records (it does not matter if you replace or add to an empty
 database) from the original database.
 4) Choose "Remove Duplicates" from the Scripts menu.
 Review the data to confirm that no valuable information has been lost,
 i.e., that the deleted records did not have more information than the
 saved record. If you have lost information do steps 1 through 3 listed
 above and verify that the information was there in the first place. Then
 manually find the duplicate(s) of the full information record and delete
 them manually. You can now choose "Remove Duplicates" from the Scripts
 menu.

------------------------------
 
Subject: 6  Find
   
6.1   Some facts
 
 - If no other option were choosen, a find command on "string" will
 search for all records where an indexed word begins with "string"
 - The last search criterion gets stored. It may be used for a Refind and
 as a search criterion for scripts while using the Restore Find Request
 option of Enter Find Mode or Perform Find. While defining a script, the
 last performed find gets used. Changes can be done by performing a new
 find, open & close the edit script dialog and accept the replacement of
 Find Requests.
 - As indicated above, not more than one restored find is possible per
 script. Additional finds may be used by defining additional scripts and
 calling them from within the first script.
 - The search criterion of a script may be displayed by using the Refind
 command after performing the script.
   
6.2   Perform scripted find
 
 Sounds to be obvious, but the find command will be performed by the
 script command 'Perform Find [...]'.
 Example script to find values matching the content of Field_A:
   Copy [Field_A, select entire content]
   Enter Find Mode [No Pause, Don't restore find request]
   Paste [Field_A, select entire content]
   Perform Find [Don't restore find request]
 The omit command itself is not a selectable script option for FMP2.1.
 However, as usual, there's a workaround:
 - Perform any omit find, e.g. enter find mode, paste "a" to field Name,
 click omit, perform find.
 - Define a script "find omit":
   Enter find mode[restore]
   Cut[select entire contents, "Name"]
 That's all. Whenever you call this subscript, the omit box is already
 checked in find mode.
 For FMP3.0 this was simplified. The Omit script step in Find mode does
 the same as marking the omit checkbox. The Omit script in browse mode
 does, as usual, exclude the current record.
   
6.3   No matching records found
 
 If no matching records were found, a dialog gets displayed: no records
 match this request:
 - "modify find" will return to the find dialog
 - "cancel" will omit the find and select ALL records
 An automated script without dialog in FMP2.1 showed all records while no
 matching record was found. Thus e.g. a delete on a found set is most
 critical.
 For FMP3.0 this was modified. Now while you find no matching records,
 you'll get a less critical set of zero found records. Another option
 instead of "modify find" or "cancel" is "continue" with zero found
 records. Furthermore you may detect easily whether the find command was
 successful, e.g. by
  Set Error Capture [On]
  Perform Find [Restore]
  If ["Status(CurrentError) = 0"]
    Perform Script [Sub-scripts, "WhateverYouWantToDo"]
  Else
    Show Message ["There are no records found!"] ***
  End If
 You may check the ErrorCode itself or check the number of found records
 as well.
 For FMP2.1 a workaround by dummy records is possible:
 Performing an unsuccessful find in a script will not select zero
 matching records but all - that's really annoying for printouts,
 ex****ts, deleting records etc.
 A workaround is to create a dummy record and to add an additional dummy
 search criterion, e.g.:
   Copy [Field_XYZ, select entire content]
   New Record/Request
   Go to Field [Field_1]
   Paste Literal ["dummy"]
   Enter Find Mode [No Pause, Don't restore find request]
   Paste [Field_1, select entire content]
   New Record/Request
   Go to Field [Field_1]
   Paste Literal ["dummy"]
   Perform Find [Don't restore find request]
 This script will find all matching records and the dummy record, or, if
 no matching records were found, the dummy record only.
 To exclude the dummy record (that is the last of all, and all<999999):
   Go to Record/Request [999999, Perform without dialog]
   Delete Record/Request [Perform without dialog]
 Another solution is to detect if only the dummy record was found:
   Go to Record/Request [999999, Perform without dialog]
   Go to Previous Record/Request [Exit script after last]
 This script jumps to the last record, tries to go back to the previous
 one and exits if the last (dummy) record is the one and only. Thus you
 may use a kind of an
   if(dummy is only record found,
     exit/return to main script,
     perform further part of script)
 Tip: A similar structure may be used as conditional script!
 See sections on conditional scripting and dummy entries.
   
6.4   Find on multiple fields
 
 Multiple finds may be performed. Logical AND search may be achieved by
 adding criterions to multiple fields. Logical OR search may be achieved
 by creating new requests. Find details in the next subsection.
 Sometimes a find shall be performed on the occurrence of a criterion IN
 ANY OF several fields.
 A scripted solution is to copy the criterion,
   ...
   Enter Find Mode [No pause, Don't restore find request]
   Paste [Field 1]
   New Record/Request
   Paste [Field 2]
   New Record/Request
   Paste [Field 3] ...
   Perform Find [Don't restore find request]
   ...
 Another solution is to concatenate the fields to a single search field
 SearchField = Field 1 & ", " & Field 2 & ", " & Field 3
 The "," are just for aesthetic purposes. This find is faster to perform
 but will increase the memory usage of the database and slow down
 im****ts.
   
6.5   Find with AND / OR / NOT
 
 In order to use search by multiple criteria according to a logical AND,
 OR and NOT, you may use:
 - multiple words in a single field (equals Word1 AND Word2),
 - multiple fields (equals Field1 AND Field2),
 - multiple requests (equals Field1 OR Field2) and
 - the omit command (kind of NOT Field).
 It's not possible to find Field1 AND (NOT Field2). The logical
 equivalent, according to deMorgans law is NOT ((NOT Field1) OR Field2),
 or speaking in FMPro: enter find mode, paste literal to Field1, mark
 omit, create new request, paste literal to Field2, perform find, find
 omitted.
 But the omit works different than a real NOT! It will omit those records
 from a found set that match your omit request. Thus (Field1 OR (omit
 Field2) is different to ((omit Field2) OR Field1)
 Example:
 OMIT B, FIND A will find all that are not B, plus all that are A
 FIND A, OMIT B will find all A, THEN omit from the found set all that
 are not B
 Example (X is match, (x) is after omitting):
   [data]   OMIT B + FIND A = found |  FIND A + OMIT B = found
    A  B      -        X        X   |    X        -
    A NB     (x)       X        X   |    X                 X
   NA  B      -                     |
   NA NB     (x)                X   |
 While AND and OR are independent on the sequence, OMIT is not the same
 as a logical NOT, but instead dependent on the sequence of requests.
   
6.6   Find on a subset
 
 Assuming that the subset was created by a previous find, the manual
 solution is not to select the Find command (cmd-F) but the Refind
 command (cmd-R). You may use AND / OR / NOT and multiple search
 criterions as described above.
 The scripted solution works similar. As a refind you may use the find
 criterions from the last find before creating/editing the script. It is
 accessable by the restore request option. For multiple searches see the
 sections above.
 Sometimes the subset was created manually, or it is not possible to
 perform the desired find by multiple searches in a single step. The
 solution is to use a mark field: (unmark all, perform find,) mark found
 set, perform next find on mark and new criterion.

------------------------------
 
Subject: 7  Scripting
   
7.1   ScriptMaker
 
 Check the manuals, chapter 5, "Using ScriptMaker and Buttons". It's
 rather basic, but there's not much more behind.
 Unfortunately, you can't edit scripts manually, you can't copy/paste
 script steps and you can't copy scripts between databases. You may
 duplicate scripts and databases.
   
7.1.1  What's that restore option? - Find & sort within a script
 
 That's one of the options not so obvious. When you create a script, FMP
 will keep the options of your previous commands as options. This is
 valid for: Find, Sort, Page Setup (printing), Im****t and Ex****t.
 When you create a find script step and use the restore option, the
 criterions of the last used find commands get used.
 You may view these criterions when you perform a refind command. You
 also may print the script definitions.
 You have to ensure that your actual layout displays the fields where
 find criterions will get used!
 If you want to modify the stored information, you will have to perform a
 modified find, edit the script, and after clicking ok you will get a
 dialog box to keep or replace the information. Click the check box to
 replace Find Requests. Now the new information gets saved.
 By and large this is all the same for the other restore options.
 As you might imagine: there is only one valid restore option for each
 type of script command within a script. Nevertheless, you may use
 multiple finds easily:
 Perform first search, create script "Find 1";
 perform other search, create script "Find multiple";
 additional to the find criterions in "Find multiple" you may perform
 additional find requests within by calling the sub script "Find 1".
   
7.1.2  Special options
 
 - When you use Copy[] without options while no field is selected (e.g.
 Goto Field[]), all fields on the current layout get copied to the
 clipboard. The fields are copied in the creation order, seperated by
 tabs.
 There is no known solution to paste in multiple fields in a single step.
 - Using summary fields in scripts:
 "Remember to use the Refresh command with an Enter Browse Mode step if
 you wish to copy the values from Summary fields. However, copying a
 summary field in a script may not work reliably in all cases. If a
 script specifies a Copy step for a summary field that has not already
 calculated, it will copy a null value. This happens because the script
 progresses before the summary field is given time to calculate. Be sure
 you are using FileMaker Pro 2.1v2 or later as this was fixed in this
 version. "
 (from www.claris.com TechInfo)
   
7.1.3  Documenting scripts
 
 Scripts may be printed, including all parameters and options set.
 See Print2Pict
   
7.1.4  Recursive and Conditional scripts
 
 You may call scripts recursively in order to loop, repeat or do while,
 but you should provide a certain break criterion. This has been a most
 requested feature for FMP 2.1, and FMP 3.0 offers both if/else/end if
 and loop/end loop constructs.
 Here are some workarounds for FMP 2.1
 A typical example is:
 Script A:
   Perform Find[restore]
   -- now you are within the first record of the found set
   Perform Script ["B"]
   -- this is the recursive part
   Do...
   -- do some final processing
 Script B:
   Copy [field 1]
   Paste [field 2]
   ...
   Go to Next Record [exit on last]
   Perform Script ["B"]
 This option [exit on last] is a powerful workaround to implement
 conditional scripting. Its concept is:
   if this is the Last/First record
   then exit
   else process
 The simple exit is equivalent to a "do nothing" and is sufficient for
 many tasks. In order to implement real if/then/else scripts you may use
 and manipulate special search criterions (such as a simple mark field)
 or modify the plain
   if A
   then B
   else C
 to something like
 Script C:
   find A
   mark all
   perform Script B
   find marked
   perform C
 Script B:
   exit on last
   perform B
   unmark all
 As you may see, the mechanism is based on a find and work with certain
 sets of records. In order to use this behavior you have
 - to create a proper search criterion
 - to ensure that a find on this set never fails
 - to do the processing itself
 A proper search criterion may be based on any fixed value, calculation
 or user input.
 You must take care that your search command will return a proper set of
 records. If it fails without dialog, the find command will select ALL
 records, and therefore all records will get processed (fatal if you use
 a Delete Found Set command).
 For that reason it is recommended to use dummy entries. A find will be
 performed on the search criterion OR dummy record and will return at
 least the dummy record. See the section on dummy entries for details.
 See the section "no matching record found" for another example.
 I should mention that recursive and conditional scripts can be done
 within AppleScript or FMP 3.0 much better.
   
7.1.5  Dummy entries
 
 Dummy entries may get used to buffer values and to improve the
 performance of recursive, conditional and find scripts. Most of the time
 they are more or less elegant workarounds for missing features or bugs.
 Personally I use two solutions, dummy records or dummy variables. Both
 may be permanent (static) or variable (dynamic). A third exception is
 that I buffer user inputs by selecting the find mode.
 The dynamic record approach is the safest. A script may contain this:
   Enter Browse Mode
   Go to Layout ["any layout with the field to paste a dummy value to"]
   Create New Record
   Go to Field ["the field to paste a dummy value to"]
   Paste Literal ["dummy"]
   Enter Find Mode [use restore, paste literal or by user]
   Create New Request [use paste literal "dummy" or restored "dummy"]
   Perform Find
 Now you will have all found records plus all found dummies.
 A new dummy record will be the last of all (found and unsorted) records.
 You may delete it since it is of no further use, e.g. by Go to Last,
 delete record, then process and step backwards, or step from the first
 to the next, exit on last, and delete the last within an outer script,
 etc.
 The advantage is that after processing there won't be any dummy records
 left, the data of other records is not touched. The disadvantage is that
 it is slower to create and delete new dummy records every time, and that
 a serial counter will continue with an increased value.
 If you keep the dummy record, you should hide it from the user, since it
 may confuse. As soon as this dummy record gets deleted, the performance
 is endangered. For a permanent dummy record I recommend to use the first
 record as dummy and help, but to protect and hide this record from the
 ordinary user as good as possible: Take it as record one, displaying the
 text "No records found", but omit it when other fields were found.
 For other purposes I insert a dummy value to a special field of an
 existing record. Best suited is a number field, named e.g. as "[mark]".
 Number fields get indexed faster than text fields, but may contain text
 as well. Go again in browse mode to a layout that contains the dummy
 field,...
   Go to Field["[mark]", select all]
   Paste Literal ["999 dummy"]         -- BTW this gets indexed as 999
   Enter Find Mode  [use restore, paste literal or by user]
   Create New Request [use paste literal "999" or restored dummy]
   Perform Find
 You may keep the dummy value, but it is better to delete it, e.g. by a
   Perform Find[restored ">0"]
   Go to Field "[mark]", select all]
   Paste Literal [""]
   Replace
 The drawback is that you may need an additional field, and that the
 actual record where you paste the dummy value will be processed either
 every time or never, dependent on your script, but not dependent on its
 other field contents. I prefer it e.g. when I know that the actual
 record must be within the set of records, or when the processing is only
 time consuming, but does no harm.
   
7.1.6  Go to last record
 
 Go To Record 2147483647 will take you to the last possible record since
 this is the maximum number of records possible in an FM Pro file.
 (From Michael Singer's book)
 Any other number higher than the real maximum number of records will do
 so as well. Personally, I use serial number 99999999.
 When you open the database, you will get not the record you edited last,
 but the first of the records found. Creating a script "go to last" that
 is autoexecuted while opening the database will put you to the last of
 this records. Including a "select all" step may put you to the last new
 record, while otherwise the find and sort order is still maintained.
   
7.1.7  Schedule Scripts
 
 How can I run a script at a specified time?
 This has become one of the most frequently asked questions on the
 MacScripting list. There are several commercial, shareware, and freeware
 utilities that will allow you to do this. Your commercial option is
 Scheduler, which comes with Script Debugger. You can find a demo version
 of it on gaea.
 Your freeware options are Cron 1.0.0 and Cron1.0d16. Cron 1.0.0 is a
 cdev and an application that can launch application and document
 aliases. You rename the aliases to reflect the time that you want them
 to launch. Cron 1.0d16 was written by Chris Johnson of GateKeeper fame.
 You can always find the latest version of Chris' Cron at
 http://gargravarr.cc.utexas.edu/cron/cron.html.
 Your shareware options are Chronograph and CronTab. Chronograph has both
 a 68k and PPC version of the daemon. It also follows the UNIX cron
 format. CronTab is an older collection of AppleScript scripts and
 applets.
 You can also find these cron programs and scripts on gaea as
 Chronograph1.1UR.sea, Cron1.0.0.sit, Cron1.0d16Distribution.sit, and
 CronTab
 Ziff-Davis Publi****ng also has a soluton that is available in the
 ZiffNet forum on CompuServe. It is called T-Minus Ten and is an
 application and an extension. If you have a CompuServe account, you can
 get the file. Due to ZD's copyright restrictions, the file cannot be
 uploaded to any other service.
 (from the AppleScript FAQs)
   
7.2   AppleEvents
 
 Section under construction - please provide information
   
7.2.1  FMP documentation
 
 For information on scripting FMP check the template "FileMaker and Apple
 Events"
 (formerly called "FileMaker Events and Objects")
 Included with FileMaker Pro 2.x in the Apple Events Example folder on
 the Utilities disk. This FileMaker reference database provides
 documentation of every object and event accessible by AppleScript and
 Apple Event-savvy programs. Topics include syntax examples, the
 FileMaker containment hierarchy, keyforms, and event parameters and
 id's. The new version of this database adds new information, examples
 for AppleScript and Frontier, and a matrix of events and objects. The
 update can be found with FileMaker Pro 2.1v2 and later. Also in the
 Apple Events Example folder, see examples of scripts that take data from
 a FileMaker database and create charts in Excel or Resolve.
   
7.2.2  Classes
 
 Those classes are sup****ted by FMP:
 capp: class Application
 cwin: class Window
 cdoc: class Document
 cDB : class Database
 ctbl: class Layout
 ccol: class Field
 crow: class Record
 ccel: class Cell
 cSCP: class Script
 cmen: class Menu Item
 cmnu: class Menu
 Most classes provide read-only properties. Check FMP itself for details,
 using e.g. the open dictionary command of the ScriptEditor.
   
7.2.3  References
 
 Elements of objects may get referenced in multiple ways. Here are some
 (all?) types and some examples
 name: its name
   tell application "FMP"
 absolute: its numeric index
   show window 1
 relative: before/after another element
   copy fields of records before (current record of database 1)
 range: a range of elements
   (syntax?)
 ID: the ID of an object. In general an integer property, but on cells it
 is a list {<record ID>, <cell ID>}
   exists record 10
 test: satisfying a test
   repeat with every record whose cell "searchfield" = FindCriterion
 "show every record whose cell <cellName> is <cellData>" no longer
 accepts FMPro special characters within FMP3. To use those you have to
 use "requests". Unfortunately, use of requests adds several apple events
 to a search.
   
7.2.3.1 References table
 
 This is the hierarchy of FMP objects:
   capp - cwin - cdoc - cDB  - ctbl - ccol - ccel
                                    - crow - ccel
                                    - ccel
                             - cSCP
               - cDB  ...
               - cSCP
        - cdoc - cwin ...
               - cDB  ...
               - cSCP
        - cmnu - cmnu ...
               - cmen
   ref. by         cwin cdoc  cDB ctbl ccol crow ccel cSCP cmen cmnu
   name           |  x |  x |  x |  x |  x |  x |  x |  x |  x |  x |
   absolute       |  x |  x |  x |  x |  x |  x |  x |  x |  x |  x |
   relative       |    |    |    |  x |  x |  x |  x |  x |    |    |
   range          |    |    |    |  x |  x |  x |  x |  x |    |    |
   ID             |    |    |    |  x |  x |  x |  x |  x |    |    |
   test           |    |    |    |  x |  x |  x |  x |  x |    |    |
   
7.2.4  List of events
 
 open / print / quit / run Copy / Cut / Paste Begin Transaction / End
 Transaction / Event Info / Save -- Usage? Class info / Close / Count /
 Create / Data Size / Delete / Do Menu / Do Script / Duplicate / Exists /
 Get Data / Open / Redo / Set Data / Show / Sort / Undo
 ??? What's the difference between open / print / quit (required suite)
 and Open / Print / Quit (FMP Core, Table, Database suite)
 ??? What's the difference between Set and Set Data?
 ??? What's the difference between Get, Get Data and no event at all?
 - most im****tant events:
 * Set
   set cell "Name" of layout 0 to "Martin"
 * Get <reference>
   set MyName to [get] cell "Name" of layout 0
   
7.2.5  Sending events
 
 In the FileMaker you just create a new script in ScriptMaker, and
 - add command "Send AppleEvent [...]"
 - push button "Specify..."
 - push button "Specify Application" and select your applet.
 - choose from popup menu "Other..."
 - input: Event Class: "PIPS" and Event ID: "pip2"
 If you don't use any parameters, that's all. If you do, you must either
 1) put value of your parameter in the AppleEvent definition dialog
 (select "Script text" radio button), or
 2) put it in one of FileMaker Fields (select "Field value" radio button
 and show the field you want to use).
 The AppleScript looks like this:
 on «event PIPSpip2» (howmany)
   beep howmany
 end «event PIPSpip2»
 (by Ilmo Kotivuori <ilmo.kotivuori@[EMAIL PROTECTED]
>)
 The simple events sent from FMP can only send a single parameter (in the
 keyDirectObject parameter, '----'). You need to build up more complex
 data structures for most events from and to FMP, so you'll have to use
 e.g. an AppleScript as an intermediary.
 (by Wayne Walrath <wkw@[EMAIL PROTECTED]
>)
   
7.3   AppleScript
 
 Section under construction - please provide information
   
7.3.1  System requirements
 
 System 7.1 or better
 AppleScript 1.0 or better (actual 1.1.1?)
 Editor:
 ScriptEditor (System 7.5) or
 ScriptDebugger (URL:?) or
 ScriptWizard or
 Scripter
   
7.3.2  General documentation
 
 ??? please check and provide information
 FAQs:
 http://www.sysnet.com/~pfterry/applescript.faq.html
   
7.3.2.1 Books
 
 See http://www.claris.com/techinfo/CAMON9220228814.html
for a
 comprehensive list.
 Derrick Schneider: "The Tao of AppleScript (second edition)", Hayden
 Books, Carmel, 1994.
 Price $24.95 (U.S.); $31.95
 Danny Goodman: "Danny Goodman's AppleScript Handbook", Random House
 Electronic Publi****ng, 1995.
 Price $39.00 (U.S.); $55.00 (Canada.)
 Tom Trinko: "Applied Mac Scripting", M&T Books, 1995.
 Over 800 pages, Price $34.95 (U.S.); $47.00 (Canada.)
 Dave Mark: "Ultimate Mac Programming: Methods of the Macintosh Masters",
 IDG Books Worldwide, 1995.
 Price $39.95 (U.S.); $54.95 (Canada.)
 "AppleScript Language Guide: English Dialect", Addison-Wesley, 1994.
 Price $29.95 (U.S.). ISBN 0-201-40735-3
 same documentation as found in the AppleScript Developer's Kit from
 Apple Computer
 "AppleScript Finder Guide", Addison-Wesley, ISBN 0-201-40910-0
 Steve Michel: "Scripting the Scriptable Finder", Heizer Software, 1995.
 Price $49.00 (U.S.)
 Heizer Software at (800) 888-7667 or (510) 943-7667.
 Claris Corp.: "TechInfo Journal", Claris Sup****t Service.
 quarterly; call Claris Customer Assistance at (800) 325-2747.
 The Cobb Group: "Inside FileMaker Pro"
 Monthly, Price $59.00/yr or $7.00 each (U.S.). ISSN 1068-6908.
 "INSIDE MACINTOSH: Interapplication Communication", Addison Wesley
 Publi****ng Company, Menlo Park, California.
 Price: $36.95.
 "Inside Macintosh - AppleScript", ?
   
7.3.2.2 Online documentation
 
 Web & FTP:
 Scripts, scripting additions, demos, and other scripting-related files
 can be found at the following ftp site:
 <ftp://gaea.kgs.ukans.edu/applescript>
 <ftp://gaea.scriptweb.com>
 <http://www.scriptweb.com/scriptweb>
 <ftp://gaea.scriptweb.com/pub>
 <ftp://gaea.scriptweb.com/pub/applescript/00applescript.faq>
 <http://rever.nmsu.edu/~elharo/faq/Macintosh.html>
 <http://www.ultranet.com/~mfenner/applescript.html>
 <http://mmm.dartmouth.edu/pages/macscripting/macscripting-home.html>
 Internet:
 The MACSCRPT mailing list is a highly active forum devoted to scripting
 on the Macintosh and focuses on AppleScript and UserLand Frontier. To
 subscribe to the Macintosh Scripting mailing list send a message using
 one of the following methods:
 - To subscribe to the MACSCRPT list,
 Send message to: LISTSERV@[EMAIL PROTECTED]
 Subject: subscribe
 Message: subscribe macscrpt
 APPLESCRIPT Mailing Lists:
 Purpose: For discussion of AppleScript.
   applescript-implementors@[EMAIL PROTECTED]
    is for users creating AppleScript savvy applications.
   applescript-users@[EMAIL PROTECTED]
    is for users of AppleScript.
   applescript-language@[EMAIL PROTECTED]
    is a private list for creators of AppleScript language pieces.
   AppleScript-request@[EMAIL PROTECTED]
    is for more information
 AppleLink
 "AppleScript Developer's Forum" in Developer Sup****t: AppleScript Talk
 "FileMaker Sup****t Forum" in Third Parties:Third Parties
 A-G:Claris:Claris InfoCenter:Technical Sup****t - (Read):Technical
 Sup****t - FileMaker
 "UserLand Forum" in Third Parties: Third Parties P-Z: UserLand
 Discussions
 America Online
 Keyword CLARIS, Technical Sup****t:FileMaker Pro:FileMaker Message
 Boards:Scripting
 Keyword MOS, Message Board:General Discussion:AppleScript
 Keyword USERLAND
 CompuServe
 Go MACCLARIS, Browse Messages, FileMaker [2]
 Go MACDEV, Message Sections:Scripting Month [10]
 Go USERLAND
 eWorld
 Message Sections -Computer Center:Apple Customer Assistance Center:Apple
 Products &
 Technologies:The World of Apple Software:System Software Discussion:
 AppleScript 1.1 folder and
 Apple events folder.
   
7.3.4  Tips
 
 - Fields are like columns, Records like rows of a table. Single elements
 are Cells.
 - All fields are available via layout 0
 - The last record may be used by ID -1, e.g.
 tell record -1 -- (same as 'tell last record')
 - Within FMP3 "Document" refers to the found set, as sorted. "Database"
 refers to the entire database, in record creation order (ignoring the
 found set). This was also supposed to be true in FMPro 2.1v3, but was
 not.
 (from owen@[EMAIL PROTECTED]
 (Russell E. Owen))
 -"create new record" (and create new request) has two bugs for FMP3:
 1) it sometimes creates in the wrong database, specifically:
       tell document <databaseName
           create new record
       end tell
 ignores the "tell document" and instead creates the record in the
 top-most database, but:
       create new record at database <databaseName>
 works just fine. Be careful!
 2) One can supply a list of data with the create command (in field
 creation order -- ick), but it uses the current layout or layout 1 (I'm
 not sure which) to set the data. There doesn't seem to be any way to
 force it to use layout 0 (an invisible layout that contains all fields).
 The documented method:
     create new record at layout 0 with data <list-of-data>
 does NOT work. A workaround is:
     set recID to create new record at database <databaseName>
     set record ID recID of database <databaseName> to <list-of-data>
 (see ROFMUtil for a subroutine to create <list-of-data>).
 (from owen@[EMAIL PROTECTED]
 (Russell E. Owen))
   
7.3.5  Examples
 
 Useful examples:
 * data of first cell
   cell 1 of database 1
 * data of first cell of selected records
   cell 1 of document 1
 * data of first cell of current record
   set CurRec to (Current Record of Database 1)
   cell 1 of CurRec
     -- should be equivalent to
   cell 1 of (get Current Record of Database 1)
 *  data of all cells:
   cell 1 of every record
     -- is equivalent to
   field 1
   
7.3.5.1 Load all image files
 
 -- Load all the Image files from a (prompted for) folder into a
 FileMaker
 database.
 -- "PictureLoads" and this file must be in the same location.   (V1.1)
 -- find the image files
 set ImageTypes to {"PICT", "JPEG", "BMPp", "TIFF"}
 set ImagesLocation to (choose file with prompt .
         "One of the Image files to load" of type ImageTypes) as string
 set x to (length of ImagesLocation) - .
         (length of (name of (info for file ImagesLocation)))
 set ImagesFolder to (characters 1 thru x of ImagesLocation) as string
 set ImagesList to list folder ImagesFolder
 -- where the hell are we? (only works in compiled "application" version)
 set DefaultLocation to (path to current application) as string
 set x to (length of DefaultLocation) - .
         (length of (name of (info for file DefaultLocation)))
 set DefaultFolder to (characters 1 thru x of DefaultLocation) as string
 -- fire up FileMaker and JPEGView applications
 set chk to {}
 set PictureName to ""
 tell application "Finder"
         set FileMaker to application file id "FMPR" as string
         set JPEGview to application file id "JVWR" as string
 end tell
 tell application FileMaker
         run
         open file (DefaultFolder & "PictureLoads")
 end tell
 tell application JPEGview
         run
 end tell
 -- walk the list, open file in JPEGview, copy to new FileMaker record
 repeat with ImageName in ImagesList
         --(debug)set PictureName to ImageName
         set ImageLocation to ImagesFolder & ImageName
         set ImageInfo to (info for file ImageLocation)
         set candidate to false
         if not (folder of ImageInfo or alias of ImageInfo) then
                 set ImageType to file type of ImageInfo
                 if ImageTypes contains ImageType then
                         set candidate to true
                         set chk to chk & ImageName & ImageType
                 end if
         end if
         if candidate then
                 tell application "JPEGView"
                         activate
                         open {alias ImageLocation}
                         copy
                         close windows saving no
                 end tell
                 tell application "FileMaker Pro"
                         activate
                         Create New Record
                         --(debug)set PictureName to PictureName & return
 & (ImageName as string)
                         Do Script "PasteImage" -- just does a Paste
 [Select, "PictureField"]
                         copy (ImageName as string) to (Cell "FileName"
 of last Record)
                 end tell
         end if
 end repeat
 -- a little clean up
 tell application "JPEGView"
         quit
 end tell
 -- de nada
 (From Sam Malenfant)
   
7.3.5.2 Idle handler
 
 "When a stay-open applet has an idle handler but doesn't return a sleep
 time, the default is to call it every thirty seconds. Strangely, when
 there is no 'on idle' handler the Applet sucks time all over the place.
 The solution: always include an 'on idle' handler in your stay-open
 Applets but return a very large sleep time."
 (by "Wayne K. Walrath" <wkw@[EMAIL PROTECTED]
>)
 on idle
   return 30000
 end idle
   
7.3.5.3 Object not found / error -1728
 
 Error -1728 is object not found:
 on error -1728
   -- "object not found", which could mean no records match
   -- or the database wasn't found, or a cell wasn't found or...
   -- it's a shame the error message isn't more specific
   if (not exists database <databaseName> then
     error "Database " & <databaseName> & " does not exist"
     else if (not exists cell <readCellName> then
       error "Cell " & <readCellName> & " does not exist"
     else
       -- either one of the search cells does not exist (a hassle to
 test)
       -- or no records match; assume the latter
       set recData to {} end if
 end error
 (example by Russell E Owen <owen@[EMAIL PROTECTED]
>)
   
7.3.5.4 Multiple finds
 
 AppleScript is very powerful to use for nested finds.
 Here's one example on how to find on multiple fields that may be
 configured by the user easily. A similar ScriptMaker approach would
 require any possible set of find combinations, including multiple
 copy/paste of find criterions.
 Within FMP you should create a field with a predefined value list of
 field names, e.g.:
 [search_fields] (text):
 section
 subject
 body
 comments
 Format this field as a checkbox field. Autoenter of values is possible.
 Enter the search criterion to a find field and call the AppleScript.
 Within the AppleScript use the find criterion on all names of the search
 fields by something like
   repeat with TheName in TheSearchFields
     set cell "[mark]"
       of (every record whose cell TheName = TheSearchCriterion)
       to 1
 This will search for an exact match, but others are possible as well as
 multiple and nested AND/OR solutions.
 Unfortunately there seems to be no command for a found set. Thus all
 records have to be marked, then a find on [mark]=1 within FMP has to be
 performed, then the mark field should get deleted again.
   
7.3.6  Call AppleScript
 
 As described before you may send various AppleEvents from within FMP.
 When you compiled the script as application, you may pass events to it:
 on «event xxxxyyyy»
   -- do something
 end
 Another solution is to pass complete scripts to an AppleScript editor.
 You may send e.g. the "run script" event to the ScriptEditor:
   send AppleEvent ["syso", "dsct", "ScriptEditor"]
 and pass the script as text. Example:
 within the ScriptMaker of FMP select "send AppleEvent". Specify the
 application "ScriptEditor". Specify "Send the [Other] event" with event
 class "syso", event ID "dsct". Specify the script text as:
 tell application "Eudora"
 make new message at end of mailbox out
 set field "Subject:" to "text"
 set field "To:" to "your nickname"
 queue
 end tell
 "Effectively you call the Run Script osax (which should be present in
 your Scripting Additions inside your Extensions folder). The trick is to
 "tell" a non scriptable application (such as the Script Editor or any
 other utility with no "aete" resource) to "run script etc..."
 FMP can send simple events with only 1 direct param.
 (inspired by raif@[EMAIL PROTECTED]
 (Raif S. Naffah))
   
7.4   Aretha / Frontier
 
 Yet another scripting system for AppleEvents.
 It's free, it's faster than AppleScript, it's powerful.
 <http://www.hotwired.com/staff/userland/aretha/>
 please provide further information
   
7.5   Other tools
 
 check for:
 - ControlTower
 - HyperCard
 - MacPerl
 - UserTalk
 Ross Brown has written an extension called Menu Events. It allows you to
 control the menus in an application that is System 7 savvy though
 unscriptable. It is archived at
 ftp://gaea.scriptweb.com/applescript/addons/MenuEvents1.1.2.sit
 along with a companion program
 ftp://gaea.scriptweb.com/applescript/addons/MenuGrabber1.1.2.sit
 James Davis (jedavis@[EMAIL PROTECTED]
) has written an AutoType osax that
 lets you simulate keyboard activity from a script. AutoType sends
 keystrokes to the front application. It is archived at
 ftp://gaea.scriptweb.com/applescript/osaxen/AutoType1.0.sit
 (from http://www.sysnet.com/~pfterry/applescript.faq.html)
 Probably the slickest solution is PreFab's Player. PreFab Software's
 Player extension lets you select menu items and click buttons and
 checkboxes in applications. Player has a smaller memory footprint than
 QuicKeys, and it is easier to incor****ate Player into your scripts than
 QuicKeys. Player is available for both Frontier and AppleScript. Prefab
 Software can be reached at 617/628-9555, voicemail; 617/628-9043, fax;
 617/628-9025, inquires and sales; CompuServe: 70214,424; and Internet:
 player@[EMAIL PROTECTED]
 http://www.tiac.net/prefab/
 (from ftp://gaea.scriptweb.com/applescript/PRs/PlayerInfo.sit)
   
7.5.1  Quickeys
 
 Quickeys 3.0
 CE Software, Inc.
 Quickeys 3.0, a macro program for the Macintosh, now allows you to write
 AppleScript commands
 directly in your macros. Quickeys also provides scheduling facilities
 and extensions that allow you to
 mount volumes and choose printers. Suggested retail price as of Sept. 1,
 1994 is $139.00 (U.S.).
 Contact CE Software at (515) 221-1801.
   
7.5.2  KeyQuencer
 
 "We often meet problems that can't be solved within FileMaker. Selecting
 printers, sending faxes with the click of a button, using alerts and
 dialogs, dialing phone numbers etc. We need to go beyond FileMaker.
 Features:
 - small memory footprint (full installation takes up a total of 124k on
 my 68k Mac)
 - modular; remove unused commands to save memory or add capabilities
 with third party extensions (developer's toolkit included)
 - powerful, clean and reliable (has never crashed my Mac and I haven't
 seen an application that doesn't like KeyQuencer)
 - networkable; control a mac remotely over AppleTalk
 - fast; no process overhead as in AppleScript solutions
 - best of all: Apple Events savvy, easy to execute macros from a
 FileMaker script using Send AppleEvent
 One disadvantage is that KeyQuencer isn't recordable, but I still think
 it's easy to use."
 (from Johan Solve <macboden@[EMAIL PROTECTED]
>)
 <ftp://umich-mac/system.extensions/cdev/keyquencer1.21.sit.hqx>
 <ftp:/info-mac/gui/key-quencer-121.hqx>
 <ftp:key-quencher-121.sit>
 Shareware 10 $
 It was developped by Alessandro Levi Montalcini - his next release is
 supposed to be commercial.
 It is also useful to im****t plenty of pictures. It's easy to use in
 order to script special tasks by automating manual tasks.
   
7.5.3  Tools for Windows
 
 While all other tools in general are suited for Macintosh only (as long
 as not stated otherwise), there are some matching tools for Windows:
 Q: Is there under Windows a applescript-similar (comparable) programm ?
 A: Actually there a quite a few of them.  None ****p WITH Windows
 however.  There is a REXX version for Windows, Visual Basic for
 Applications is for controlling sup****ted applications, OLE can do some
 things, but it is mostly document based.  WinBatch is an excellent
 AppleScript-like thing.  It can do ANYTHING you can do in Windows, as
 well as some system-level things.
 (From: Kurt Knippel <MondoMail@[EMAIL PROTECTED]
>)

------------------------------
 
Subject: 8  Miscellaneous Tips
   
8.1   Removing password
 
 Contact Claris. They can do it for you, but it may take some time (> 2
 weeks). They have a form for you to fill out.
 The actual release is rather safe against hackers, but successful cracks
 were re****ted.
   
8.2   Undocumented features
 
 Shortcuts:
 Control-C exits a field (like clicking in the record area)
 Control-[ deletes the current field (like Select All & Delete)
 Control-_ selects within the field to the end of the field text
 (From Sam Malenfant <Sam_Malenfant@[EMAIL PROTECTED]
>)
 In the Define fields dialog, the default button changes to Done (instead
 of Create or Change) if you hit the delete key or erase the name of the
 selected field.
 (re****ted by JoelBowers@[EMAIL PROTECTED]
)
 Shortcuts that work both in ScriptMaker and Sort, Ex****t/Im****t:
 Tab toggles control between the steps and the script
 In the steps, type the first letter to move to a step
 In the steps, use up and down arrow keys to move to next step
 When the step is highlighted, use the spacebar to trigger move step to
 script
 In the script, spacebar triggers the "specify" dialog for the
 highlighted script step
 To move a highlighted step up or down in the script, use command key +
 up/down arrows
 (From Sheila Kliewer)
 Script steps:
 A Copy[] line in a Script without a specific field when not in any field
 produces a tab and repeating-char delimited string of the whole record,
 which can in turn be pasted into a specific field (where for instance it
 might be parsed to get at Field'n' or Field'n'Repetition'm').
 (From Sam Malenfant <Sam_Malenfant@[EMAIL PROTECTED]
>)
 Invisible characters, such as tab or repeating-separator-29 can be
 pasted into a text field and used in calculations with Position() for
 instance to find and replace. With scripting or "default data", a field
 call TAB for instrance, might be useful for parses.
 (From Sam Malenfant <Sam_Malenfant@[EMAIL PROTECTED]
>)
   
8.3   Shortcuts
 
 A new tip for FMP3 for Macintosh:
 When in layout mode you can hold down the control key when selecting a
 layout object. Depending on the object, you will be presented with a
 popup menu of actions that you can take on that layout object. These
 include the text attributes, colors and formatting, setting of a
 ****tal's relations etc..
 Undocumented Shortcuts, most of them collected from FMP2.1 for Macintosh
 release:
 Control-C exits a field (like clicking in the record area)
 Control-[ deletes the current field (like Select All & Delete)
 Control-_ selects within the field to the end of the field text
 (From Sam Malenfant <Sam_Malenfant@[EMAIL PROTECTED]
>)
 In the Define fields dialog, the default button changes to Done (instead
 of Create or Change) if you hit the delete key or erase the name of the
 selected field.
 (re****ted by JoelBowers@[EMAIL PROTECTED]
)
 Escape is even faster...
 Shortcuts that work both in ScriptMaker and Sort, Ex****t/Im****t:
 Tab toggles control between the steps and the script
 In the steps, type the first letter to move to a step
 In the steps, use up and down arrow keys to move to next step
 When the step is highlighted, use the spacebar to trigger move step to
 script
 In the script, spacebar triggers the "specify" dialog for the
 highlighted script step
 To move a highlighted step up or down in the script, use command key +
 up/down arrows
 (From Sheila Kliewer)
 Documented Shortcuts from the Quick Reference:
 c = /command/apple, o = option, s = ****ft
 * Layout Mode:
 Fields:
 Redefine a field on a layout                        o-double click
 Objects:
 Constrain resizing to horizontal or vertical        s-drag a handle
 Duplicate by dragging                               o-drag an object
 Move selected objects by one pixel at a time        Arrow keys
 Release grid while resizing                         c-resize
 Reset default format of an object                   c-click
 Squares object being resized                        o-resize
 Select all objects of same type                     c-o-A
 Parts:
 Drag selected layout part across objects            o-drag
 Reorder selected part                               s-drag
 Reorient part labels                                c-click
 T-square on/off                                     c-T
 Tools:
 Constrain line tool to horizontal or vertical       o-drag
 Constrain oval tool to a circle                     o-drag
 Constrain rectangle tool to a square                o-drag
 * Browse Mode
 Edit:
 Copy                                                c-C
 Copy found set                                      c-o-C
 Delete without confirmation                         c-E
 Delete without confirmation                         c-o-E
 Paste                                               c-V
 Paste without style                                 c-o-V
 Paste from last record                              c-'
 Paste from last record and move to next field       c-s-'
 (German release: use ß instead of ')
 Move:
 Next field                                          Tab
 Previous field                                      s-Tab
 Next Record / Request / Layout                      c-Tab
                                                  or o-Tab
 Previous Record / Request / Layout                  c-s-Tab
                                                  or o-s-Tab
 Text:
 multiple for Align left/right/center/full, Bold, Italics, Underline etc.
 Next point size up                                  c-s->
 Next point size down                                c-s-<
 One point larger