Making the move...
Geoff Canyon
gcanyon at inspiredlogic.com
Wed Mar 22 03:31:49 EST 2006
First, this isn't all that long -- 98 lines -- but in any case I'd
consider:
-- breaking out routines for local vs. server connection
-- breaking out a routine for when we're just counting records that
match vs. returning data
-- breaking out a routine that, given a itemList describing a set
of fields, returns the data from those fields
Some of the rest I'm still not clear on, so it's hard to say.
As I said, more art than science, but to me a routine like this is
more than five times as difficult to understand/debug/manage than the
five twenty line routines that might replace it.
Not that I haven't written my fair share of these ;-)
regards,
Geoff
On Mar 21, 2006, at 11:59 AM, Rob Cozens wrote:
> Hi Geoff ,
>
>> Wow -- so what does this do?
>>
>
> From Serendipity Reference:
>
> >>
>
> The findSDBRecord command checks for the existence & locked/
> unlocked status of a record with the record type and key specified
> in line 1 of sdbBuffer. It can also be used to unlock a record
> that was previously locked but not changed or to return a count of
> the number of records with certain field contents.
>
> findSDBRecord is undoubtedly the most complex, but also the most
> powerful, SDB command. It is the only SDB command that will
> retrieve information from multiple records in a single call. As
> such, it is ideally suited to retrieve specified fields from a
> range of records for reporting or analysis.
>
> exactKey (boolean) defaults to true, in which case findSDBRecord
> returns card id "0" if the exact key is not in the database;
> otherwise findSDBRecord will return the id for the record with the
> closest higher key of the specified record type.
>
> If fieldDelimiter is empty findSDBRecord simply returns the
> Revolution card id of the record in word 4 of the result. If
> fieldDelimiter is not empty, itemList contains a list of field
> references (one per line) to retrieve. A field reference can take
> two forms:
>
> * a number that resolves to the field's ordinal position in the
> record (0 = the record key)
> * an SDB field reference ([Record Type]&":"&[dataname]), which the
> SDB handlers will resolve to a field ordinal.
>
> These two forms of reference can be used interchangably EXCEPT for
> record types that have no Dictionary definition in the database.
>
> findSDBRecord then puts a delimited list of the contents of the
> fields into lines 2 to -1 of sdbBuffer.
>
> setPosition (boolean) defaults to true.
>
> unlockRecord (boolean) defaults to false. If true and the record
> was locked by this user, it will be removed from the locked record
> table.
>
> findSDBRecord can be passed search criteria that must be met before
> a record is retrieved, and instructed to search forward or backward
> from the key if the key's record does not meet the search criteria
> until the first acceptable record is found.
>
> searchForward (boolean) determines search direction; default is
> true (forward).
>
> searchCriteria contains one or more lines in the following format:
> -- field reference,test,target,and/or
> * field reference is the field's ordinal or Data Dictionary name,
> as defibed above.
> * tests: "=" ,"<>" ,"in", "not in", "<", ">", "<=", or ">="
> * target is the result to which the item is to be compared; it must
> be a value, not a reference to another field in the record
> * "and" or "or" is not needed on last line of search criteria
>
> Example search criteria (assumes the field is defined in Record
> Type, "TYPE" as dataname "department"):
> "TYPE:department",>,21,and
> "TYPE:department",<,34
> Selects only records where the value of field "department" is
> between 22 and 33.
>
> If cutoffKey is not empty, findSDBRecord will discontinue the
> search when it encounters a record with a key > cutoffKey if
> searching forward or < cutoffKey if searching backward; otherwise
> the search will end with the first matching record if
> recordDelimiter is empty or the last/first record if it is not.
>
> If recordDelimiter is empty, findSDBRecord returns information for
> the first matching record it encounters. If recordDelimiter is not
> empty, findSDBRecord puts empty into sdbBuffer and returns the
> number of records matching the search criteria in word four of the
> rersult if the fieldDelimiter is empty; otherwise it returns the
> information for each matching record found between the key passed
> in sdbBuffer and cutoffKey or the last/first record of the
> specified record type. This information will be found in lines 2
> to -1 of sdbBuffer. (The recordDelimiter is used to delimit
> individual records.)
>
> Note that findSDBRecord will return a locked record error if the
> record exists but is locked by another user.
>
> <<
>
> Rob Cozens
> CCW, Serendipity Software Company
>
> "And I, which was two fooles, do so grow three;
> Who are a little wise, the best fooles bee."
>
> from "The Triple Foole" by John Donne (1572-1631)
>
> _______________________________________________
> use-revolution mailing list
> use-revolution at lists.runrev.com
> Please visit this url to subscribe, unsubscribe and manage your
> subscription preferences:
> http://lists.runrev.com/mailman/listinfo/use-revolution
>
More information about the use-livecode
mailing list