Friday, October 07, 2005

BU JShop via Script

Drop the following code in a PHP file, upload it to the top level of a JShop running on Linux, and execute it via the browser. It will create a tarball including the JShop files and MySQL data for downloading:

//Code to BU a JShop in place - all shop files and MySQL data
//----------------------------------------------------------------------
//INSTRUCTIONS
//----------------------------------------------------------------------
//Drop this file into the top level of a JShop installation on Linux and call
//it via the web
//This file itself will be deleted at the end as a security measure
//The names of the backup file to download will be output to your browser
//----------------------------------------------------------------------
echo "

Script to BU a JShop in place

";

//Let the script run as long as necessary
set_time_limit(0);

//Get the info about the DB, file system, etc.
include ("static/config.php");
global $jssShopFileSystem, $jssStoreWebDirHTTP, $databaseUsername,
$databasePassword, $databaseName, $databaseHost;

//Some variables
$date = date ("Ymd");
$name = str_replace("\\", "", str_replace("/", "", str_replace("http://",
"", $jssStoreWebDirHTTP)));
$siteTarball = "{$jssShopFileSystem}{$date}{$name}.tar.gz";
$sqlDumpName = "{$jssShopFileSystem}{$date}{$name}.sql";
$thisScriptFile = $jssShopFileSystem.substr($_SERVER['PHP_SELF'], 1);

//Do a MySQL dump
// "Q" option quotes the column names - very important in case you have a column name that
// is also a keyword
// "n" Do NOT add a "create DB" command - since a lot of our clients have the same name
// for the JSS DB, we don't want to import this on our local setup and overwrite existing
// data
// "no-create-info" do not create the tables. This is done with the first mysqldump. We do
// the creation separate from the dumping so that the tables that we don't want the data
// for (big, unneeded tables for local development) still have their tables created.
// "--add-locks" Surround each table dump with LOCK TABLES and UNLOCK TABLES statements.
// This results in faster inserts when the dump file is reloaded.

// "--create-options" - Include all MySQL-specific table options in the CREATE TABLE statements.
// Cristóbal - In some sites not works!!!

// "K" - For each table, surround the INSERT statements with
// /*!40000 ALTER TABLE tbl_name DISABLE KEYS */; and
// /*!40000 ALTER TABLE tbl_name ENABLE KEYS */; statements.
// This makes loading the dump file faster because the indexes are created after all rows
// are inserted. This option is effective for MyISAM tables only.
// "e" Extended Insert: Use multiple-row INSERT syntax that include several VALUES lists. This
// results in a smaller dump file and speeds up inserts when the file is reloaded.
// "l" Lock all tables before starting the dump. The tables are locked with READ LOCAL to allow
// concurrent inserts in the case of MyISAM tables. For transactional tables such as InnoDB and
// BDB, --single-transaction is a much better option, because it does not need to lock the tables
// at all.
// "q" Quick: This option is useful for dumping large tables. It forces mysqldump to retrieve
// rows for a table from the server a row at a time rather than retrieving the entire row set
// and buffering it in memory before writing it out.

// "--set-charset" Add SET NAMES default_character_set to the output. This option is enabled by
// default. To suppress the SET NAMES statement, use --skip-set-charset.
// Cristóbal - In some sites not works!!!


// "u" is user name, -p is password (no space between the command and the password - see docs), and
// "h" is host.

//runCmd ("mysqldump -Q -n --add-locks --create-options -K -e -l -q --set-charset -u $databaseUsername -p$databasePassword -h "."$databaseHost $databaseName > $sqlDumpName");
runCmd ("mysqldump -d -Q -n --add-locks -K -e -l -q -u $databaseUsername -p$databasePassword -h "."$databaseHost $databaseName > $sqlDumpName");
runCmd ("mysqldump -Q -n --no-create-info --add-locks -K -e -l -q -u $databaseUsername -p$databasePassword -h "."$databaseHost $databaseName --ignore-table=$databaseName.jss_logs --ignore-table=$databaseName.jss_carts --ignore-table=$databaseName.jss_carts_contents --ignore-table=$databaseName.jss_logs --ignore-table=$databaseName.amex_clickthroughs >> $sqlDumpName");
//runCmd ("mysqldump -Q -n --add-locks -K -e -l -q -u $databaseUsername -p$databasePassword -h "."$databaseHost $databaseName > $sqlDumpName");
//Make a tarball of the site files, including the sql dump, excluding the tarball itself
runCmd ("tar czvpf $siteTarball $sqlDumpName");
//Remove the MySQL dump
runCmd ("rm $sqlDumpName");
//Remove this script for security reasons
runCmd ("rm $thisScriptFile");

