[Valentina][VSDK] M:M problems

Eric Forget forgete at cafederic.com
Tue Jan 21 00:27:42 CST 2003


>> on 1/21/03 12:31 AM, Eric Forget at forgete at cafederic.com wrote:
>> 
>>>> I have ask look into SQL.pdf for correct names of functions,
>>>> I just do not remember.
>>>> 
>>>> Okay, I have look inside, and I see that we have made in Valentina
>>>>       << and >> operators
>>>>   
>>>> So at least must be
>>>> 
>>>>   mGP.SetMethod( "BitAnd(mGroupPtr << 32), mPersonPtr" );
>>>> 
>>>> And now we need find how correctly do bit AND ...
>>>> Ops. I do not see function for this...
>>>> Okay I need add them.
>>>> 
>>>> But it seems you can simply use +
>>>> 
>>>> 
>>>>   mGP.SetMethod( "(mGroupPtr << 32) + mPersonPtr" );
>>> 
>>> Unfortunately, it still doesn't work. Are you sure it is the class member we
>>> put there and not the column name? Sorry if it looks naïve, but I really
>>> don't understand how it works...
>> 
>> Do you work on MAC or Windows ?
>> If on MAC, you can take VAPP and play with methods.
> 
> I'm on Mac OS X. I've tried to look at it with VAPP and ViSQL.
> 
> With VAPP in Developer mode I see the 3 tables, but in Browser mode the
> GroupPerson disapear from the popup. It was there before I've added the
> virtual field.
> 
> With ViSQL I see the 3 tables but not the calculated column...
> 
>> Eric, we simply try create virtual calculated field
>> To be COMPOUND of 2 first.
>> 
>> Look, let you have f1 and f2 fields in table as ULONG.
>> Now you can create f3 with method "f1 + f2"
>> 
>> So you get 
>> 
>>   f1          f2          f3
>>   ----------------------------
>>   1           1           2
>>   1           5           6
>>   4           9           13
>> 
>> You see, f3 is not stored on disk, it is calculated on the fly by formula.
>> 
>> I think problem is that you have ObjectPtr fields.
>> I recall that we need wrap them at first my ULONG BaseObject methods.
>> 
>> So we need simply add 2 more BaseObject methods which are NOT indexed.
>> 
>> 
>> class CGroupPerson : public VDK_BaseObject
>> {
>> public:
>>    VDK_ObjectPtr        mGroupPtr;
>>    VDK_ObjectPtr        mPersonPtr;
>>   
>>   VDK_ULONG             mG;
>>   VDK_ULONG             mP;
>> 
>>    VDK_ULLONG           mGP;
>> 
>> public:
>>   CGroupPerson ()
>>        :    VDK_BaseObject( "GroupPerson" ),
>>             mGroupPtr( "GroupPtr", NULL, kFBL_CASCADE ),
>>             mPersonPtr( "PersonPtr", NULL, kFBL_CASCADE )
>>             mG( "mG" ),
>>             mP( "mP" ),
>>             mGP( "GP", fUnique )
>>  {
>>        // next call make field to be calculated
>>        mG.SetMethod("GroupPtr"); // now mg = GroupPtr, but has type ulong
>>        mP.SetMethod("PersonPtr");
>> 
>>        mGP.SetMethod( "(mg << 32) + mp" ); // case insensitive, btw
>>    }
>> };
>> 
>> I have check here, formula on ULONG fields works correctly.
> 
> I've still have the same error. Maybe the cast in VDK_ULong doesn't work?

I finally made some progress. However read the following...

1) I didn't called the SetPointedObject() on mGroupPtr and mPersonPtr...

2) The mG and mP are useless (I means it may work without them).

3) VDK_ULLong doesn't support fUnique when you specify a method (oops!!).
But it works when you do not specify a method. Check with your VAPP! It
looks like it doesn't work for about any type (even VDK_String).

4) However, if you change, on the fly from one type to another (again try it
in VAAP): e.g. VDK_ULLong to VDK_Llong (or the reverse) it starts to work.

BTW, I'm using your latest non beta version of both VAPP and VSDK...

Thanks for your help!

Éric

___________________________________________________________________

 Eric Forget                       Cafederic
 ForgetE at cafederic.com             <http://www.cafederic.com/>

 Fingerprint <86D5 38F5 E1FD 5D9C 71C3  BAA3 797E 70A4 6210 C684>




More information about the Valentina mailing list