[fpc-pascal] Master Detail relationship in SQLdb

John jszcmpr at netspace.net.au
Thu Jul 12 16:18:41 CEST 2007


I have a table structured like this:

ref     (integer) (value generated by a sequence) (also Primary Key)
par_ref (integer)
name    (varchar)
<other fields>

I am using it as a two level look-up list of values.  Top level entries 
have a par_ref of 0, next level entries have a par_ref that points to 
the ref of a top_level entry.  The app does not allow further levels (at 
this stage).

The master SQLQuery that has something like:

select * from mytable where par_ref = 0 order by name;

Works fine, (including updating with my own update queries)

The slave query has:
 
select * from  mytable where par_ref = :PRef order by name;

I have an on_scroll event on the master table that sets the value of the 
PRef parameter.  (I asked a question about this previously)

This also works ... except that it returns rubbish values for 'ref'  - 
9-digit numbers instead of numbers like 6 or 8 that they should be.  
(Absolutely no way they are real numbers from wrong records).  This 
means, of course, that in the update query, (update ... where ref = 
:ref) nothing happens, because no records match the ref parameter 
value.  However, if I replace the :PRef by a real number (eg 5), I get 
sensible ref values, so it seems to be associated with the parameter.  
Yet the parameter value DOES select the correct records, so it must be 
basically working.

I have tried tracing this through (thanks for the help on getting that 
to work) but can't find anything wrong.  (Most of the values I really 
want to check are properties, so I can't get their values).  Does anyone 
have any ideas ?

Another question (sort of related)

The only way I have been able to get the query to 'read' the new 
parameter value is to close and reopen the query.  Should this be so ?  
This means it unprepares and then re-prepares the (same) query, 
reallocates all the fields...  Is there not some way of just 
re-executing the same prepared query with the new bound value(s) ? 

(I guess it means I could work around my problem by just modifying the 
sql text each time, as I would have no additional overhead, but it seems 
the "wrong way" to go about it!)


thanks,
John



More information about the fpc-pascal mailing list