echo "
\r\n";
echo "

You can now download '$siteTarball', which includes the MySQL dump:


";
echo "

To save space, be sure to delete the file ".
"from the server after downloading them!!

";


function runCmd ($cmd) {
echo "------------
\r\n";
echo "About to exec: $cmd
\r\n";
//info on how to get the output of a command comes from the comments on
//http://www.php.net/manual/en/function.exec.php
exec("$cmd 2>&1", $output);
echo "Output is: ";
//Use print_r in case there are multiple lines in the output. Can happen
//if you e.g. add the "v" (verbose) argument to tar
print_r($output);
echo "
\r\n";
}

?>

Tuesday, September 27, 2005

Using pub/priv key w/ Modwest

I was never able to get the instructions from http://www.modwest.com/help/kb20-90.html to work. Here is the method I used to get things going...
NOTE: If you move to a new machine, and your old keys do not work, then simply follow the instructions below. Name of the public key file does not matter, since the CONTENTS of the file are the things that have to be added to the auth_keys files. Just make sure you don't overwrite the orginal contents of auth_keys, so you do not disturb existing users.

- download all putty tools from http://the.earth.li/~sgtatham/putty/latest/x86/putty.zip
- Unzip the contents into C:\bin (creating the folder if necessary)
- Create a C:\home folder
- Create a C:\home\.ssh folder. NOTE: You need to drop into the DOS command shell to create a folder starting with a period. (C:\> md C:\home\.ssh)
- Create a system enviornment variable HOME set to C:\home
- add C:\bin to you PATH system enviornment variable
- Launch C:\bin\PUTTYGEN.EXE
- Create a SSH2 DSA key, 1023 bits
- Do NOT add a passphrase
- Save the private key to C:\home\.ssh, giving it the name of the user account on the server where you're connecting (e.g. C:\home\.ssh\ctello2.ppk)
- Save the public key to C:\home\Public Keys\ctello2.pub
- Open C:\home\Public Keys\ctello2.pub, and modify it as follows...
* Remove the first two lines and the last line - leave only raw "goblygook" data
* Remove all the line feeds
* Add "ssh-dss " (Without quotes - NOTICE THE SPACE!!!) BEFORE the "goblygook" data
* Add " dsa-key-20050627" (Without quotes - NOTICE THE SPACE!!! - adjust the date) AFTER the "goblygook" data
- Now login to the remote system here and make sure in your home directory there is a subdirectory named: /.ssh (include the period '.' before the 'ssh'). You may need to create this directory. To see the file, you will need to type: ls -al
The .ssh directory should be chmod 700, which looks like this in the first column of a detailed file listing: -rwx------
If those are not the permissions on the .ssh dir, then set them by typing: chmod 700 .ssh
- If there are "/.ssh/authorized_keys" and "/.ssh/authorized_keys2" files, then just copy the contents of your "C:\home\Public Keys\ctello2.pub" file to BOTH "/.ssh/authorized_keys" and "/.ssh/authorized_keys2".
- If the files do not exist, copy your "authorized_keys" file 2x to the server, naming one "/.ssh/authorized_keys2" and the other "/.ssh/authorized_keys". Once the files are uploaded to the remote system, chmod 600 the two files (e.g. chmod 600 /.ssh/authorized_keys), which looks like this in the first column of a detailed file listing: -rw-------
- Run Putty
- Create a new connection with IP "shell.modwest.com", port 22, SSH
- Run C:\bin\PAGEANT.EXE - it will show up as an icon in the system tray
- Right click on the icon and select "add key"
- Select your private key (e.g. C:\home\.ssh\ctello2.ppk)
- Connect to the server - you should NOT be asked for the password
- Try using CVS - you should NOT be asked for a password

Checkout from CVS to web folder

