Can't pass array function result as parameter

Jerry Daniels jerry at daniels-mara.com
Sun Apr 2 01:12:59 EST 2006


James,

Just saw this. We'll take a look at why we're not catching this.

Best,

Jerry Daniels


-------------- next part --------------


Artists, Consultants & Developers
http://www.daniels-mara.com/art
http://www.daniels-mara.com/products
http://www.daniels-mara.com

Voice: 512.879.6286
Skype: jerry.daniels



On Apr 1, 2006, at 10:40 AM, James Spencer wrote:

>
> On Apr 1, 2006, at 3:25 AM, David Burgun wrote:
>
>> There's really no need to copy it entry by entry, you can just  
>> copy the whole array as in:
>>
>> put LibGetArray() into myArray1
>>
>> put LibAnotherFunction(myArray1) into myArray2  --Here you could  
>> put it back into Array1
>>
>> I do this all the time.
>>
>> What you can't do is this:
>>
>> put LibAnotherFunction (LibGetArray()) into myArrayX
>
> Just to bring this full circle, I finally figured out what was  
> going on.  I'm going to take the time to sum up what I figured out  
> because it may save someone else some frustration.
>
> Background:
> Being more specific than I have been, I am testing for someone else  
> a library of routines for accessing a MySQL database, something  
> similar to Blue Mango's libDatabase (it's not mine which is why  
> I've been a little careful about including any code from the  
> library here).  The test involves a simple database containing  
> records of books, things like Title, Author, ISBN, etc.  I was  
> trying to get a record (representing a single book) from a  
> database, modify it and then insert the modified record back into  
> the database as a new record.  The call to insert the record into  
> the database was failing silently.
>
> My original problem:
> In my code, I was doing exactly what Dave suggests above.  I called  
> the equivalent of LibGetArray(), specifically calling a library  
> function which returned the current record in the form of an array  
> where each element of the array is a field of the record.  I was  
> putting this array into a local variable as Dave suggests above and  
> the debugger showed that the local variable correctly contained a  
> valid array.  I then modified one element, the title of the book,  
> in the array (in the local variable) and then passed the local  
> variable to the equivalent of LibAnotherFunction(), specifically a  
> handler which inserts a record in the database with the values  
> contained in the array passed to it.  My specific code which was  
> failing:
>
> on mouseUp
>
>     -- duplicates the current record in the database, appending
>     -- "(DUPLICATE)" to the book title.
>
>     local tRecordSet, tCurrentRecord, tTitle
>     local tErrorNo,tErrorString
>
>     try
> 	-- cRecordSet is a custom property containing a reference to
> 	-- to the current database "cursor", i.e. a set of records
> 	-- from the database
>         put the cRecordSet of this stack into tRecordSet
> 	
> 	-- the following puts the current record data into a
> 	-- Rev array using the database column names as the indices
>         put dbGetRecordData(tRecordSet) into tCurrentRecord
>
>         -- alter the title so we can see this is a duplicate book
>         put tCurrentRecord["Title"] into tTitle
>         put "(DUPLICATE)" after tTitle
>         put tTitle into tCurrentRecord["Title"]
>
> 	-- dbInsert expects the name of a MySQL table and a Rev
> 	-- array containing the new record data, indexed by
> 	-- database column names.  This fails
>         dbInsert "books", tCurrentRecord
>
>         -- code to update the display omitted
>
>     catch pException
> 	-- the above fails silently: we never catch an error here
>         put item 1 of line 1 of pException into tErrorNo
>         put item 2 of line 1 of pException into tErrorString
>         answer "ERROR: Unable to copy the book.  Error = " &  
> tErrorNo & \
>                 " (" & tErrorString & ")!"
>     end try
>
> end mouseUp
>
> What made this VERY frustrating was that I would walk through the  
> above code and step into dbInsert in the debugger and what it  
> showed was that tCurrentRecord was correctly being set by  
> dbGetRecordData, the Title of the book was correctly getting  
> changed in tCurrentRecord and tCurrentRecord was valid in the line  
> calling dbInsert but in dbInsert, the second parameter was showing  
> in the debugger as empty.
>
> The solution:
> In the end, the problem was NOT with the array passing but rather  
> three unrelated bugs.
>
> The first arose because I was using Constellation's debugger and  
> variable display.  There is apparently a minor bug in how it shows  
> arrays passed as  parameters: in dbInsert it was showing the second  
> parameter as empty even though I knew I was passing a valid array.   
> In fact, while Constellation's display showed the parameter as  
> empty, Rev's variable watcher, which I finally opened this morning,  
> shows that the parameter is valid containing exactly what I passed.
>
> The other two bugs are related and I'm not sure if they are in the  
> library I'm testing or in the Rev database library.  First, some of  
> the elements in the array returned from dbGetCurrentRecord were  
> empty and I was passing those empty elements back to dbInsert.   
> This causes the insertion to fail with a MySQL syntax error,  
> although I haven't completely figured out why.  Whatever, just to  
> complete the perfect storm, dbInsert has a bug in that it looks for  
> "revdberr" in the result of the SQL command which did the insert  
> and as the error returned by MySQL did not contain this, no error  
> was being thrown.
>
> Bottom line is that at this point, as I already discovered by  
> happenstance, my code works by copying the array element by element  
> checking that the element is not empty (I suppose I could also  
> simply delete the empty elements from tCurrentRecord), and I will  
> report the minor bugs that I found to both Constellation and the  
> library author.
>
> Thank you all for your help in working this out.
>
> Spence
>
> James P. Spencer
> Rochester, MN
>
> jspencer78 at mac.com
>
> "Badges??  We don't need no stinkin badges!"
>
> _______________________________________________
> 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