home *** CD-ROM | disk | FTP | other *** search
/ db.tidbits.com / db.tidbits.com.tar / db.tidbits.com / getbits.acgi?tbart=07587.orig < prev    next >
Text File  |  2010-09-23  |  58KB  |  794 lines

  1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
  2.         "http://www.w3.org/TR/html4/loose.dtd">
  3.  
  4. <html lang="en">
  5. <head>
  6.     <meta http-equiv="content-type" content="text/html;charset=utf-8">
  7.     <meta http-equiv="Content-Language" content="en">
  8.     <title>TidBITS : FileMaker Pro 7: Can You Say Paradigm Shift?</title>
  9.  
  10.     <meta name="title" content="TidBITS : FileMaker Pro 7: Can You Say Paradigm Shift?">
  11.     <meta name="description" content="TidBITS is a free email and Web publication covering the Macintosh Internet community.">
  12.     <link rel="image_src" href="/images/tblogo9.gif" />
  13.     <meta name="keywords" content="Apple, Mac, Macintosh, Mac OS, Mac OS X, newsletter, Internet, analysis, reviews, technology, news, TidBITS, TidBITS Talk, Engst">
  14.     <link rel="Help" href="http://www.tidbits.com/about/about-tidbits.html" title="About TidBITS">
  15.     <link rel="Search" href="http://www.tidbits.com/search/" title="Search All TidBITS Content">
  16.     <link rel="Author" href="http://www.tidbits.com/about/contact-info.html" title="Contact Information">
  17.     <link rel="Contents" href="tb-issues/" title="TidBITS Issue Archive">
  18.     <link rel="alternate" type="application/rss+xml" href="http://db.tidbits.com/feeds/tidbits.rss" title="TidBITS Full Text Feed">
  19.     <link rel="alternate" type="application/rss+xml" href="http://db.tidbits.com/commentfeeds/firehose.xml" title="TidBITS Full Comments Feed">
  20.  
  21.     <link rel="stylesheet" href="/tidbits_2010_001.css" type="text/css">
  22.     <LINK rel="stylesheet" type="text/css" media="print" href="/tb-new-print.css">
  23.     <script src="/javascript/tb.js" type="text/javascript"></script>
  24.     <meta name="viewport" content="width:940">
  25.     <script type='text/javascript' src='http://db.tidbits.com/ads/delivery/spcjs.php?id=2'></script>
  26.     <script src="/javascript/prototype.js" type="text/javascript"></script>
  27. <script src="/javascript/scriptaculous.js" type="text/javascript"></script>
  28. <script src="/js-global/FancyZoom.js" type="text/javascript"></script>
  29. <script src="/js-global/FancyZoomHTML.js" type="text/javascript"></script>
  30. <script type="text/javascript"  src="http://api.recaptcha.net/js/recaptcha_ajax.js"></script>
  31.  
  32. </head>
  33. <body onLoad="setupZoom()">
  34. <!-- popup query -->
  35. <div id="big_ole_background" style="display:none"> </div>
  36. <div id="tipbits_enclosure_preview" style="display:none">
  37. <div class="tearoffbox_wide_container">
  38. <div class="tearoffbox_wide_tips">
  39.  
  40. <div class="tip_display">
  41. <div class="preview">
  42. <h6><span id="p_tips_title"></span></h6>
  43. <p id="p_tips_text"></p>
  44. <p>Visit <a href="javascript:void(0)" id="p_url"><span id="p_label"></span></a></p>
  45. <p class="credit">Submitted by <span id="p_reader"></span></p>
  46. <p><input type="submit" value="Back" name="preview_tip" onClick="preview_box('ts','tipbits_enclosure_preview'); return false;"></p>
  47. </div>
  48. </div>
  49. <div class="tearoffbox_wide_bottom_tips">
  50. </div>
  51.  
  52. </div><!-- end tearoffbox_wide_tips -->
  53. </div><!-- end tearoffbox_wide_container for tips-->
  54. <!-- end tearoff box wide -->
  55. </div><!-- end enclosure -->
  56.  
  57. <div class="popup_box_with_captcha" id="ts" style="display:none">
  58.     <div id="popup_box_thanks" style="display:none" onClick="close_popup_thanks('popup_box_thanks', 'ts')"><br>Thanks for submitting your tip! All submissions are moderated by an editor before appearing online. We've reset the form so you can enter another tip. Or you can close the tip submission box.    <div class="x_close" id="thanks_upper_right"><a href="javascript:void(0)" onmousedown="close_popup_thanks('popup_box_thanks', 'ts'); return true;">Close</a></div></div>
  59.     <div class="tip_box_format">
  60.     <div id="ts_innards" onClick="close_popup_thanks('popup_box_thanks', 'ts')">
  61.         <div class="tip_box_head">TipBITS Submission</div>
  62.         <div class="tip_box_form">        
  63.                 
  64.             <div class="tbf_row" id="ts_message_box" style="display:none">
  65.                 <div class="tbf_wide"><div class="tbf_alert" id="ts_top_message"></div></div>
  66.             </div>
  67.             <div class="spacer"></div>
  68.  
  69.             <form action="foobar.cgi" method="get" name="submit_tip">
  70.  
  71.             <div class="tbf_row"><div class="tbf_wide_extra_top not_bold">Please submit only technical tips that will help other TidBITS readers better use their Macs, iPhones, and related software and hardware. All product announcements should be sent to <a href="mailto:releases@tidbits.com">releases@tidbits.com</a>.</div></div>
  72.             <div class="spacer"></div>
  73.             <div class="tbf_row">
  74.                 <div class="tbf_left">Tip title<span class="required_field">*</span></div><div class="tbf_right"><input type="text" value="" id="tip_title_id" name="tip_title" tabindex="1"></div>
  75.             </div>
  76.             <div class="spacer"></div>
  77.             <div class="tbf_row">
  78.                 <div class="tbf_left">Your tip<span class="required_field">*</span></div><div class="tbf_right"><textarea name="tip_text" rows="3" cols="40" tabindex="2"></textarea></div>
  79.             </div>
  80.             <div class="spacer"></div>
  81.             <div class="tbf_row">
  82.                 <div class="tbf_left">URL</div><div class="tbf_right"><input type="text" value="" name="tip_link_url" tabindex="3"><span class="tip_description"><br>Enter the URL to a Web page that supports your tip.</span></div>
  83.             </div>
  84.             <div class="spacer"></div>
  85.             <div class="tbf_row">
  86.                 <div class="tbf_left">Linked text</div><div class="tbf_right"><input type="text" value="" name="tip_link_label" tabindex="4"><span class="tip_description"><br>Enter the name of the page linked above.</span></div>
  87.             </div>
  88.             <div class="spacer"></div>
  89.             <div class="tbf_row">
  90.                 <div class="tbf_left">Your name<span class="required_field">*</span></div><div class="tbf_right"><input type="text" value="" name="tip_reader_name" tabindex="5"></div>
  91.             </div>
  92.             <div class="spacer"></div>
  93.             <div class="tbf_row">
  94.                 <div class="tbf_left">Your email<span class="required_field">*</span></div><div class="tbf_right"><input type="text" value="" name="tip_reader_email" tabindex="6"></div>
  95.             </div>
  96.             <div class="spacer"></div>
  97.             <div class="spacer"></div>
  98.                 <div class="tbf_wide"><span class="fine_print"><span class="required_field">* indicates required fields</span></span></div>
  99.             <div class="spacer"></div>
  100.             <div class="tbf_row">
  101.                 <div class="tbf_wide_extra_top"><span class="fine_print">To help us avoid automated posts and spam, please enter the words below.</span></div>
  102.             </div>
  103.             <div class="spacer"></div>
  104.             <div class="tbf_row">
  105.                 <div class="tbf_wide"><div id="ts_recaptcha"></div></div>
  106.             </div>
  107.             <div class="spacer"></div>
  108.             <div class="tbf_row">
  109.                 <div class="tbf_wide"><input type="submit" value="Preview Your Tip" name="preview_tip" onClick="fill_preview('tipbits_enclosure_preview', 'ts', this.form); return false;" tabindex="7"> <input type="submit" value="Send Us Your Tip!" name="submit_this_tip" onClick="handle_tip_submission('ts', '', this.form, 'tip'); return false;" tabindex="8"></div>
  110.             </div>
  111.             <div class="spacer"></div>
  112.             <div class="tbf_row">
  113.                 <div class="tbf_wide"><span class="fine_print">When you submit a tip, you give us permission to use it. Read <a href="javascript:void(0)" onClick="generic_show_hide('tip_terms')">our terms</a> for more details. All submissions are reviewed before publication.</span></div>
  114.             </div>
  115.             
  116.             <div class="tbf_row" id="tip_terms" style="display: none">
  117.                 <div class="tbf_wide"><span class="fine_print">Our terms: By submitting a tip, you agree to assign TidBITS Publishing Inc., a non-exclusive, worldwide, perpetual license to reproduce, publish, and distribute your tip in connection with the TidBITS Web site and associated products in any media. You agree that you created the content you submitted, and that you have the right to assign us this license. You give us permission to use your name, but your email address won't be publicly displayed or shared. We review all submissions before publication, and reserve the right to select which submissions we feel are appropriate for our readers and to edit those we publish.</span></div>
  118.             </div>
  119.             <div class="spacer"></div>
  120.             </form>
  121.         </div><!-- end tip_box_form -->
  122.     </div><!-- end tip box innards -->
  123.     </div><!-- end tip box format -->
  124.     
  125.     <div class="x_close" id="ts_upper_right"><a href="javascript:void(0)" onmousedown="HidePopupContent('ts', 'ts', ''); return true;">Close</a></div>
  126.     
  127. </div><!-- end tip_submit box-->
  128.  
  129. <div class="popup_box_with_captcha" id="article_reference" style="display:none"><div class="article_ref_format"><textarea style="width:350px; height:100px;" name="article_ref" id="article_ref_box"></textarea></div>    <div class="x_close" id="article_reference_upper_right"><a href="javascript:void(0)" onmousedown="HidePopupContent('article_reference', 'article_reference', ''); return true;">Close</a></div>
  130. </div>
  131.  
  132. <div class="popup_box_with_captcha" id="comm" style="display:none">
  133.     <div class="tip_box_format">
  134.     <div id="comment_thanks" style="display:none" onClick="close_popup_thanks('comment_thanks', 'comm')"><br>Thanks for submitting a comment! Please check your email for a link that, when clicked, will verify that you're a real person and cause your comment to appear immediately. <div class="x_close" id="comment_upper_right"><a href="javascript:void(0)" onmousedown="close_popup_thanks('comment_thanks', 'comm'); return true;">Close</a></div></div>
  135.     <div id="comm_innards" onClick="close_popup_thanks('comment_thanks', 'comm')">
  136.         <div class="tip_box_head" id="comm_headline">Post a Comment</div>
  137.         <div class="tip_box_form">        
  138.                 
  139.             <div class="tbf_row" id="comm_message_box" style="display:none">
  140.                 <div class="tbf_wide"><div class="tbf_alert" id="comm_top_message"></div></div>
  141.             </div>
  142.             <div class="spacer"></div>
  143.  
  144.             <form action="foobar.cgi" method="get" name="post_comment" id="post_comment">
  145.             <input type="hidden" name="comment_nest" value=''>
  146.             <input type="hidden" name="comment_id" value=''>
  147.             <input type="hidden" name="article_id" value='6198'>
  148.             <input type="hidden" name="edit" value=''>
  149.             <div class="tbf_row">
  150.                 <div class="tbf_left">In reply to</div>
  151.                 <div class="tbf_right">
  152.                     <div id="cb_quoted_row">
  153.                         <div class='cb_open_quote'>“</div>
  154.                         <div id="cb_quoted"></div>
  155.                         <div class='cb_close_quote'>”</div>
  156.                     </div>
  157.                     <div class="spacer"></div>
  158.                 </div>
  159.             </div>
  160.             <div class="spacer"></div>
  161.  
  162.             <div class="tbf_row">
  163.                 <div class="tbf_left" style="padding-top:0">Your comment</div>
  164.                 <div class="tbf_right"><textarea tabindex="1" name="cb_item_add" id="cb_item_add" rows="4" cols="50" onKeyDown="count_insert('cb_item_add','cb_char_count')"></textarea><br><div class="cb_char_count" id="cb_add_count">Remaining characters: <span id="cb_char_count">0</span></div></div>
  165.             </div>
  166.             <div class="spacer"></div>            
  167.  
  168.             <div class="tbf_row">
  169.                 <div class="tbf_left">Your name</div><div class="tbf_right" style="margin-top:8px"><input tabindex="2" type="text" value="" name="cb_add_name" id="cb_add_name" style="margin-top: -4px"></div>
  170.             </div>
  171.             <div class="spacer"></div>
  172.             
  173.             <div class="tbf_row">
  174.                 <div class="tbf_left">Your email</div><div class="tbf_right"><input tabindex="3" type="text" name="cb_add_email" id="cb_add_email"></div>
  175.             </div>
  176.             <div class="spacer"></div>
  177.             
  178.             <div class="tbf_row">
  179.                 <div class="tbf_left"> </div><div class="tbf_right"><input id="comm_post_comment" tabindex="4" type="submit" value="Post Comment" name="submit_this_comment" style="width:100px; float:right" onClick="cb_post_submit(); return false;"></div>
  180.             </div>
  181.             <div class="spacer"></div>
  182.             
  183.             <div class="tbf_row" id="comment_terms">
  184.                 <div class="tbf_wide"><span class="fine_print">Our terms: We reserve the right to edit or delete any comment, so please post thoughtfully. We use your email address <i>only</i> to send you a one-time verification message confirming that you posted this comment. We also store your address to allow you to verify using other Web browsers in the future. For more info, see our <a href="http://db.tidbits.com/privacy.html">privacy policy</a>.</span></div>
  185.             </div>
  186.             <div class="spacer"></div>
  187.  
  188.             </form>
  189.         </div><!-- end comm_form -->
  190.     </div><!-- end comm box innards -->
  191.     </div><!-- end comm box format -->
  192.     
  193.     <div class="x_close" id="comm_upper_right"><a href="javascript:void(0)" onmousedown="HidePopupContent('comm', 'comm', ''); return true;">Close</a></div>
  194.     
  195. </div><!-- end comm_submit box-->
  196.  
  197.  
  198. <!-- start mainbody -->
  199. <div id="mainbody">
  200.  
  201. <!-- start header -->
  202. <div id="header">
  203.  
  204.  
  205.  
  206.     <div id="tblogo">
  207.     <a href="/"><img src="/images/tblogo20_01.gif" alt="TidBITS: Apple News for the Rest of Us" width="177" height="84" border="0"></a>
  208.  
  209.     </div><!-- end tblogo -->
  210.  
  211.  
  212. <!-- leaderboard ad -->
  213. <div id="top_banner">
  214. <script type='text/javascript'><!--// <![CDATA[
  215.     OA_show(3);
  216. // ]]> --></script><noscript><a target='_blank' href='http://db.tidbits.com/ads/delivery/ck.php?n=TBe5f7021'><img border='0' alt='' src='http://db.tidbits.com/ads/delivery/avw.php?zoneid=3&n=TBe5f7021'></a></noscript>
  217. </div><!-- end top_banner style -->
  218. <!-- end leaderboard ad -->
  219.  
  220.  
  221. </div><!-- end header  -->
  222.  
  223.  
  224. <!-- start content_container -->
  225. <div id="content_container">
  226.  
  227.  
  228. <!-- begin leftcolumn -->
  229. <div id="leftcolumn">
  230.  
  231. <!-- begin leftnav /left navigation -->
  232. <div>
  233.     <ul class="leftnav">
  234.         <!-- start search -->
  235.         <li class="topcorner">
  236.             <form action="http://db.tidbits.com" method="POST" name="search_form"><input type="hidden" name="advanced_search" value=''><input type="text" name="search_text" size="8" maxlength="70" value="Search" onFocus="this.value=''" onBlur="if (this.value == '') { this.value = 'Search'; }"> <span style="margin: 0 5px 0 5px; vertical-align: -2px"><span style="vertical-align: -2px"><input type="image" name="submit_search" src="/images/go_search_button.gif"></span>  <img src="/images/adv_search_button.gif" title="Click for Advanced Search" onClick="var f = document.search_form; f.search_text.value =''; f.advanced_search.value = '1'; f.submit();"></span></form>
  237.         </li>
  238.     </ul>
  239. </div>
  240. <!-- end search -->
  241.  
  242. <!-- Get TidBITS box (temp) -->
  243. <div>
  244.     <ul class="leftnav">
  245.         <li class="gettb"><strong>Get TidBITS via...</strong></li>
  246.     
  247.         <li><a href="http://www.tidbits.com/list" title="Subscribe via email" class="gettb">Email <img src="/images/gettb_button_email.gif" width="12" height="12" border="0" class="nav_img" alt="Email subscription options"></a></li>
  248.         <li><a href="/feeds/tidbits.rss" title="Subscribe via RSS" class="gettb">RSS <img src="/images/feed-icon-12x12.gif" width="12" height="12" border="0" class="nav_img" alt="Subscribe via RSS"></a></li>
  249.         <li><a href="http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewPodcast?id=276986548" title="Subscribe to the podcast" class="gettb">Podcast <img src="/images/feed-icon-12x12_podcast.gif" width="12" height="12" border="0" class="nav_img" alt="Subscribe to the postcast"></a></li>
  250.         <li><a href="http://www.twitter.com/TidBITS" title="Get Article Updates via Twitter" class="gettb">Twitter <img src="/images/feed_icon_12x12_twitter.png" width="12" height="12" border="0" class="nav_img" alt="Get Article Updates via Twitter"></a></li>
  251.         <li><a href="http://www.facebook.com/pages/TidBITS/195314925519" title="Go to the TidBITS Page at Facebook" class="gettb">Facebook <img src="/images/feed_icon_12x12_facebook.gif" width="12" height="12" border="0" class="nav_img" alt="Go to the TidBITS Page at Facebook"></a></li>
  252.     </ul>
  253. </div>
  254. <!-- end Get TidBITS box -->
  255.     
  256.     <ul class="leftnav">
  257.         <li><a href="/" class="tabhead">TidBITS Home</a></li>
  258.  
  259.         <li><a href="javascript:void(0)" title="Sections" class="tabhead" onClick="return showhide('articleslist')">Sections <span id="articleslist_triangle"><img src="/images/nav_triangle_open.gif" width="9" height="9" border="0" class="navtriangle" id="articleslist_tri_image" alt="Click to show or hide the contents of this section."></span></a></li>
  260.     
  261.     
  262.     </ul>
  263.  
  264. <div id="articleslist" style="display: none"><ul class="leftnav"><li><a href="/section/business" >Business Apps</a></li>
  265. <li><a href="/section/entertainment" >Entertainment</a></li>
  266. <li><a href="/section/links" >External Links</a></li>
  267. <li><a href="/section/home" >Home Macs</a></li>
  268. <li><a href="/section/inside" >Inside TidBITS</a></li>
  269. <li><a href="/section/iphone-ipad-ipod" >iPhone iPad iPod</a></li>
  270. <li><a href="/section/fun" >Just for Fun</a></li>
  271. <li><a href="/section/macs" >Macs & Mac OS X</a></li>
  272. <li><a href="/section/creative" >Media Creation</a></li>
  273. <li><a href="/section/net" >Networking</a></li>
  274. <li><a href="/section/opinion" >Opinion</a></li>
  275. <li><a href="/section/support" >Problem Solving</a></li>
  276. <li><a href="/section/security" >Safe Computing</a></li>
  277. <li><a href="/section/tech" >Tech News</a></li>
  278. <li><a href="/section/watchlist" >Watchlist</a></li>
  279. </ul></div>
  280.  
  281. <div>
  282. <ul class="leftnav">
  283.     <li><a href="javascript:void(0)" onClick="return showhide('stafflist')" title="Staff" class="tabhead">Staff <span id="stafflist_triangle"><img src="/images/nav_triangle_closed.gif" width="9" height="9" border="0" class="navtriangle" id="stafflist_tri_image" alt="Click to show or hide the contents of this section."></span></a></li>
  284. </ul>
  285. </div>
  286.  
  287. <div id="stafflist" style="display:block"><ul class="leftnav"><li><a href="/author/Adam+C+Engst" title="Adam Engst, Publisher">Adam Engst</a></li>
  288.     <li><a href="/author/Tonya+Engst" title="Tonya Engst, Editor in Chief">Tonya Engst</a></li>
  289.     <li><a href="/author/Jeff+Carlson" title="Jeff Carlson, Managing Editor">Jeff Carlson</a></li>
  290.     <li><a href="/author/Joe+Kissell" title="Joe Kissell, Senior Editor">Joe Kissell</a></li>
  291.     <li><a href="/author/Glenn+Fleishman" title="Glenn Fleishman, Contributing Editor">Glenn Fleishman</a></li>
  292.     <li><a href="/author/Mark+Anbinder" title="Mark Anbinder, Contributing Editor">Mark H. Anbinder</a></li>
  293.     <li><a href="/author/Matt+Neuburg" title="Matt Neuburg, Contributing Editor">Matt Neuburg</a></li>
  294.     <li><a href="/author/Rich+Mogull" title="Rich Mogull, Contributing Editor">Rich Mogull</a></li>
  295.     <li><a href="/author/Lex+Friedman" title="Lex Friedman, Staff Writer">Lex Friedman</a></li>
  296.     </ul>
  297.     </div>
  298.  
  299. <div>
  300. <ul class="leftnav">
  301.  
  302.     <li><a href="javascript:void(0)" title="Issues" class="tabhead" onClick="return showhide('issuelist')">Weekly Issues <span id="issuelist_triangle"><img src="/images/nav_triangle_closed.gif" width="9" height="9" border="0" class="navtriangle" id="issuelist_tri_image" alt="Click to show or hide the contents of this section."></span></a></li>
  303. </ul>
  304. </div>
  305.  
  306. <div id="issuelist" style="display:none"><ul class="leftnav"><li><div class="special"><form method="post" action="noaction.cgi" onsubmit="return false" id="issue_search_form" name="issue_search_form">Issue # <input type="text" onkeydown="if (event.keyCode == 13) { redirect_issue(this.form); }" id="issue_searchvalue" name="issue_number" style="width:35px; height: 10px"> <input onclick="redirect_issue(this.form)" type="image" name="submit_search" src="/images/go_search_button_blk.gif"></form></div></li><li><A HREF="/issue/725" >#725, 05 Apr 04</A></li>
  307. <li><A HREF="/issue/724" >#724, 01 Apr 04</A></li>
  308. <li><A HREF="/issue/723" >#723, 29 Mar 04</A></li>
  309. <li><A HREF="/issue/722" >#722, 22 Mar 04</A></li>
  310. <li><A HREF="/issue/721" >#721, 15 Mar 04</A></li>
  311. <li><A HREF="/issue/720" >#720, 08 Mar 04</A></li>
  312. <li><A HREF="/issue/719" >#719, 01 Mar 04</A></li>
  313. <li><A HREF="/issue/718" >#718, 23 Feb 04</A></li>
  314. <li><A HREF="/issue/717" >#717, 16 Feb 04</A></li>
  315.  
  316.  
  317. <li><a href="/backissues">Back Issues</a></li></ul></div>
  318.  
  319.  
  320. <div>
  321. <ul class="leftnav">
  322.  
  323.     <li><a href="/tidbitstalk" title="TidBITS Talk" class="tabhead">TidBITS Talk</a></li>
  324. </ul>
  325. </div>
  326.  
  327.  
  328.  
  329. <div>    
  330. <ul class="leftnav">
  331.     <li><a href="javascript:void(0)" onClick="return showhide('abouttidbits')" title="About TidBITS" class="tabhead">About TidBITS <span id="abouttidbits_triangle"><img src="/images/nav_triangle_closed.gif" width="9" height="9" border="0" class="navtriangle" id="abouttidbits_tri_image" alt="Click to show or hide the contents of this section."></span></a></li>
  332. </ul>
  333. </div>
  334.  
  335. <div id="abouttidbits" style="display:none">
  336. <ul class="leftnav"><li><a href="/about.html" title="About TidBITS">About Us</a></li><li><a href="/account.html" title="Account Help">Account Help</a></li><li><a href="/advertising.html" title="Advertise with TidBITS!">Advertise</a></li><li><a href="/contact.html" title="Contact Info">Contact</a></li><li><a href="/copyright.html" title="Copyright Terms">Copyright</a></li>
  337. </ul>
  338. </div>
  339.  
  340. <div>
  341. <ul class="leftnav">
  342. <li class="bottom"> </li>
  343. </ul>
  344. </div>
  345. <!-- end leftnav/left navigation -->
  346.  
  347. <!-- making sure nav elements hide/show before page loads --><script type="text/javascript"><!--
  348.     showhide('articleslist','show'); 
  349. // --></script>
  350.  
  351. <!-- begin sponsor_sidebox -->
  352.  
  353. <div class="sponsor_sidebox">
  354.  
  355. <ul>
  356.  
  357. <li><a href="http://crashplan.com/ref/tidbits.html">CrashPlan</a></li>
  358.  
  359. <li><a href="http://www.tidbits.com/about/support/contributors.html">Readers Like You!</a></li>
  360.  
  361. <li><a href="http://www.webcrossing.com/">Web Crossing</a></li>
  362.  
  363. <li><a href="http://macte.ch/conf_tidbits">MacTech Conference</a></li>
  364.  
  365. <li><a href="http://www.thedatarescuecenter.com/">The Data Rescue Center</a></li>
  366.  
  367. <li><a href="http://markspace.com/bits?source=tidbits">Mark/Space</a></li>
  368.  
  369. <li><a href="http://nuance.com/dragon/mac">Nuance</a></li>
  370.  
  371. <li><a href="http://www.usefulfruit.com/tb">Useful Fruit</a></li>
  372.  
  373. <li><a href="http://www.econtechnologies.com/tb">Econ Technologies</a></li>
  374.  
  375. <li><a href="http://www.smilesoftware.com/">Smile</a></li>
  376.  
  377. <li><a href="http://www.smithmicro.com/tidbits">Smith Micro</a></li>
  378.  
  379. </ul><div class='sponsor_sidebox_bottom'> </div>
  380. </div>
  381.  
  382.  
  383. <!-- end sponsor_sidebox -->
  384.  
  385.  
  386. </div> <!-- end leftcolumn div -->
  387.  
  388. <!-- end left column -->
  389.  
  390.  
  391. <!-- begin centercolumn_border -->
  392.  
  393. <div id="centercolumn_border">
  394.  
  395. <div class="center_top">Thoughtful, detailed coverage of the Mac, iPhone, and iPad, plus the best-selling <a href="http://www.takecontrolbooks.com/?pt=TB-TAGLINE" style="color:yellow">Take Control</a> ebooks.</div>
  396.  
  397. <!-- begin centercolumn -->
  398. <div id="centercolumn">
  399.  
  400.  
  401.  
  402. <!-- begin rightcolumn_container -->
  403. <div id="rightcolumn_container">
  404.  
  405. <!-- begin rightcolumn -->
  406.     <!-- rightcolumn is embedded within centercolumn so featured text wraps around it -->
  407.     <div id="rightcolumn">
  408.  
  409. <p class="top"> </p>
  410.  
  411.  
  412.  
  413.  
  414.  
  415.  
  416.  
  417.  
  418.  
  419.  
  420. <!-- Watchlist items -->
  421. <div class="tearoffbox_wide_container">
  422. <div class="tearoffbox_wide_watchlist">
  423. <p class="tearoffbox_wide_top_watchlist"> </p>
  424.  
  425. <h6><a href="/section/watchlist">TidBITS Watchlist</a></h6>
  426. <ul>
  427.  
  428. <LI><a href="/article/11622">DEVONthink and DEVONnote 2.0.4</a></LI>
  429.  
  430. <LI><a href="/article/11620">Security Update 2010-006</a></LI>
  431.  
  432. <LI><a href="/article/11619">TinkerTool 4.2</a></LI>
  433.  
  434. <LI><a href="/article/11618">Mailplane 2.2</a></LI>
  435.  
  436. <LI><a href="/article/11617">Pro Applications Update 2010-02</a></LI>
  437.  
  438. <LI><a href="/article/11611">Dialectic 1.7</a></LI>
  439.  
  440. <LI><a href="/article/11604">Transmit 4.1.1</a></LI>
  441.  
  442. <LI><a href="/article/11603">MarsEdit 3.1.1</a></LI>
  443.  
  444. <LI><a href="/article/11600">Savescreenie 2.0</a></LI>
  445.  
  446. <LI><a href="/article/11598">1Password 3.4.1</a></LI>
  447.  
  448. </ul>
  449.  
  450. <div class="tearoffbox_wide_bottom_watchlist"> </div>
  451.  
  452. </div><!-- end tearoffbox_wide -->
  453.  
  454. </div><!-- end tearoffbox_wide_container for watchlist items -->
  455.  
  456. <!-- begin tearoff box wide -->
  457.  
  458. <div class="tearoffbox_wide_container">
  459. <div class="tearoffbox_wide_tips">
  460.  
  461. <div class="tip_display">
  462. <div class="tips_sponsor_logo">
  463.  
  464. </div>
  465. <h6>Editing iCal Events in Snow Leopard</h6>
  466. <p><p>Snow Leopard makes looking at event details in iCal easier. In the Leopard version of iCal, you had to double-click an event to reveal only some information in a pop-up box; you then needed to click the Edit button (or press Command-E) to edit an item's information. In Snow Leopard, choose Edit > Show Inspector (or press Command-Option-I) to bring up a floating inspector that provides an editable view of any items selected in your calendar.</p></p>
  467.  
  468. </div>
  469.  
  470. <div class="tearoffbox_wide_bottom_tips">
  471. <div style="padding-bottom:35px"><div class="tip_display" style="float:left"><p><br><a href="/tipbits/193">Link to this tip</a></p></div><div class="tip_display" style="float:right; width:150px">
  472. <p class="credit">Submitted by<br>Doug McLean</p>
  473. </div></div>
  474.  
  475. </div>
  476.  
  477. <div class="tearoffbox_wide_tips_submit">
  478. <form method="post" onsubmit="return false" id="tipbits_form" name="tipbits_form" action="noaction.cgi"><p><a href="javascript:void(0)" onmousedown="ShowTipBox('ts','ts_recaptcha', 50, 'tip_title_id'); return true;">Share your own tip!</a> | <a href="javascript:void(0)" onClick="generic_show_hide('search_tipbits'); document.tipbits_form.tipbits_searchvalue.focus()">Search TipBITS</a></p>
  479. <p style="display:none" id="search_tipbits"><input type="text" onkeydown="if (event.keyCode == 13) { search_tipbits('tipbits_searchvalue'); }" id="tipbits_searchvalue" name="tipbits_searchvalue"> <a href="javascript:void(0)" onClick="search_tipbits('tipbits_searchvalue')">Search</a></p></form>
  480. </div>
  481. <div class="tearoffbox_wide_bottom_tips_submit">
  482.  
  483. </div>
  484.  
  485. </div><!-- end tearoffbox_wide_tips -->
  486. </div><!-- end tearoffbox_wide_container for tips-->
  487. <!-- end tearoff box wide -->
  488.  
  489.  
  490.  
  491. <!-- begin 300 x 250 ad -->
  492.  
  493. <div id="content_ad_square">
  494. <script type='text/javascript'><!--// <![CDATA[
  495.     OA_show(5);
  496. // ]]> --></script><noscript><a target='_blank' href='http://db.tidbits.com/ads/delivery/ck.php?n=TB7671f69'><img border='0' alt='' src='http://db.tidbits.com/ads/delivery/avw.php?zoneid=5&n=TB7671f69'></a></noscript>
  497. </div><!-- end 300 x 250 ad -->
  498.  
  499. <!-- TBTalk items -->
  500. <div class="tearoffbox_wide_container">
  501.  
  502. <div class="tearoffbox_wide_p">
  503. <p class="tearoffbox_wide_top_p"> </p>
  504.  
  505. <h5>Recent TidBITS Talk Discussions</h5>
  506. <ul>
  507.  
  508. <LI><a href="http://emperor.tidbits.com/webx?50@@.3cf95241">Alternatives to MobileMe for syncing calendars between iPad/Mac</a> (1 message)</LI>
  509.  
  510. <LI><a href="http://emperor.tidbits.com/webx?50@@.3cf94dbb">Free anti-virus for the Mac</a> (20 messages)</LI>
  511.  
  512. <LI><a href="http://emperor.tidbits.com/webx?50@@.3cf934e6">iTunes 10 syncing iPod Touch 4.1</a> (2 messages)</LI>
  513.  
  514. <LI><a href="http://emperor.tidbits.com/webx?50@@.3cf92a22">Thoughts about Ping</a> (16 messages)</LI>
  515.  
  516. </ul>
  517.  
  518. <div class="tearoffbox_wide_bottom_p"> </div>
  519.  
  520. </div><!-- end tearoffbox_wide -->
  521.  
  522. </div><!-- end tearoffbox_wide_container for TBtalk items -->
  523.  
  524. <!-- start takecontrol_ad -->
  525. <script type='text/javascript'><!--// <![CDATA[
  526.     OA_show(7);
  527. // ]]> --></script><noscript><a target='_blank' href='http://db.tidbits.com/ads/delivery/ck.php?n=TBe46d56f'><img border='0' alt='' src='http://db.tidbits.com/ads/delivery/avw.php?zoneid=7&n=TBe46d56f'></a></noscript><!-- end takecontrol_ad -->
  528.  
  529. <!-- begin tearoff box 2 -->
  530.  
  531. <div class="tearoffbox_wide_container">
  532.  
  533. <div class="tearoffbox_wide_p">
  534. <p class="tearoffbox_wide_top_p"> </p>
  535.  
  536. <h5>Related Articles</h5>
  537. <ul>
  538. <li><a href="/article/8219">FileMaker 8 Adds Features, Retains File Format</a> (29 Aug 05)</li>
  539. <li><a href="/article/7844">FileMaker 7.0v3 Update Offers Numerous Fixes</a> (11 Oct 04)</li>
  540. <li><a href="/article/7791">DealBITS Drawing: FMChecker</a> (30 Aug 04)</li>
  541.  
  542. </ul>
  543.  
  544. <p class="tearoffbox_wide_bottom_p"> </p>
  545.  
  546. </div><!-- end tearoffbox_wide -->
  547. </div><!-- end tearoffbox_wide_container -->
  548.  
  549. <!-- end tearoff box 2 -->
  550.  
  551.  
  552.  
  553.  
  554.  
  555.  
  556.  
  557. <!-- begin tearoff box 1 -->
  558.  
  559. <div class="tearoffbox_wide_container">
  560.  
  561. <div class="tearoffbox_wide">
  562. <p class="tearoffbox_wide_top"> </p>
  563.  
  564. <h5>Published in <a href="/issue/721">TidBITS 721</a>.<br><a href="http://www.tidbits.com/list">Subscribe</a> to our weekly email edition.</h5>
  565. <ul>
  566. <li><A HREF="/article/7578">Apple Releases Mac OS X 10.3.3</A></li>
  567. <li><A HREF="/article/7579">The Devonian Age Continues</A></li>
  568. <li><A HREF="/article/7580">iTunes Music Store Tops 50 Million Songs Sold</A></li>
  569. <li><A HREF="/article/7581">The New Face of FaceSpan</A></li>
  570. <li><A HREF="/article/7582">Perl Made Easy with Affrus 1.0</A></li>
  571. <li><A HREF="/article/7583">Style Master 3.5 Works Web Site Wizardry</A></li>
  572. <li><A HREF="/article/7584">NoteTaker 1.8 Hits More High Notes</A></li>
  573. <li><A HREF="/article/7585">Adam's March Radio Shows</A></li>
  574. <li><A HREF="/article/7586">Revisiting Panther's FireWire Data Loss Problem</A></li>
  575. <li><A HREF="/article/7588">Hot Topics in TidBITS Talk/15-Mar-04</A></li>
  576.  
  577. </ul>
  578.  
  579. <p class="tearoffbox_wide_bottom"> </p>
  580.  
  581. </div><!-- end tearoffbox_wide -->
  582. </div><!-- end tearoffbox_wide_container -->
  583.  
  584. <!-- end tearoff box 1 -->
  585.  
  586.  
  587.  
  588.  
  589.  
  590.  
  591.  
  592. <div id="rightcolumn_bottom">
  593.  
  594. </div>
  595.  
  596.     </div><!-- end rightcolumn -->
  597.  
  598.  
  599. </div><!-- end rightcolumn_container -->
  600.  
  601.  
  602.  
  603. <!-- featured articles -->
  604.  
  605. <div id="center_ajax_sub" class="instapaper_body">
  606.  
  607. <!-- google_ad_section_start -->
  608.  
  609.  
  610.  
  611.  
  612.  
  613.  
  614.  
  615.  
  616.  
  617.  
  618.  
  619.  
  620.  
  621.  
  622.  
  623.  
  624.  
  625.  
  626.  
  627.  
  628. <!-- issue, article, or series -->
  629.  
  630.     
  631.     
  632.     
  633.     
  634.     
  635.         
  636.     <!-- show article(s) -->
  637.     <div class="article"><a name="6198"></a>
  638.     
  639. <!-- comment initialization routine as needed -->
  640. <div class="popup_box_with_captcha" id="hc_6198" style="display: none">
  641.     <div class="tip_box_format">
  642.     <div id="hc_innards_alt_6198" style="display: none">
  643.             <div class="tbf_row">
  644.                 <div class="tbf_wide_80" id="hc_small_response_6198"></div><div class="x_close_row" id="hc_upper_right1_6198"><a href="javascript:void(0)" onmousedown="HidePopupContent('hc_6198', 'hc', '6198'); return true;">Close</a></div>
  645.  
  646.             </div>
  647.     </div>
  648.     <div id="hc_innards_6198">
  649.         <div class="tip_box_form">        
  650.             <form action="foobar.cgi" method="get" name="check_human_6198">
  651.             <div class="tbf_row">
  652.                 <div class="tbf_wide_80" id="hc_rc_6198">To help us avoid automated posts and misuse of our site, please enter the words below.</div><div class="x_close_row" id="hc_upper_right2_6198"><a href="javascript:void(0)" onmousedown="HidePopupContent('hc_6198', 'hc', '6198'); return true;">Close</a></div>
  653.  
  654.             </div>
  655.             <div class="spacer"></div>
  656.             <div class="tbf_row" id="hc_message_box_6198" style="display:none">
  657.                 <div class="tbf_wide"><div class="tbf_alert" id="hc_top_message_6198"></div></div>
  658.             </div>
  659.             <div class="spacer"></div>
  660.             <div class="tbf_row">
  661.                 <div class="tbf_wide"><div id="hc_recaptcha_6198"></div></div>
  662.             </div>
  663.             <div class="spacer"></div>
  664.             <div class="tbf_row">
  665.                 <div class="tbf_wide"><input type="submit" value="Submit" name="submit_this_tip" onClick="handle_tip_submission('hc', '6198', this.form, this.form.submit_type.value); return false;"><input name="calling_routine" type="hidden"><input type="hidden" name="getbits" value="7587"><input type="hidden" name="author_id"><input type="hidden" name="submit_type" value=""></div>
  666.             </div>
  667.             <div class="spacer"></div>
  668.             </form>
  669.         </div><!-- end tip_box_form -->
  670.     </div><!-- end hum box innards -->
  671.     </div><!-- end tip box format -->
  672. </div><!-- end tip_submit box-->
  673.  
  674.  
  675.  
  676.         
  677.         
  678.         <!-- specific article details here -->
  679.         
  680.         
  681.             
  682.         
  683.     
  684.         <article_link><script type="text/javascript">open_if_linked('')</script></article_link>
  685.         
  686.         <div class="featured_meta"><div class="meta_article">15 Mar 2004 | <a href="/article/7587?print_version=1">Print <span class="shift_up"><img src="/images/printer_icon.gif" alt="Printer-Friendly Version of This Article" border="0" width="9" height="10"></span></a></div></div>
  687.  
  688.         <H2>FileMaker Pro 7: Can You Say Paradigm Shift?</H2>
  689.  
  690.         <p class="byline">by <a href="/author/William%20Porter">William Porter</a> <a href="javascript:void(0)" onClick="document.check_human_6198.submit_type.value='email'; document.check_human_6198.author_id.value='295'; ShowTipBox('hc_6198', 'hc_recaptcha_6198')"><span class="shift_down"><img src="/images/gettb_button_email.gif" height="12" width="12" border="0" alt="Send Email to Author"></span></a></P>
  691.  
  692.         <!-- article text -->
  693.         
  694.         <div id="article_box_6198"><P>I wouldn't describe the last several versions of FileMaker Pro as ho-hum, but I wouldn't exactly call them exciting. The addition of XML support in FileMaker Pro 6 was so revolutionary an enhancement that most developers still don't know what to make of it two years later. Otherwise, version 6 felt like a maintenance release, with a few new status functions, the capability to import photos directly from a digital camera, a Find and Replace command, etc.</P><P>As a result, many people who aren't already in the know will be surprised - no, scratch that - <EM>shocked</EM> to discover that the just-released FileMaker Pro 7 is dramatically, profoundly and comprehensively different from its predecessors. Different and, I hasten to say, better.</P><P><<A HREF="http://www.filemaker.com/products/fm_whatsnew.html">http://www.filemaker.com/products/fm_ whatsnew.html</A>></P><P>Now, the difference is not primarily a matter of new or changed features, although there are more of those than I can mention here. It's more a matter of a new way of thinking. Experienced FileMaker developers learning to work in FileMaker Pro 7 may feel like Texans accustomed to attacking their food with steak knives, now forced to eat noodles with chopsticks. Chopsticks are not just a different tool for picking up food: they're designed for a different cuisine, behind which there is a different conception of what constitutes a meal. The same applies to FileMaker Pro 7. We're not just going to be building databases differently, we're going to be building fundamentally different kinds of databases.</P><P><STRONG>To Upgrade or Not to Upgrade?</STRONG> FileMaker Pro 7 and FileMaker Developer 7 are available immediately. New licenses for FileMaker Pro 7 cost $300, and a special upgrade offer available through 17-Sep-04 makes upgrades available for $150 for previous versions of FileMaker all the way back to FileMaker Pro 2.1. After 17-Sep-04, only FileMaker Pro 6 owners will be eligible for the upgrade pricing. FileMaker Developer 7 costs $500, with a $100 rebate available to previous owners. Special deals are available for some buyers, so be sure to check FileMaker, Inc.'s Web site.</P><P><<A HREF="http://www.filemaker.com/upgrade/">http://www.filemaker.com/upgrade/</A>></P><P>If you are already using FileMaker Pro, this upgrade is something you will want at some point. But you should proceed deliberately, particularly if you're an end-user or are involved on the IT side of hosting and maintaining database solutions.</P><P>The main reason not to install FileMaker Pro 7 on all your computers tomorrow is that it's hard to predict whether any given solution will come into FileMaker Pro 7 singing "Hallelujah!" or kicking and screaming. Some (perhaps many) old solutions will convert with relatively little effort. But many will not. In my limited experience, any moderately complex solution is likely to require some effort before conversion, and perhaps afterwards, too. FileMaker, Inc., has a wealth of information on the subject of conversion on its Web site. Read it, or weep. And in the meantime, you can eat your cake and have it, too, because FileMaker, Inc., has adjusted its license to let upgraders get started with version 7 while continuing to run old solutions under version 6; both versions can run simultaneously without trouble.</P><P><<A HREF="http://www.filemaker.com/upgrade/migration.html#techbriefs">http://www.filemaker.com/upgrade/ migration.html#techbriefs</A>><BR><<A HREF="http://www.filemaker.com/legal/licensing_faq_us.html#1">http://www.filemaker.com/legal/licensing_faq_ us.html#1</A>></P><P>If your solution is shared on a network, you need to consider something else: you can't share FileMaker Pro 7 databases under the current FileMaker Server 5.5, and FileMaker Server 7 won't be out for a couple of months.</P><P><<A HREF="http://www.filemaker.com/products/fms_home.html">http://www.filemaker.com/products/fms_home.html</A>></P><P>FileMaker Pro 7 requires Mac OS X 10.2.8 and later (or Windows 2000/XP). If you are using an older operating system, you may need to upgrade your operating system, or even your Mac, before installing FileMaker Pro 7.</P><P><STRONG>What's in It for End Users?</STRONG> You museum curators and small-business managers, secretaries and paralegals, salesmen, doctors, engineers, teachers, accountants, and publishers - you folks are FileMaker Pro's principal customers. You may not get your hands on FileMaker Pro 7 for weeks or months, but there are improvements to look forward to.</P><P>In FileMaker Pro 7, you can view the same data in multiple windows. This means you will be able to view the same found set of records in both form and list view, or view lists of two entirely different found sets.</P><P>When you finish editing a record in FileMaker Pro 7, you may now be asked if you want to save your changes. Have you ever made a bunch of changes in a record, then changed your mind? Or, worse, realized you had edited the wrong record? In FileMaker 7, click Don't Save to restore the record to its former state.</P><P>What if you need to edit a record urgently, but Jenkins in marketing got there first? With FileMaker Pro 7, you can send Jenkins an instant message asking him to put down the record and back away from the database. Now it's more fun to be the boss.</P><P>Is your budget tight? FileMaker Pro's built-in Instant Web Publishing feature is now actually useful. Turn it on and share the database over your workgroup's intranet. What your colleagues will see in their browsers looks very close to what they'd see sitting in front of a client copy of FileMaker Pro. Instant Web Publishing is good for up to five concurrent users; FileMaker finally eliminated that old 10-different-IP-addresses-in-a-rolling-12-hour-period silliness.</P><P>I'm not sure whether this is something that end users have been clamoring for, but container fields can now store almost anything except lunch leftovers. We are not just talking photos and QuickTime movies here, but Word and Excel documents, PDFs, MP3s, even other FileMaker Pro databases. Click on a container field and use the appropriate command in the Insert menu. This gives FileMaker Pro the capability to become a real document management system. Files stored in a FileMaker Pro 7 database do not have to be accessible to users on a shared network drive. And you can use FileMaker's security to control the access users have to stored files.</P><P>Speaking of security, the security model in FileMaker Pro 7 is entirely new. End users who must login to shared databases are now asked to provide an account name as well as a password. There is really important news here but it's technical and a bit premature, since the new security features won't come into their own until FileMaker Server 7 is released. Suffice it to say that managers, IT/IS staff, and developers working together will be able to make access to your valuable data simpler and safer than ever before.</P><P><<A HREF="http://www.filemaker.com/downloads/pdf/techbrief_security.pdf">http://www.filemaker.com/downloads/pdf/ techbrief_security.pdf</A>><BR><<A HREF="http://www.filemaker.com/downloads/pdf/whitepaper_fm7_security.pdf">http://www.filemaker.com/downloads/pdf/ whitepaper_fm7_security.pdf</A>></P><P>I could go on, but in all honesty, the most radical changes in FileMaker Pro 7 are not obvious on the surface. A few cosmetic changes in the status area and dialogs have been implemented, and Mac OS X users get the toolbar back. But otherwise, if you have never defined a relationship or written a script, FileMaker Pro 7 will look very familiar. End users are the ultimate beneficiaries of everything good in FileMaker Pro 7, but those benefits will be indirect.</P><P><STRONG>So What's In It for Developers?</STRONG> If you are a developer, you may find FileMaker Pro 7 a mixed blessing. On one hand, you have been given a new tool that's an order of magnitude more powerful than what it replaces. On the other hand, almost everything you knew a week ago is obsolete.</P><P>There are scores of new functions, including an Evaluate function that can perform a calculation based on the contents of a field, and a Let function that lets you define and use variables on the fly inside a calculation formula. Buttons can pass parameters to scripts; for example, the same button, placed on different layouts, can pass the current layout name to the script it's calling and produce a different result in each case. If you work inside FileMaker Developer, you can now define custom functions and store them in the file so they can be used when the solution is opened in FileMaker Pro. Text in the middle of a field can be formatted via calculation, for example, to highlight a search string. You can add comments to calculation formulas using either C or C++ formats. And there are even more improvements along the same lines.</P><P>But, important as these enhancements are, they aren't the big news. The big news in FileMaker Pro 7 has to do with file structures and relationships.</P><P><STRONG>One File, Many Tables</STRONG> -- FileMaker Pro 7 now distinguishes between database files and tables, and more important, a single database file can now store multiple tables. How many tables? A million, which is more than you will ever need. And now that FileMaker has something that can properly be called "tables," we're finally free to use the word "database" more or less the way the rest of the world uses it.</P><P>Multiple tables in the same file, combined with new features like script parameters and some of the new functions, mean that it's possible to write more generic, more modular scripts than ever before. In one 14-file solution that I wrote, a whole slew of scripts in each of the 14 files do essentially the same things: go to list view, perform a scripted search with input from the user, etc. In the FileMaker Pro 6 version of my solution, each of these scripts must exist in each file separately. If I decide to improve the find-records script in one file, I have to edit it in the other 13 files as well. In FileMaker Pro 7, much of this duplication of effort is unnecessary.</P><P>You do not have to store everything in one file. Files can refer to one another and access one another's tables. FileMaker Pro 7 takes advantage of this fact when it converts your existing multi-file solutions: each individual file in the old solution becomes an individual, one-table file in the new solution. These files are related in a group of small, file-to-file relationships, pretty much the way they were related before. In many cases, this is a benign but undesirable consequence of the solution's origin in the earlier version of FileMaker Pro. If you want to consolidate these individual files, New Millennium's FM Robot utility can do the job automatically. But in many cases, if you or your client can afford it, rebuilding old solutions from scratch will be desirable.</P><P><<A HREF="http://www.newmillennium.com/Product_Overview.htm?pid=P77YJCFQ66NXQYB0LCXW">http://www.newmillennium.com/Product_ Overview.htm?pid=P77YJCFQ66NXQYB0LCXW</A>></P><P><STRONG>The Separation Model</STRONG> -- When one file references another file, it references everything in that file. In other words, if one file, called <code>My_Data.fp7</code> has 22 tables in it, another file called <code>My_App.fp7</code> can access every one of those tables as if they were stored internally rather than externally. What does "reference" mean here? It means that <code>My_App.fp7</code> can contain layouts that provide form and list views of each of the tables in <code>My_Data.fp7</code>. Not list as in "portal" - a limited interface element familiar to current FileMaker users - but list as in a <EM>real</EM> list, a list that can print nicely on page after page, a list that can be displayed with subsummary totals. <code>My_App.fp7</code> can do this even if it does not contain a single table itself. It might contain nothing but layouts and scripts, all taking advantage of the tables in <code>My_Data.fp7</code>.</P><P>Can you see where this is going? In FileMaker Pro 7, it's possible to put the data in one file, and all the programming resources - layouts, scripts, value lists, summaries - into a separate file. Separating data (and the data structure) from the stuff you do to analyze and display the data brings an enhanced clarity to the development process. It's also a huge boon for any client whose developer is working remotely. When it's time to update that solution with 6 million records, the IT guy takes the solution off line, throws out the old front-end file, puts the new front-end file in its place, and places the solution back online. Downtime: five minutes, tops.</P><P>FileMaker developers have been talking about "The Separation Model" for years, but it was more of a dream than a reality, due to the limitations on the ways in which one file could access, manipulate, and display another file's data. Line-item reports can't be printed effectively from portals, so you usually had to jump to a data file to print line items (like invoices or class rosters). And that usually meant you had to include scripts in the data file to sort the records and display them on a report layout.</P><P>But in FileMaker Pro 7, since one file can logically incorporate all the tables in another file and make use of them as if they were stored internally, these impediments to true separation no longer exist. The main remaining obstacles to The Separation Model are the need to deal with unanticipated fields and user modifications to accounts and passwords, but a lot of smart developers are working on these problems. I have a solution on my PowerBook right now that implements The Separation Model completely. It's somewhat modest, but it works.</P><P>The Separation Model won't be adopted by every developer. Many developers will be so thrilled to be able to put everything in a single file that they won't want to think about the alternative, at least not for a while. Even those who embrace it may not use it in every solution, in part because it may unnecessarily increase the amount of data that needs to be backed up regularly. But the sky's the limit now as far as file size goes. FileMaker Pro database files can balloon to 8 terabytes (if you have an Xserve RAID to store it on). As FileMaker Pro databases grow ever larger, the advantages of The Separation Model may become more obvious and more compelling.</P><P><STRONG>Can You Relate?</STRONG> I think the capability of one file to incorporate another file's tables is the most significant single change in FileMaker Pro 7. But the change that many developers so far seem to be most excited (or confused) about is the change in the way that relationships are defined and managed.</P><P>FileMaker Pro 1 was a flat-file database. Everything went into one file containing only one type of record. In FileMaker Pro 2, it became possible for one file to lookup data in another file and copy it. This wasn't real relationality, but we didn't care. We hugged lookups in our arms tightly and ran toward the goal post with them, screaming all the way. Ah, 1993!</P><P>In version 3, FileMaker Pro became relational, sort of. It was certainly more relational than version 2. The sharing of data from one file to another was automatic (whereas lookups had to be triggered), related data wasn't stored twice (as it had been with lookups), and you could edit one file's data directly in another, related file. Developers took this new capability and did some truly amazing things with it.</P><P>But this was an idiosyncratic kind of relationality. For one thing, relationships were unidirectional. You could relate INVOICES to LINE ITEMS, but that just meant you could see line items from the invoices file. If you wanted to see invoice data (such as the invoice date) from the line items file, you had to go to the LINE ITEMS file and define the relationship a second time. It was a bit like needing to conduct a wedding twice: once for the groom and once for the bride. Worse, if you wanted to display a value from PRODUCTS in the portal in INVOICES that displayed line item records, you had to create a calculation field in the line items file to capture that value and pass it up the relational line. It was like being unable to borrow sugar from anybody but your next door neighbor. The old relational model was a cool kludge, but a kludge nonetheless. And it remained virtually unchanged for almost a decade.</P><P>Until last week. Relationships in FileMaker Pro 7 are always bidirectional and they reach as far as you want them to. If invoices are related to line items, line items to products, and products to companies, a portal in the INVOICES file can display the company name for each product in each line item, and you won't have to create a single calculation field. And in FileMaker Pro 7, you can, in one file, define relationships between tables in another file, even if the tables are not related in the file in which they are stored.</P><P>Moreover, tables can now be related in scores of new ways. In FileMaker Pro 6 and earlier, relationships always involved a simple match between data in a field in one file and corresponding data in a field in another file. In FileMaker Pro 7, however, you can define relationships with a variety of operators and multiple match fields. Before, we had to create complex calculation fields to achieve results that can now be achieved entirely by means of relationships.</P><P>One of the quirkiest things about FileMaker Pro versions 3 through 6 was that a program with a solid graphical interface used a text-based dialog to define relationships. For crying out loud, even Microsoft Access defined relationships graphically! In FileMaker Pro 7, relationships are defined in a special dialog called the relationship graph. You place instances or "occurrences" of the various tables on the graph, and relate them by drawing lines between them.</P><P>In some technical ways, FileMaker Pro's implementation of relationality is still idiosyncratic. We used to have to create redundant relationships to sort data in portals in different ways. We don't have to do that any more, but in FileMaker Pro 7, for various reasons, you may still need or want to relate the same tables more than once. You won't read about this sort of thing in the standard guides to relational design. Even so, those guides are far more relevant to FileMaker Pro 7 than they were to earlier versions. All in all, the new relational model is powerful, flexible and extremely well implemented.</P><P><STRONG>What's Not to Like?</STRONG> Given the ambitious nature of this release, it shouldn't be too surprising that FileMaker Pro 7 has a few blemishes.</P><P>The Sort Records and Export Records dialogs, which weren't resizable at all, are now resizable, but only on the right side of the dialog. The field list on the left side of each dialog is still too small to display long field names fully, although, after you move a field from the list on the left side to the list on the right side, you can confirm on the right side that you moved the correct field.</P><P>There seems to be a significant problem with fuzzy (badly anti-aliased) text in FileMaker Pro 7 for Windows. This matters even to Mac OS developers, because Windows users make up the lion's share of FileMaker's market.</P><P>It looks like the powerful new Let function mentioned above creates variables limited in scope to the calculation in which they are defined. You may still need to use global fields as pseudo-variables, for example, to pass values from one script to another.</P><P>Alas, in FileMaker Pro 7, it is <EM>still</EM> not possible to trigger a script when the user exits a field. This is my one major disappointment with the new release.</P><P><STRONG>Conclusion</STRONG> -- FileMaker Pro has been widely touted as easy to use. This claim has always been a half-truth at best. FileMaker Pro version 6 was and still is a great product. But like playing the guitar, FileMaker Pro is easy only for beginners. Advanced FileMaker developers in the past have spent a lot of their time compensating for FileMaker's limitations. In other words, in the past, if you stuck with FileMaker Pro and extended your skills and knowledge, you reached a point of diminishing returns, where it actually became harder to do things in FileMaker that could be done more easily in development systems that were ostensibly more difficult. Frankly, it was frustrating at times. Most of us stuck with FileMaker Pro because the results were worth the effort. But it wasn't "easy."</P><P>For end users and beginning developers, FileMaker Pro 7 is neither much easier nor much harder than it was before, while for developers, it's a bit of both. Many tasks have gotten harder for developers in the short run, because the program is an order of magnitude more complex than it was before. But I am confident that development will become easier in the long run because we won't hit that point of diminishing returns that dogged previous versions. Instead, at that point, we will be able to create more interesting solutions in more efficient, more intelligent, and more satisfying ways. And that's an exciting prospect, both for us and for our clients.</P><P>[William Porter is a former classics professor who, in 1998, gave up academic tenure to pursue "other interests," including developing database applications. An Associate Member of the FileMaker Solutions Alliance, Will is currently working on a book about FileMaker Pro 7 for No Starch Press.]</P><P class="paybits">PayBITS: Did Will's review of FileMaker Pro 7 give you the data<BR>   you were looking for? Consider sending him a few bucks via PayBITS!<BR>   <<A HREF="https://www.paypal.com/xclick/business=wp%40polytrope.com">https://www.paypal.com/xclick/ business=wp%40polytrope.com</A>><BR>   Read more about PayBITS: <<A HREF="http://www.tidbits.com/ paybits/">http://www.tidbits.com/paybits/</A>></P><!-- FileMaker Pro 7: Can You Say Paradigm Shift? William Porter --></div>
  695.         
  696.  
  697.         <!-- end article text -->
  698.     
  699.         
  700.         <!-- PayBITS -->
  701.         
  702.  
  703.         
  704. <p> </p><div class="sponsorbox">
  705. <div class="sponsortext"><A HREF="http://www.usefulfruit.com/tb"><IMG SRC="http://db.tidbits.com/images/badges/pear-note-icon50x50.png" ALT="" HEIGHT="50" WIDTH="50" BORDER="0" ALIGN="left"></A>Pear Note 2: More complete, understandable notes on your Mac.<br />Typed notes are blended with recorded audio, video, and slides<br />to create notes that make more sense when you need them most.<br />Learn more at <<a href="http://www.usefulfruit.com/tb">http://www.usefulfruit.com/tb</a>>!</div>
  706. </div>
  707. <div class="sponsorbox_bottom"> </div>
  708.  
  709.  
  710.         <!-- comments section -->
  711.         
  712.         <!-- end comment show-->
  713.         
  714.         <!-- end comments section -->
  715.  
  716.  
  717.         <!-- end article loop details -->
  718.         
  719.         
  720.  
  721.         
  722.     </div><!-- end show article -->
  723.     
  724.     
  725.  
  726.  
  727. <!-- article_plus end -->
  728. <!--
  729. </DIV>
  730. --><!-- end main_column DIV -->
  731.  
  732.  
  733. <!-- google_ad_section_end -->
  734.  
  735. </div><!-- end center AJAX insert -->
  736.  
  737. <!-- TipBITS Search Results Lozenge -->
  738. <div id="tipbits_results_loz" style="display:none">
  739. <form method="post" onsubmit="return false" id="tipbits_form_loz" name="tipbits_form_loz" action="noaction.cgi">
  740. <div class="tip_footer">
  741. <p id="search_tipbits_loz"><input type="text" onkeydown="if (event.keyCode == 13) { search_tipbits('tipbits_searchvalue_loz', 'tipbits_results_loz'); }" id="tipbits_searchvalue_loz" name="tipbits_searchvalue_loz"> <a href="javascript:void(0)" onClick="search_tipbits('tipbits_searchvalue_loz', 'tipbits_results_loz')">Search</a></p>
  742. </div>
  743. <div class="tip_footer_bottom">
  744.  </div>
  745. </form>
  746. </div><!-- end TipBITS Search Results lozenge -->
  747.  
  748.  
  749.  
  750.  
  751. <!-- begin footer -->
  752. <div id="footer">
  753.  
  754. <div id="qr_tag_right"><div id="qr_tag_image"><img src="http://db.tidbits.com/tags/7587.png"></div><div id="qr_tag_text"><a href="http://db.tidbits.com/article/10616">What's this image?</a></div></div>
  755. <p>Special thanks to <a href="http://www.forest.net/">digital.forest</a>, our
  756. Web and mailing list host.</p>
  757. <p>Unless otherwise noted, this article is copyright © 2004 <a href="/author/William%20Porter">William Porter</a></p>
  758. <p>TidBITS is copyright © 2010 TidBITS Publishing Inc.</p>
  759. <p>Reuse governed by <a href="http://www.tidbits.com/terms/">Creative Commons License</a>.</p>
  760.  
  761. <p><a href="/about.html" title="About TidBITS">About TidBITS</a> | <a href="/account.html" title="Account Help">Account Help</a> | <a href="/advertising.html" title="Advertise with TidBITS!">Advertise with TidBITS!</a> | <a href="/contact.html" title="Contact Info">Contact Info</a> | <a href="/copyright.html" title="Copyright Terms">Copyright Terms</a></p>
  762.  
  763. </div><!-- end footer -->
  764.  
  765.  
  766. </div> <!-- end centercolumn -->
  767.  
  768. <div class="center_bottom"> </div>
  769.  
  770. </div> <!-- end centercolumn_border -->
  771.  
  772.  
  773. </div> <!-- end content_container -->
  774.  
  775. </div> <!-- end mainbody -->
  776.  
  777.  
  778. <script src="http://www.google-analytics.com/urchin.js" type="text/javascript">
  779. </script>
  780. <script type="text/javascript">
  781. _uacct = "UA-276924-3";
  782. urchinTracker();
  783. </script>
  784. <script type="text/javascript"
  785. src="http://tidbitscom.skimlinks.com/api/skimlinks.js"></script>
  786. <script type="text/javascript">
  787. var skimlinks_pub_id = '2559X585851';
  788. var skimlinks_domain = 'go.tidbits.com';
  789. skimlinks();
  790. </script>
  791. </body>
  792. </html>
  793.  
  794.