No comments:
- CVS kind of forces us to check out to /htdocs/{projectname}/index.php instead of /htdocs/www/index.php. There might be a way around this (I'm sure there is), but we did not find it.
To work around that, we remove the symbolic link at Modwest that send everything to www, and put in a symbolic link pointing to {projectname}, so that www.oursite.com takes index.php from /htdocs/{projectname}/index.php. The commands we used to do this, using the {projectname} of e.g. myproj, were...
rm -f _
ln -s myproj _

- the cvs checkout command needs the -d option to specify where the CVSROOT dir is

- the cvs command needs to have the current directory set to the directory where checkout should occur.

- We wanted to force the checkout by calling a URL, therefore our first attempt was to write a PHP script like this...
passthru ("cd /htdocs");
passthru ("cvs -d /cvs myproj");
?>
...and put this in the /htdocs/myproj directory and call it via www.oursite.com/checkout.php. This failed, however, since the cvs command always used the php script directory instead of the directory specified in the cd command. Therefore, we wrote a shell script, checkoutCmd, and call the script.
passthru ("./checkoutCmd");
?>

- To make the checkoutCmd script, we did the following...
cd /htdocs/myproj
vi checkoutCmd
...and the script you create with vi is...
cd /htdocs
cvs -d /cvs myproj
...save the file, and do...
chmod 755 checkoutCmd
...and run it as follows...
./checkoutCmd

Checkout to the web serve folder can now be done via www.oursite.com/checkout.php

Saturday, September 10, 2005

New Machine Install

No comments:
Some of this software can be found on \\SERVER2003\Permanent\Software Depot
  • Araxis Merge (Software Depot - use serial number NOT reserved for Ed)
  • Allnetic time tracker
  • VS.NET 2003 (all options)
  • Visual Assist (\\server2003\Permanent\Software Depot\Utils\Visual Assist) - see the read me.
  • EasyPHP (http://www.easyphp.org/)- set up the files to be servered from a folder called "CVSData" in your "My Documents" folder.
  • TortoiseCVS (http://www.tortoisecvs.org/)
  • Office (the version that you DON'T have to register)
  • 7Zip (http://www.7-zip.org/). Winzip is also fine, but 7zip needed for shared Linux stuff
  • FileMaker Developer (Ed has CD)
  • Seagull FTP (look in internet)
  • WinSCP
  • Zend client & server (IMPORTANT!!! EasyPHP first. trial version to start)
  • Dreamweaver (trial version to start)
  • Putty and associated tools. See http://rocinantesoftware.blogspot.com/2005/09/using-pubpriv-key-w-modwest.html
  • Install “Send To Tools” from http://www.gabrieleponti.com/. If it’s not available there, there’s a version on \\server2003\Permanent\Software Depot\Utils
  • Cropper (screen dump utility)
  • UltraVNC
  • K-FTP (needed to build AmexImportExport) on Software Depot / utils / K-FTP
  • MySQL Connector/Net (formerly ByteFX - C# ADO.NET for MySQL)
  • Create a "FileMaker" DNS for ODBC (from the control panel). See FileMaker help for details. Increase max size setting to 1024.
  • Set up an FTP server for IIS. Also, make sure that the IIS server, if running, is NOT on Port 80 (80 needed for EasyPHP).
  • "Install" the 24U Simple Dialog plug in by following the instructions at \\server2003\Permanent\Software Depot\Plug-ins\24U Simple Dialog FM Plugin\readme.txt

Tuesday, August 23, 2005

PocketPC Sync Folder

No comments:
After doing a hard reset on the PocketPC, it can be difficult to get ActiveSync to use the SAME sharing name that was used before when creating a new Partnership. Here are some things that can help:
- Make sure you rename the old folder (e.g. {FOLDERNAME}BU) before the "create a new partnership" dialog comes up
- Delete the old partnership (since the desktop will recognize it as a new machine)
- To control the name of the folder, you have to control the name of the PocketPC. This can be set ON THE POCKET PC in settings / system / devide / about / DeviceID / Device Name
- Check the values in RegEdit of My Computer\HKEY_CURRENT_USER\Software\Microsoft\Windows CE Services\Partners
- Check the profiles which are stored in the folder specified by My Computer\HKEY_CURRENT_USER\Software\Microsoft\Windows CE Services\Partners\xxx\DataFolder

Wednesday, July 20, 2005

Inconsistent jss_combinations data

No comments:
"Bug" report sent to JShop on this date:

Client XXX uses attribute combinations to set the product code (i.e. code A1000 Black size 12 becomes A1000BLAC12). When they run out of a size, what they do is go into the admin area, go to "Extra Fields", "Size", and delete e.g. 12. However, the A1000BLAC12 stays in jss_combinations, and the e.g. extrafield1 now points to an extra field value which no longer exists.

In a perfect world, you could protect the data integrity by disallowing the deletion of an extra field if there are combinations (or other places) that refer to that extra field. Of course, there is always the point of view that the user would never understand what you were telling them if you STOPPED the action ;-<

Wednesday, July 06, 2005

Script Finding Empty Dates in FM

No comments:
- go to a layout where the field is available
- Insert Calculated Result [Select, "DateFieldName", "="]

Symbol Stuff

No comments:
- C# form size: 246x320
- Turn control box off on the form, otherwise closing with the "x" in the upper right will not allow Symbol to release all components, forcing a soft reboot between debugging sessions.

Monday, April 25, 2005

Apache Crashing

No comments:
I had a problem with Apache crashing on WinXP (using EasyPHP 1.7). It turns out that the "mail" function, if called without a message (i.e. passing an empty string as the message) crashes. I'm not sure if this is an apache problem, an IIS problem, or whatever - but it's a good thing to rememeber.

Thursday, April 14, 2005

CVS On Modwest

No comments:
ModWest documents CVS setup here. That works fine. They also tell you how to authenticate via public/private keypairs
here, but I was not able (so far) to get that to work.

No worries: I was able to use the latest TortoiseCVS to do a checkin, getting a lot of extra messsages and having to type my password a few times - nothing backbreaking for the current time. Settings are: :ext:snrygaard@shell.modest.com:/cvs

Wednesday, April 13, 2005

Simple Tar

No comments:
tarball on Linux
Create: tar cvzpf /tmp/destination.tar.gz /home/source
Extract:
- using the mv command, put the tarball in the folder where you want the new file or folder created (i.e. if you tarballed /home/source, and you now want a "source" folder in tmp, put the tarball on the top level of /tmp)
- tar -zxvf tarball.tar.gz


tarball on Windows

Create: use 7-zip. First create the tar file, and then gzip the result.

Monday, March 28, 2005

HTML/CSS: Eliminating Extra IE Form Space

No comments:
Using forms in IE adds spacing, which is normally not desired. To eliminate this, use the CSS "margin" style, like this:
<form name="bob" style="margin-bottom:0;margin-top:0" method="POST" action="whatever">

Sunday, March 20, 2005

FxCop on the Compact Framework

No comments:
To check the PocketPC barcode scanning applications I just wrote, I downloaded FxCop.

The first issue reported, the missing strong name, I addressed with the help of this article (actually, there are a lot of articles - but this one got me started quick). Also I needed to move the generated files into the same directory as my executables.

Some FxCop rules are not applicable in the compact framework. This article has more info, as does searching the related forums.

ToString generates a SpecifyIFormatProvider FxCop error. A good discussion of why can be found here. Quick solution: use ToString(CultureInfo.CurrentCulture) for things that users will see, and ToString(CultureInfo.InvariantCulture) for things that the need to be parsed by the computer in a cultural independent way.

Ha! After inventing Hungarian notation, Microsoft now has a rule against it! Since they don't provide justification for this change, and it seems like more of a style thing, I added my "hungies" to the FxCop "custom dictionary" - see their docs for details. This allows me to keep the GENERAL rule (no misspellings in the name) without having to stop using Hungarian notation.

Friday, February 25, 2005

EasyPHP Solution

No comments:
To run extensions from easyphp, you need to move all the dlls from the C:\PROGRA~1\EASYPH~2\php directory to the windows\system32 directory. You MAY also need to copy the files from C:\PROGRA~1\EASYPH~2\php\extensions to the same place. Symptom: starting EasyPHP says that the extension could not be found.

Of course, changing your path variable MAY also solve the problem, but I didn't try that.

Saturday, October 09, 2004

MySQL Log

No comments:
To get MySQL to log all it’s actions, turn on “log-bin” (see the MySQL documentation). To turn this on in EasyPHP, open the MySQL config file, add the line e.g. “set-variable=log-bin=C:\mysqllog\”, and restart MySQL. When you want to examine a file, MySQL will not let it go if in use, so you can restart MySQL so it switches to a new file, and then look at the old file.

Saturday, September 25, 2004

How to hide an HTML item

No comments:
style="display:none”. This worked perfect for a checkbox that I wanted to hide, but keep functioning.

Thursday, September 09, 2004

Regedit Permissions

No comments:

On Sunday night, I found out that my “registry hive” was corrupted, and attempts to fix this via the Microsoft Register Repair Utility, via Windows 2000 setup disk, etc. all failed. My reading afterwards turned up problems with the version of the RAID drivers that I was using for my S-ATA HD, which is the likely cause of the problem.

Carlos had something similar with his home computer recently, and finally did an install of Win2K over his old install. This worked OK for him, and the only problem was that he had to reinstall some applications.

However, I expected more data corruption due to the drivers, and didn’t want to continue with my existing data. My long term solution was to buy a Dell Inspiron 9100 w/ Dell financing. However, that will take some time to get here, so I decided to use my old HD (and IDE HD that was working in another machine before I got my new machine a month or two ago). This should keep me with a minimum of “fussing” time until the Dell gets here.

Then, the big problems started. I needed all kinds of new drivers for the HD (makes sense - it was used in a completly different machine). However, it was impossible to install anything - I kept getting a generic error message no matter what drivers I tried to install. Carlos to the rescue. It turns out that the problem was that my user account (in this case, administrator) did not have permission to change some registry values. No idea how I got into this situation, but the solution was to give “full control” to the registry path HKEY_LOCAL_MACHINE/SYSTEM/CURRENTCONTROLSET/ENUM/PCI. In XP, this can apparently be done w/ RegEdit. However, in Win2K, this must be done with RegEdt32. SALVATION - drivers could then be installed, and I could get back to work.

Thursday, September 02, 2004

Taking ModDate of portal records into consideration

No comments:
In FileMaker, how do you get the “real” modification date of a record, if it has related records. E.g. if you have a sale, which has a mod date field, and line items for that sale, the mod date for the sale itself does not get changed when the portal records get changed. Solution: Add a “mod date” field to the line items, and add a calc field (type date) to the main record which is something like: Max(Max(Product Line Items::Date Modified), Date Modified)

Monday, August 30, 2004

CSV Documentation

No comments:
For creating data feeds from products in an ecommerce store, CSV is the de facto standard that all the services use. However, the exact rules for CSV are only well documented in one spot that I found: here.

Wednesday, August 18, 2004

FileMaker via ActiveX in C#

No comments:

I had trouble finding documentation about Automating FileMaker from C# (using FM Developer 6), so I’ve written up some of my notes…

First, you have to “add reference”, going to the COM tab and selecting the FM type library. Hit the “Select” button, and then hit OK.

Add a “using FMPRO50Lib;” clause to the beginning of the file where you will be using FM Automation.

Here is the basic code to call a script in the active DB.

ApplicationClass fmApp = new ApplicationClass();
IFMIDocuments fmDocs = (IFMIDocuments) fmApp.Documents;
IFMIDocument fmDoc = (IFMIDocument)fmDocs.Active;
string strScriptName = "ReturnToApprovalRec";
fmDoc.DoFMScript (ref strScriptName);

To find a particular document, you will want to loop the open documents. NOTE: The name shown in the message box is the FULL PATH - you will have to dig the DB name out of there.

IEnumerator myEnum = fmDocs.GetEnumerator ();
while (myEnum.MoveNext ()) {
IFMIDocument myDoc = (IFMIDocument) myEnum.Current;
MessageBox.Show (myDoc.FullName);
}

To open a new DB, you would want to use IFMIDocuments.Open

There are not many things that you can automate (see the object browser), but at least the above outlines the things that CAN be done.

------------------------

Notes for 64 bit machines

There are a number of things that you have to be aware of when using FileMaker on a 64 bit machine

  • Filemaker help cannot be accessed until you install WinHlp32.exe. See http://www.microsoft.com/downloads/d...displaylang=en
  • The FileMaker ODBC driver setup must be done in a somewhat strange way. I found the solution here: http://postgresqldbnews.blogspot.com/2008/03/32-bit-odbc-drivers-in-vista-64.html. Short version: there are two versions of odbcad32.exe in the windows directory. Look for the version inside the syswow64 directory, and use that to set up 32 bit ODBC drivers.
  • AmImEx must be compiled in 32 bit mode for it to be able to access the FM ODBC driver
  • In Windows 7, I had the experience that the COM component for FileMaker was not installed even after FileMaker installed successfully. To fix this, search from "cmd.exe" in the start menu, right click on it and execute as administrator, cd (change directory) to the directory where FileMaker is installed, and execute
    "NameOfFilemaker.exe" /REGSERVER

Tuesday, August 17, 2004

HTML Link-Button

No comments:
To create an HTML button which is actually a link rather than a form submit, put the following OUTSIDE of a form area. <input type="submit" value="Checkout Now" class="button" onClick="document.location=’http://whatever’"></input>

MySQL Freeing Space

2 comments:
When you delete records in MySQL, the table is not compressed - the space is left free for future inserts. In order to see how much “claimed by not used” space you have, use “Show Table Status” (e.g. “show table status from jssdatabase), and check the “Data_free” column. To “compress” the DB, use “Optimize Table” (e.g. “optimize table jss_carts").

Monday, August 09, 2004

XP Woes

No comments:
I wasted beaucoup time over the last month with my XP Professional explorer “hanging” for minutes at a time. This happened in two main situations: when hitting the start menu key, and when right clicking on a folder. A google post finally tipped me off to the problem - the PGP service. Deinstalling PGP fixed the problem immediatly. Note sure if it was a free version I was using, but I saw on deinstall that the version number was 8.0.3.
NOTE: Upgrading to 8.1 fixed the problem. There are rumors (even though the source code for the 8.x version is published) that there are back doors in PGP for the government, but this appears to be only rumors. Phil Zimmerman (creator of PGP) says that all versions prior to 7.03 were free of back doors, but he does not know about later versions (he left the company).

What is my ip?

No comments:
Not sure what IP you’re connecting to the internet with? Try WhatIsMyIp.

Monday, August 02, 2004

.NET decimal issues

No comments:

so parsing would go like:
double dbl = double.Parse("1234.56″,
System.Globalization.CultureInfo.InvariantCulture);

And when you need to get your string from the double, you can do the
same thing in “reverse”:
string s =
dbl.ToString(System.Globalization.CultureInfo.InvariantCulture);

Saturday, June 12, 2004

JShop Server - Referring URL Notes

No comments:

Just did some research on Referring URLs, and thought I’d share what I found.

First, all the info below assumes that JSS is able to pick up the referring URL. This is not always the case, based on what browser is used, what other things the user has on their computer (e.g. Norton Internet Security http://www.symantec.com/sabu/nis/nis_pe/ can filter this out), and (I believe) how the server is set up. OK, the rest of the info assumes that JSS can pick up the referring URL.

To find what external links the customers are coming from…
- Go to Admin area / Log Section / General Options
- Set “Enable Visitor Logging” to “on”
- “Ignore Referrers From Reports” must include your site’s URL (see docs)
For visitors that arrive after this change, you can see what link they came from by going to admin / log section, check “Referring URL” in the “Select Reports” section, and then click on the “show reports” button. NOTE: “Direct/Unknown” are visitors that either type your URL directly, or cases where JSS is not able to pick up what the referring URL is.

To find out what orders come from a Referring URL, open admin / orders. Open up the details for an order (by clicking the order number in the column headed “Order"). At the bottom, you’ll find the “Referring Site” where the order came from.

NOTE: this info is only collected when creating a new shopping cart. To force a new shopping cart on your machine, clean out your existing cookies before clicking on the external link. I IE, you do this by going to the tools menu, Internet Options, general tab, and hitting the button “Delete cookies…”.

Wednesday, June 09, 2004

FileMaker - Opening Many DBs

No comments:

My FM client has password protection on his DBs, and I’ve spent a LOT of time typing this password over and over (and over and over) again for each DB that I need to access. Yesterday, I finally got sick enough of it to do something about it. The following steps assume that you have the same password for all DBs, but it may be possible with different passwords, too.
- Create a new password protected DB, with the password being the same that you need in the other DBs.
- In this new DB, create a script which opens the DBs that you need
- Open “Edit / Preferences / Document” and check the “Try Default Passord” checkbox, but do NOT enter the password.
- In this dialog, you also want to check the “Perform Script” checkbox, and indicate the script that you created to open the DBs.

Voilá - you only have to enter the password once to open all the DBs.

Friday, June 04, 2004

FileMaker - Report by Month

No comments:

I had the problem that I was trying to do a report by month, but the field that I was keying on had month, day, and year, so I was getting a breakdown by day. To breakdown by month, I introduced an unstored calculated field with a date result, using the formula

Date( Month(CalcDate), 1, Year(CalcDate))

…and keyed off that, instead.