FMDiff™

Download FMDiff for your platform
FileMaker Business Alliance
View Jürgen Geßwein's profile on LinkedIn

This site is W3C compliant:
Valid XHTML - Valid CSS
Last modified February 24 2016, 21:25:47 MET.

What does FMDiff report?

Please note: this page - as well as a FMDiff report requires a current browser to be properly shown.

Hidden, But Important File Information

Let's look at a Comparison Report as shown in a browser. The report unveils details you've never seen before:

The samples shown here were taken from various files to show many aspects. You may download a real life example (44 kByte) as html file.

Report Header

The header shows the file name, the FMDiff version, the date and time of the comparison, and the elapsed time for the comparison. More fields can be set via preference settings, like who did the test, the machine configuration, location.

FMDiff™ Report: “bps_Email.fp7”
Tool
FMDiff (v2.0.1)
Date
2011-01-23 08:13:07
Elapsed Time
00:00:00.097
Tester
Winfried Huslik

Files

The Creation Time of a file remains permanent, regardless whether the file was duplicated, saved as, cloned or recovered. The Modified timestamp is the same as given in the finder. The file Size (in Bytes) must always be a multiple of 4096.

Files
Old: bps_Email.fp7
New: bps_Email.fp7
Path
Users/
winfried/
Desktop/
BPS/
1.0/
bps_Email.fp7
Users/
winfried/
Desktop/
BPS/
3.0/
bps_Email.fp7
Creation Time
2003-11-07 07:17:58
2003-11-07 07:17:58
Modified
2010-06-02 22:54:02
2010-04-21 01:16:22
Size
864 KB (884736 Byte)
1.1 MB (1171456 Byte)

Use Counts

The FileMaker and OS version counts the file was opened with. Please note that simply opening and closing a file without any kind of modification does not increase the counter.

Used with
FileMaker Version
Count
FileMaker Version
Count
Developer 7.0v1
35
Developer 7.0v1
35
Pro 7.0v1
2
Pro 7.0v1
2
ProAdvanced 8.0v1
263
ProAdvanced 8.0v1
263
Developer 7.0v3
110
Developer 7.0v3
112
Server 7.0
1
Server 7.0
1
ProAdvanced 11.0v1
1
ProAdvanced 8.5v1
18
ProAdvanced 9.0v1
53
ProAdvanced 10.0v1
82
Pro 10.0v1
5
ProAdvanced 10.0v3
4
ProAdvanced 11.0v1
37
Pro 11.0v1
7
Used with
OS Version
Count
OS Version
Count
Windows
2
Windows
2
Windows 2000
24
Windows 2000
24
Mac PPC 10.2.8
2
Mac PPC 10.2.8
2
Mac PPC
10
Mac PPC
10
Windows XP
109
Windows XP
109
Mac PPC 10.3.9
135
Mac PPC 10.3.9
135
Mac PPC 10.4.2
17
Mac PPC 10.4.2
17
Mac PPC 10.3.8
122
Mac PPC 10.3.8
122
Mac Intel 10.6.3
1
Mac PPC 10.4.6
11
Mac Intel 10.4.9
61
Mac PPC 10.4.9
1
Mac Intel 10.5.4
60
Mac Intel 10.4.11
14
Mac Intel 10.5.5
8
Mac Intel 10.5.6
5
Mac Intel 10.5.8
48

Result

In case there are no errors or warnings:

No apparent errors or warnings.

Errors

Problems with the file will be reported here (and possibly no further difference reporting will take place).

Errors (indicates some kind of damage)
Block 2172 has wrong link to previous block.
Orphaned blocks: 622-721, 723-727, 729, 730

What are "Orphaned blocks"?

FileMaker files are divided in blocks (elsewhere called "pages") of 4 kB. All blocks belong to one of three linked lists and are either free, contain the internal "table of contents", or are used for the structure and data. Orphaned blocks may appear under certain circumstances.

The main reason is testing a file while it is in use by FileMaker. Since FileMaker keeps elements being modified in a separate cache, the file is not complete or links between blocks are not yet updated. The same thing happens when a file is copied or backed up while in use.

As a conclusion, life copies of FileMaker files in use are worthless. Only closed files can safely be backed up or copied. The way to go is to use FileMaker Server and only to keep copies of the backups produced by FileMaker Server, while excluding the life files.

Other reasons may be not properly closed files or file damages.

Severe Error:

Errors (indicates some kind of damage)
Severe format error prevented complete file traversal.
File traversal stopped due to fatal error in other file.
Illegal ID sequence in block 7.
Database structure truncated in block 1.
Warnings
Traversal was stopped in block 12.

