The Missing Credits |
|
xvii | |
Introduction |
|
1 | (14) |
|
Part One: Introduction to FileMaker Pro |
|
|
|
|
15 | (28) |
|
A Very Quick Database Tour |
|
|
15 | (5) |
|
|
16 | (1) |
|
|
16 | (4) |
|
|
20 | (1) |
|
Choosing a Starter Solution |
|
|
20 | (1) |
|
Opening and Closing Database Files |
|
|
21 | (3) |
|
|
22 | (2) |
|
|
24 | (1) |
|
|
24 | (2) |
|
Saving a Copy of Your Database |
|
|
25 | (1) |
|
Adding Records to Your Database |
|
|
26 | (7) |
|
|
27 | (1) |
|
|
27 | (2) |
|
|
29 | (4) |
|
|
33 | (6) |
|
Navigating Record by Record |
|
|
33 | (1) |
|
|
34 | (1) |
|
|
35 | (4) |
|
Same Database, Multiple Windows |
|
|
39 | (4) |
|
Automatically Arranging Windows |
|
|
40 | (1) |
|
|
41 | (2) |
|
Organizing and Editing Records |
|
|
43 | (48) |
|
|
43 | (3) |
|
|
44 | (1) |
|
|
44 | (1) |
|
|
44 | (2) |
|
|
46 | (10) |
|
|
46 | (1) |
|
Constraining and Extending the Found Set |
|
|
47 | (2) |
|
Refining Searches with Find Symbols |
|
|
49 | (4) |
|
Refining a Found Set with Omit Commands |
|
|
53 | (3) |
|
Changing Multiple Records |
|
|
56 | (1) |
|
|
57 | (3) |
|
|
58 | (2) |
|
Editing What's in Your Fields |
|
|
60 | (11) |
|
|
60 | (3) |
|
|
63 | (1) |
|
|
64 | (2) |
|
|
66 | (5) |
|
|
71 | (6) |
|
|
71 | (1) |
|
|
72 | (1) |
|
|
72 | (1) |
|
Detailed Formatting in the Paragraph Box |
|
|
73 | (1) |
|
|
74 | (3) |
|
Beyond Text: Container Fields |
|
|
77 | (6) |
|
|
78 | (1) |
|
|
79 | (1) |
|
|
79 | (2) |
|
|
81 | (2) |
|
|
83 | (4) |
|
Spell Checking in One Pass |
|
|
83 | (2) |
|
Spell Checking as You Type |
|
|
85 | (1) |
|
Managing Spelling Dictionaries |
|
|
85 | (2) |
|
Printing and Preview Mode |
|
|
87 | (4) |
|
|
91 | (36) |
|
|
91 | (3) |
|
Tables: The Foundation of Your Database |
|
|
92 | (1) |
|
Figuring Out What Fields You Need |
|
|
92 | (2) |
|
|
94 | (11) |
|
|
96 | (2) |
|
|
98 | (1) |
|
|
98 | (1) |
|
Reordering the Field List |
|
|
98 | (2) |
|
Printing Field Definitions |
|
|
100 | (1) |
|
|
100 | (5) |
|
|
105 | (18) |
|
|
105 | (6) |
|
|
111 | (2) |
|
|
113 | (4) |
|
|
117 | (2) |
|
|
119 | (4) |
|
|
123 | (4) |
|
|
|
|
127 | (54) |
|
|
128 | (2) |
|
|
128 | (2) |
|
Switching Between Layouts |
|
|
130 | (1) |
|
|
131 | (7) |
|
|
131 | (5) |
|
|
136 | (2) |
|
|
138 | (43) |
|
|
139 | (1) |
|
|
140 | (4) |
|
|
144 | (3) |
|
|
147 | (4) |
|
|
151 | (2) |
|
|
153 | (6) |
|
|
159 | (2) |
|
|
161 | (4) |
|
|
165 | (5) |
|
Adding a Dividing Line Between Layout Parts |
|
|
170 | (1) |
|
|
171 | (1) |
|
|
172 | (7) |
|
|
179 | (2) |
|
|
181 | (38) |
|
|
181 | (3) |
|
|
181 | (1) |
|
|
182 | (1) |
|
|
182 | (1) |
|
Labels or Vertical Labels |
|
|
182 | (1) |
|
|
183 | (1) |
|
|
184 | (1) |
|
Creating a Layout from Scratch |
|
|
184 | (16) |
|
|
184 | (2) |
|
|
186 | (3) |
|
|
189 | (7) |
|
|
196 | (2) |
|
Setting Anchors in List Layouts |
|
|
198 | (2) |
|
Creating Layouts for Reports |
|
|
200 | (19) |
|
Visualize the Result Preview Mode |
|
|
200 | (2) |
|
Creating a Report Layout with an Assistant |
|
|
202 | (4) |
|
|
206 | (1) |
|
Improving the Report Layout |
|
|
207 | (3) |
|
|
210 | (7) |
|
|
217 | (2) |
|
Advanced Layouts and Reports |
|
|
219 | (84) |
|
|
219 | (5) |
|
|
220 | (4) |
|
|
224 | (1) |
|
|
224 | (12) |
|
|
226 | (1) |
|
|
226 | (2) |
|
|
228 | (1) |
|
|
229 | (1) |
|
|
230 | (1) |
|
|
231 | (1) |
|
|
232 | (2) |
|
|
234 | (1) |
|
|
235 | (1) |
|
|
236 | (2) |
|
|
236 | (1) |
|
Select Entire Contents of Field on Entry |
|
|
237 | (1) |
|
|
237 | (1) |
|
Field-level Visual Spell Checking |
|
|
237 | (1) |
|
|
238 | (1) |
|
|
238 | (6) |
|
Conditional Formatting of Fields |
|
|
239 | (2) |
|
Conditional Formatting of Text Objects |
|
|
241 | (1) |
|
|
242 | (1) |
|
|
243 | (1) |
|
Removing Conditional Formatting |
|
|
244 | (1) |
|
Print-related Layout Options |
|
|
244 | (2) |
|
|
244 | (1) |
|
|
244 | (2) |
|
Format the Number/Date/Time/Graphic |
|
|
246 | (12) |
|
|
246 | (4) |
|
|
250 | (3) |
|
|
253 | (1) |
|
|
254 | (1) |
|
|
255 | (3) |
|
|
258 | (11) |
|
Creating Buttons with the Button Tool |
|
|
259 | (1) |
|
Turning an Existing Layout Object into a Button |
|
|
260 | (2) |
|
Making a Button Not a Button |
|
|
262 | (1) |
|
|
263 | (6) |
|
|
269 | (3) |
|
|
270 | (1) |
|
Customizing the Tab Order |
|
|
270 | (1) |
|
Fixing the Tab Order in the People Database |
|
|
271 | (1) |
|
Preserving the Automatic Order |
|
|
272 | (1) |
|
|
272 | (7) |
|
Putting a Web Viewer on a Layout |
|
|
273 | (4) |
|
|
277 | (2) |
|
|
279 | (7) |
|
|
280 | (3) |
|
|
283 | (3) |
|
|
286 | (1) |
|
Reports and Summary Fields |
|
|
286 | (17) |
|
|
287 | (1) |
|
Creating a Summary Report |
|
|
288 | (8) |
|
Other Summary Field Types |
|
|
296 | (7) |
|
Part Three: Multiple Tables and Relationships |
|
|
|
Multiple Tables and Relationships |
|
|
303 | (46) |
|
Relational Databases Explained |
|
|
303 | (2) |
|
|
305 | (18) |
|
|
305 | (4) |
|
|
309 | (3) |
|
The Entity-relationship Diagram |
|
|
312 | (6) |
|
|
318 | (3) |
|
|
321 | (2) |
|
Creating a Relational Database |
|
|
323 | (16) |
|
|
323 | (1) |
|
|
324 | (4) |
|
Defining the Relationships |
|
|
328 | (3) |
|
Cleaning Up the Relationship Graph |
|
|
331 | (6) |
|
Finishing the Field Definitions |
|
|
337 | (2) |
|
|
339 | (10) |
|
One Table Occurrence, One Found Set |
|
|
339 | (1) |
|
|
340 | (1) |
|
Adding or Editing Data with Relationships |
|
|
341 | (1) |
|
|
342 | (7) |
|
Advanced Relationship Techniques |
|
|
349 | (52) |
|
|
349 | (13) |
|
Value Lists Based on Fields |
|
|
350 | (2) |
|
Creating Related Records Through a Portal |
|
|
352 | (6) |
|
Navigating Between Related Records |
|
|
358 | (4) |
|
|
362 | (6) |
|
Understanding Table Occurrences |
|
|
362 | (3) |
|
Relationships with Table Occurrences |
|
|
365 | (3) |
|
Managing Data with Data Tunneling |
|
|
368 | (8) |
|
Understanding Data Tunneling |
|
|
369 | (2) |
|
Understanding Table Occurrence Groups |
|
|
371 | (2) |
|
Managing the Relationships Graph |
|
|
373 | (3) |
|
Building a Data Tunneling Interface |
|
|
376 | (6) |
|
|
376 | (1) |
|
Creating a New Table Occurrence Group |
|
|
376 | (3) |
|
Building a Global Field Layout |
|
|
379 | (3) |
|
|
382 | (4) |
|
Adding a Table Occurrence from Another File |
|
|
382 | (1) |
|
Defining Data Sources Using a Path |
|
|
383 | (3) |
|
|
386 | (5) |
|
|
387 | (3) |
|
|
390 | (1) |
|
|
391 | (10) |
|
Relationships with More than One Criterion |
|
|
391 | (2) |
|
Other Relationship Operators |
|
|
393 | (1) |
|
Creating the Invoice Finder |
|
|
394 | (7) |
|
Part Four: Introduction to Calculations |
|
|
|
Introduction to Calculations |
|
|
401 | (30) |
|
Understanding Calculations |
|
|
401 | (3) |
|
|
402 | (2) |
|
The Structure of a Calculation |
|
|
404 | (13) |
|
|
406 | (1) |
|
|
406 | (2) |
|
|
408 | (4) |
|
|
412 | (4) |
|
|
416 | (1) |
|
Creating a Calculation Field |
|
|
417 | (7) |
|
The Specify Calculation Dialog Box |
|
|
419 | (5) |
|
|
424 | (2) |
|
Validate Data Entry with a Calculation |
|
|
426 | (1) |
|
Replacing Data Using a Calculation |
|
|
427 | (2) |
|
|
429 | (2) |
|
Calculations and Data Types |
|
|
431 | (28) |
|
Number Crunching Calculations |
|
|
431 | (2) |
|
|
431 | (1) |
|
|
432 | (1) |
|
|
432 | (1) |
|
Going Beyond Basic Calculations |
|
|
433 | (3) |
|
|
433 | (1) |
|
Building the Calculation Fields |
|
|
434 | (1) |
|
Constructing the Calculation |
|
|
434 | (2) |
|
Text Parsing Calculations |
|
|
436 | (13) |
|
The Concatenation Operator |
|
|
436 | (2) |
|
|
438 | (1) |
|
|
438 | (7) |
|
Text Formatting Functions |
|
|
445 | (4) |
|
Date and Time Calculations |
|
|
449 | (6) |
|
How FileMaker Looks at Time |
|
|
449 | (1) |
|
Math with Dates and Times |
|
|
450 | (2) |
|
|
452 | (1) |
|
Calculations that Create Dates and Times |
|
|
453 | (2) |
|
|
455 | (2) |
|
Numerical Aggregate Functions |
|
|
456 | (1) |
|
|
456 | (1) |
|
Containers in Calculations |
|
|
457 | (2) |
|
Calculations with Pictures, Sounds, Movies, and Files |
|
|
457 | (1) |
|
Calculations with References |
|
|
457 | (2) |
|
|
459 | (22) |
|
|
459 | (4) |
|
Understanding Boolean Functions |
|
|
460 | (3) |
|
|
463 | (1) |
|
Stored, Unstored, and Global Fields |
|
|
464 | (4) |
|
Stored and Unstored Calculation Fields |
|
|
464 | (4) |
|
Global Calculation Fields |
|
|
468 | (1) |
|
|
468 | (7) |
|
|
468 | (4) |
|
Constructing a Conditional Calculation |
|
|
472 | (3) |
|
The Let Function and Variables |
|
|
475 | (6) |
|
Defining Calculation Variables |
|
|
475 | (2) |
|
|
477 | (2) |
|
|
479 | (2) |
|
|
481 | (12) |
|
|
482 | (5) |
|
Defining a Custom Function |
|
|
482 | (2) |
|
|
484 | (1) |
|
|
484 | (3) |
|
|
487 | (6) |
|
|
488 | (2) |
|
|
490 | (1) |
|
|
490 | (1) |
|
Creating Your Own Plug-ins |
|
|
490 | (3) |
|
|
|
|
493 | (28) |
|
|
493 | (9) |
|
|
494 | (1) |
|
|
494 | (1) |
|
|
495 | (4) |
|
|
499 | (3) |
|
The Importance of the Layout |
|
|
502 | (2) |
|
|
503 | (1) |
|
|
504 | (3) |
|
|
504 | (1) |
|
|
504 | (3) |
|
Opening and Closing Scripts |
|
|
507 | (1) |
|
Understanding ScriptMaker's Windows |
|
|
507 | (2) |
|
|
509 | (3) |
|
|
510 | (2) |
|
|
512 | (1) |
|
Branching and Looping in Scripts |
|
|
512 | (9) |
|
Branching with If, Else If, Else, and End If |
|
|
512 | (5) |
|
Testing Multiple Conditions |
|
|
517 | (1) |
|
|
518 | (3) |
|
|
521 | (44) |
|
|
521 | (1) |
|
|
522 | (13) |
|
|
523 | (1) |
|
|
523 | (1) |
|
|
524 | (1) |
|
|
525 | (3) |
|
|
528 | (3) |
|
Other Steps That Work with Fields |
|
|
531 | (4) |
|
|
535 | (9) |
|
Creating, Duplicating, and Deleting Records |
|
|
535 | (1) |
|
|
536 | (4) |
|
Opening, Reverting, and Committing Records |
|
|
540 | (2) |
|
|
542 | (1) |
|
|
543 | (1) |
|
|
544 | (8) |
|
Performing the User's Find Requests |
|
|
545 | (2) |
|
|
547 | (2) |
|
|
549 | (1) |
|
Constraining and Extending the Found Set |
|
|
550 | (1) |
|
|
550 | (1) |
|
|
551 | (1) |
|
|
551 | (1) |
|
|
552 | (1) |
|
|
553 | (5) |
|
|
553 | (1) |
|
Bringing a Window to the Front |
|
|
554 | (1) |
|
|
554 | (1) |
|
Moving and Resizing Existing Windows |
|
|
554 | (2) |
|
Other Window-related Script Steps |
|
|
556 | (2) |
|
|
558 | (2) |
|
Opening and Closing Files |
|
|
559 | (1) |
|
|
559 | (1) |
|
Other File-Related Script Steps |
|
|
559 | (1) |
|
|
560 | (1) |
|
|
560 | (5) |
|
|
560 | (1) |
|
|
561 | (1) |
|
|
561 | (1) |
|
|
561 | (1) |
|
|
562 | (1) |
|
|
563 | (1) |
|
|
563 | (2) |
|
|
565 | (44) |
|
|
565 | (1) |
|
Asking and Telling the User |
|
|
566 | (5) |
|
|
567 | (1) |
|
|
567 | (1) |
|
Asking a Not-so-simple Question |
|
|
568 | (3) |
|
Organizing Complex Scripts |
|
|
571 | (9) |
|
The Perform Script Script Step |
|
|
572 | (1) |
|
Halt Script and Exit Script |
|
|
573 | (2) |
|
|
575 | (3) |
|
|
578 | (2) |
|
|
580 | (4) |
|
The Set Error Capture Script Step |
|
|
581 | (1) |
|
The Get (LastError) Function |
|
|
582 | (1) |
|
The Allow User Abort Script Step |
|
|
583 | (1) |
|
Putting a Complex Script Together |
|
|
584 | (25) |
|
|
584 | (1) |
|
|
585 | (2) |
|
|
587 | (3) |
|
|
590 | (4) |
|
Adding a Script Parameter to a Perform Script Step |
|
|
594 | (10) |
|
|
604 | (5) |
|
Part Six: Security and Integration |
|
|
|
|
609 | (28) |
|
|
609 | (2) |
|
|
610 | (1) |
|
|
610 | (1) |
|
|
611 | (15) |
|
|
612 | (2) |
|
|
614 | (1) |
|
Data Access and Design Privileges |
|
|
615 | (11) |
|
|
626 | (4) |
|
|
627 | (2) |
|
|
629 | (1) |
|
|
630 | (3) |
|
Creating an Extended Privilege |
|
|
631 | (1) |
|
Checking for an Extended Privilege |
|
|
631 | (1) |
|
Assigning Extended Privileges |
|
|
632 | (1) |
|
|
633 | (4) |
|
Detecting Privileges in a Script |
|
|
633 | (1) |
|
|
634 | (1) |
|
Running Scripts with Full Access Privileges |
|
|
634 | (1) |
|
Managing Security with Scripts |
|
|
634 | (3) |
|
Sharing Data with Other Systems |
|
|
637 | (38) |
|
Sharing Your Data with Others |
|
|
637 | (4) |
|
|
638 | (3) |
|
|
641 | (10) |
|
|
641 | (5) |
|
Connecting FileMaker to a SQL Data Source |
|
|
646 | (1) |
|
Adding SQL Tables to a FileMaker Database |
|
|
647 | (3) |
|
|
650 | (1) |
|
|
651 | (6) |
|
|
657 | (8) |
|
Importing Over Existing Data |
|
|
662 | (2) |
|
Creating Tables on Import |
|
|
664 | (1) |
|
Creating a New Database from an Import File |
|
|
664 | (1) |
|
Converting Older FileMaker Files |
|
|
665 | (1) |
|
|
665 | (7) |
|
|
665 | (1) |
|
|
666 | (1) |
|
|
667 | (2) |
|
|
669 | (2) |
|
|
671 | (1) |
|
Importing and Exporting in a Script |
|
|
672 | (3) |
|
Save Records Script Steps |
|
|
673 | (1) |
|
The Import Records Script Step |
|
|
674 | (1) |
|
The Export Records Script Step |
|
|
674 | (1) |
|
|
675 | (28) |
|
FileMaker Network Sharing |
|
|
676 | (5) |
|
Setting Up a Host Computer |
|
|
676 | (2) |
|
|
678 | (1) |
|
The Open Remote File Dialog Box |
|
|
679 | (2) |
|
Sharing over the Internet |
|
|
681 | (5) |
|
|
681 | (3) |
|
Connecting from a Web Browser |
|
|
684 | (1) |
|
|
685 | (1) |
|
|
686 | (15) |
|
|
687 | (1) |
|
Installing FileMaker Server |
|
|
688 | (5) |
|
Administering FileMaker Server |
|
|
693 | (7) |
|
|
700 | (1) |
|
|
701 | (2) |
|
|
703 | (54) |
|
Copying and Pasting Database Structure |
|
|
704 | (2) |
|
Importing Tables and Fields |
|
|
704 | (1) |
|
Copying and Pasting Tables |
|
|
705 | (1) |
|
Copying and Pasting Fields |
|
|
705 | (1) |
|
Copying Scripts and Script Steps |
|
|
706 | (1) |
|
|
706 | (7) |
|
Controlling Script Execution |
|
|
708 | (2) |
|
|
710 | (1) |
|
|
711 | (1) |
|
|
711 | (1) |
|
|
712 | (1) |
|
Working with the Debugger Window |
|
|
712 | (1) |
|
|
713 | (3) |
|
|
713 | (1) |
|
|
714 | (2) |
|
|
716 | (1) |
|
The Database Design Report |
|
|
717 | (6) |
|
|
717 | (2) |
|
|
719 | (2) |
|
Finding Broken Elements with the DDR |
|
|
721 | (2) |
|
|
723 | (1) |
|
|
724 | (7) |
|
|
725 | (2) |
|
|
727 | (2) |
|
|
729 | (1) |
|
Installing Custom Menu Sets |
|
|
730 | (1) |
|
|
731 | (5) |
|
Using the Developer Utilities |
|
|
732 | (4) |
|
Delivering a Runtime Solution |
|
|
736 | (1) |
|
|
736 | (5) |
|
|
|
|
741 | (8) |
|
Appendix B: FileMaker Error Codes |
|
|
749 | (8) |
Index |
|
757 | |