You may just check a file for corruption with a specific procedure. Read how to test a file for corruption

Warnings

Here you can tell how many times a file has been recovered. Unless you have the complete recover.log history and it shows no errors or data losses, you can't trust the file. In real life this means you never can trust a recovered file.

Warnings
File was recovered 1 times on Mac OS (Intel).

Modifications Overview

Changes within the file with direct links to the sections

Global Settings

Window positions zoomed and un-zoomed, onOpen and onClose scripts, default password...

Global Settings
Window Settings
ID #"06"
currBounds
{top: 0, left: 0, bottom: 690, right: 911}
{top: 1, left: 1, bottom: 691, right: 912}
prevBounds
{top: 0, left: 0, bottom: 753, right: 1067}
{top: 1, left: 1, bottom: 690, right: 912}
Language Dictionary
ID #"0B"
dictionary
--
2 entries
[0]
filemac:/ Mac Heinz/Applications/FileMaker Pro 10 Advanced/Extensions/Dictionaries/UKENGLSH.MPR
:usenglsh.mpr
[1]
:/ Mac Heinz/Applications/FileMaker Pro 10 Advanced/FileMaker Pro Advanced.app/Contents/MacOS/
:/MacProHD/Applications/FileMaker 10 Adv v3/FileMaker Pro Advanced.app/Contents/MacOS/
Default Locale
ID #"0D"
daysAbbr
"So", "Mo", "Di", "Mi", "Do", "Fr", "Sa"
"Son", "Mon", "Die", "Mit", "Don", "Fre", "Sam"
File Options
ID #"18"
options
asianLineBreaking, romanLineBreaking, smartQuotes, useFileSettings
asianLineBreaking, romanLineBreaking, smartQuotes, useSystemSettings
onOpenScript
» Fenster ausblenden
--
Account Settings
ID #"01"
DefaultPassword
x
--
DefaultAccountName
x
Admin

Base Tables, Fields, Table Occurrences

The Tables section lists the Base Tables, their Table Occurrences and Fields. For every Field more details are listed.
Please note: TO, Field, and other names are shown for elements within the same file only. To see names from related files, a folder comparison must be done.

Base Table “Sales Orders”
ID #"8001"
RecordsChangeCount
498
617

With the Base Tables the Record Change Count is shown, which is an accumulation of all data modifications. This provides a clue about the usage of each table.
Please note: The Base Table IDs cannot be retrieved with any FileMaker Function. TableIDs ( fileName ) returns TableOccurrence IDs, not BaseTable IDs.

Field “Invoice ID”
ID #"01"
nextAutoEnterValue
2
31
modifications
22
24
Field “Bill To Name”
ID #"02"
indexLanguage
Not assigned
English
autoEnterOptions
useAutoEnterCalculation, replaceExistingValue
calculation
--
Contacts Bill To::Full Name
modifications
14
15
Field “Bill To Street”
ID #"07"
indexLanguage
Not assigned
English
calculation
Case( Sales Orders::Bill To Name = Contacts Bill To::Full Name; Contacts Bill To::Street 1; 1; "" )
Contacts Bill To::Street 1
modifications
14
15
Field “Product Unit Price”
ID #"2A"
Field “Product Extended Amount”
ID #"2B"
Field “Subtotal”
ID #"2C"
storageOptions
doNotStoreResults
calculation
Sum( Sales Orders::Product Extended Amount )
Sum( Line Items::Amount )
calcModifications
3
4
modifications
13
14
Field “Sales Tax Rate”
ID #"2D"
autoEnterOptions
useAutoEnterCalculation
calculation
--
Contacts Bill To::Tax Rate
nextAutoEnterValue
--
1
modifications
12
13
Field “Weight”
ID #"3B"
storageOptions
doNotStoreResults
calculation
Sum( Sales Orders::Product Weight; Sales Orders::Product Weight[2]; Sales Orders::Product Weight[3]; Sales Orders::Product Weight[4]; Sales Orders::Product Weight[5]; Sales Orders::Product Weight[6]; Sales Orders::Product Weight[7]; Sales Orders::Product Weight[8] )
Sum( Line Items::Product Weight )
calcModifications
2
3
modifications
14
15
Field “Product Weight”
ID #"75"
Field “Ship To Contact ID”
ID #"76"
Field “ShipDateLabel”
ID #"78"
Table Occurrence “Sales Orders”
ID #"D00001"
Occurrence.Bounds
{top: 20.0, left: 20.0, width: 131.0, height: 142.0}
{top: 20.0, left: 14.0, width: 131.0, height: 310.0}
modifications
36
58
Relation 1
R1: ​Sales Orders Inventory ​
R11: ​Sales Orders Contacts ​Bill To ​
2
R2: Sales Orders ↔ Contacts Bill To
3
R3: Sales Orders ↔ Contacts Ship To
R3: Sales Orders ↔ Contacts Ship To
4
R4: Sales Orders ↔ Sales One Record
R4: Sales Orders ↔ Sales One Record
5
R5: Sales Orders ↔ Contacts One
R5: Sales Orders ↔ Contacts One
6
R6: Sales Orders ↔ Sales Inventory ID
R6: Sales Orders ↔ Sales Inventory ID
7
R7: Line Items ↔ Sales Orders
Table Occurrence “Sales One Record”
ID #"D00006"
Occurrence.Bounds
{top: 236.0, left: 273.0, width: 162.0, height: 36.0}
{top: 265.0, left: 88.0, width: 179.0, height: 36.0}
modifications
12
17

Layouts

Layout “Liste”
ID #"01"
modifications
--
11
Layout “Copyright”
ID #"02"
modifications
--
2
Layout “EU_States”
ID #"03"

Custom Functions

Custom Function “nocr”
ID #"01"
Name
mailencode
nocr
Parameters
name
s
calculation
Case( PatternCount( name; "ä" ) + PatternCount( name; "ö" ) + PatternCount( name; "ü" ) + PatternCount( name; "ø" ) + PatternCount( name; "ß" ) + PatternCount( name; "Ä" ) + PatternCount( name; "Ö" ) + PatternCount( name; "Ü" ) + PatternCount( name; "Ø" ) + PatternCount( name; "á" ) + PatternCount( name; "à" ) + PatternCount( name; "Á" ) + PatternCount( name; "À" ) + PatternCount( name; "é" ) + PatternCount( name; "è" ) + PatternCount( name; "É" ) + PatternCount( name; "È" ) + PatternCount( name; "ó" ) + PatternCount( name; "Ó" ) + PatternCount( name; "ò" ) + PatternCount( name; "Ò" ) + PatternCount( name; "ú" ) + PatternCount( name; "Ú" ) + PatternCount( name; "ù" ) + PatternCount( name; "Ù" ); Substitute( name; ["ä"; "=E4"]; ["ö"; "=F6"]; ["ü"; "=FC"]; ["ø"; "=F8"]; ["ß"; "=DF"]; ["Ä"; "=C4"]; ["Ö"; "=D6"]; ["Ü"; "=DC"]; ["Ø"; "=D8"]; ["á"; "=E1"]; ["à"; "=E0"]; ["Á"; "=C1"]; ["À"; "=C0"]; ["é"; "=E9"]; ["è"; "=E8"]; ["É"; "=C9"]; ["È"; "=C8"]; ["ó"; "=F3"]; ["O"; "=D3"]; ["ò"; "=F2"]; ["Ò"; "=D2"]; ["ú"; "=FA"]; ["Ú"; "=DA"]; ["ù"; "=F9"]; ["Ù"; "=D9"]; [" "; "_"] ); 1; name )
Trim( Substitute( s; ¶; " " ) )
modifications
--
1

Scripts

Script “ » Fenster ausblenden”
ID #"02"
modifications
--
1
1
Go to Layout[ “Copyright” ]
Go to Layout[ “Copyright” ]
2
Adjust Window[ Hide ]
Adjust Window[ Hide ]
3
Re-Login[ Account Name: "Admin" ]
Script “sort nach Vorwahl”
ID #"06"
1
Sort Records[ Specified Sort Order: Huslik Laender::Vorwahl ascending, Huslik Laender::Land de ascending ] [ No dialog; Restore ]
Sort Records[ Specified Sort Order: Huslik Länder::Vorwahl ascending, Huslik Länder::Land de ascending ] [ No dialog; Restore ]
2
Go to Record/Request/Page[ First ]
Go to Record/Request/Page[ First ]
Script “Import normal text file”
ID #"08"
Name
import
Import normal text file
modifications
1
3
1
Import Records[ ]
Import Records[ Source: file: data.txt ; Target: listData ; Method: Matching names; Character Set: Unicode (UFT-8) ; Field Mapping: Source field 1 import to listData::Name, Source field 2 import to listData::Address ​] [ Profile - Data Type: Tab-Separated Text ] [ No dialog ] ​

Accounts

Account “[Guest]”
ID #"01"
AccountHash
[16 bytes]
[16 bytes]
AccountSettingsHash
[42 bytes]
[34 bytes]
Account “Admin”
ID #"03"
Name
y
Admin
AccountHash
[16 bytes]
[16 bytes]
AccountSettingsHash
[53 bytes]
[37 bytes]
AccountSettings
[9 bytes]
[9 bytes]
Account “x”
ID #"04"

Privileges

Privilege “[Read-Only Access]”
ID #"03"
Name
[Nur Lesezugriff]
[Read-Only Access]
PrivilegeSetHash
[16 bytes]
[16 bytes]
Privilege “user”
ID #"04"
Extended Privilege “fmapp”
ID #"03"
ExtPrivilegeFlags
--
[2 bytes]
ExtPrivilegeHash
[16 bytes]
[16 bytes]
modifications
--
1

Extended Privileges

Extended Privilege “fmxml”
ID #"05"
Extended Privilege “fmxslt”
ID #"06"
Extended Privilege “fmphp”
ID #"07"

Fonts

Font “Arial”
ID #"0003"
Font “MS Sans Serif”
ID #"0004"

Graphics

Graphic “1: 45 ⨉ 32”
ID #"01"
Graphic “3: 45 ⨉ 32”
ID #"03"
External Data Source “fmcMailings”
ID #"01"
External Data Source “fmcMailsSent”
ID #"02"

External Data Source

Value Lists

The Value Lists section reports all custom values that have been changed.

Custom Menu Sets

Custom Menu Set “MenuSet 1”
ID #"03"
modifications
2
3
Menu 1
FileMaker Pro Copy
FileMaker Pro Copy
2
File Copy

Custom Menus

Custom Menu “Edit Copy”
ID #"03"
MenuItem 1
"Undo"; ​Platforms: Macintosh, Windows; Command: Undo ​
"MenuItem49320"; ​Platforms: Macintosh, Windows; Command: MenuItem49320 ​
2
"MenuItem49321"; Platforms: Macintosh, Windows; Command: MenuItem49321
3
4
"Cut"; Platforms: Macintosh, Windows; Command: Cut
"Cut"; Platforms: Macintosh, Windows; Command: Cut
5
"Copy"; Platforms: Macintosh, Windows; Command: Copy
"Copy"; Platforms: Macintosh, Windows; Command: Copy
6
"Paste"; Platforms: Macintosh, Windows; Command: Paste
"Paste"; Platforms: Macintosh, Windows; Command: Paste
7
"Paste Special…"; Platform: Windows; Command: Paste Special…
"Paste Special…"; Platform: Windows; Command: Paste Special…
8
"Clear"; Platforms: Macintosh, Windows; Command: Clear
"Clear"; Platforms: Macintosh, Windows; Command: Clear
9
10
"Select All"; Platforms: Macintosh, Windows; Command: Select All
"Select All"; Platforms: Macintosh, Windows; Command: Select All
11
12
Submenu
Submenu
13
Submenu
Submenu
14
15
Submenu
Submenu
16
17
"Export Field Contents…"; Platforms: Macintosh, Windows; Command: Export Field Contents…
"Export Field Contents…"; Platforms: Macintosh, Windows; Command: Export Field Contents…
18
19
Submenu ​
"Preferences ​"; Platform: Windows; Script: S_21; Command: Preferences ​
20
"Preferences…"; Platform: Windows; Script: import AB selection; Command: Preferences…

Relationship

Relationship “⨝2: RepairService ↔ timeTable”
ID #"02"
Name
⨝2: Recipients ↔ MailsSent
⨝2: RepairService ↔ timeTable
Tables.LeftTable
Recipients
RepairService
RightTable
MailsSent
timeTable
RightSort
--
0 entries
LeftSort
--
0 entries
Flags
allowCreationRight
Predicate 1
Recipients::uid ​= MailsSent::pid ​
RepairService::uid ​= timeTable::pid ​
End of Report

Download a complete FMDiff report (44 kByte) as html file.

Provided with this information you can tell:

With FMDiff you can prove a FileMaker file is in good shape, has not been modified - or in case it has, where.


Any information about FMDiff and FMVis is subject to change without notice.

© 2005 - 2015 Winfried Huslik †. © 2017 Jürgen Geßwein. All Rights Reserved. FMDiff and FMVis are trademarks of Jürgen Geßwein, Augsburg, Germany. FileMaker is a trademark of FileMaker Inc., Santa Clara, CA, USA. Other trademarks mentioned are property of their respective owners. This web site has not been authorised, sponsored, or otherwise approved by FileMaker, Inc.