diff --git a/harbour/ChangeLog b/harbour/ChangeLog index 4cfc514776..a72e6c5089 100644 --- a/harbour/ChangeLog +++ b/harbour/ChangeLog @@ -1,3 +1,8 @@ +2001-10-08 23:12 GMT+3 Alexander Kresin + ! source/rdd/dbf1.c + ! source/rdd/workarea.c + * relations implemented for RDD's, inherited from DBF ( DBFNTX AND DBFCDX ) + 2001-10-06 15:28 GMT+3 Alexander Kresin ! source/rdd/dbfntx/dbfntx1.c ! Few fixes diff --git a/harbour/source/rdd/dbf1.c b/harbour/source/rdd/dbf1.c index 8f4c448809..87aab0aa3f 100644 --- a/harbour/source/rdd/dbf1.c +++ b/harbour/source/rdd/dbf1.c @@ -2229,6 +2229,7 @@ ERRCODE hb_dbfForceRel( DBFAREAP pArea ) lpdbPendingRel = pArea->lpdbPendingRel; pArea->lpdbPendingRel = NULL; uiError = SELF_RELEVAL( ( AREAP ) pArea, lpdbPendingRel ); +/* if( uiError == SUCCESS && !lpdbPendingRel->lpaParent->fEof && HB_IS_NUMERIC( pArea->valResult ) ) ulRecNo = hb_itemGetNL( pArea->valResult ); @@ -2237,6 +2238,7 @@ ERRCODE hb_dbfForceRel( DBFAREAP pArea ) uiError = SELF_GOTO( ( AREAP ) pArea, ulRecNo ); pArea->fFound = pArea->fPositioned; pArea->fBof = FALSE; +*/ return uiError; } return SUCCESS; diff --git a/harbour/source/rdd/workarea.c b/harbour/source/rdd/workarea.c index 134e90df42..f0419d19ff 100644 --- a/harbour/source/rdd/workarea.c +++ b/harbour/source/rdd/workarea.c @@ -696,10 +696,17 @@ ERRCODE hb_waChildStart( AREAP pArea, LPDBRELINFO pRelInfo ) */ ERRCODE hb_waSyncChildren( AREAP pArea ) { - HB_TRACE(HB_TR_DEBUG, ("hb_waSyncChildren(%p)", pArea)); - HB_SYMBOL_UNUSED( pArea ); - printf( "\nTODO: hb_waSyncChildren()\n" ); + LPDBRELINFO lpdbRelation; + HB_TRACE(HB_TR_DEBUG, ("hb_waSyncChildren(%p)", pArea)); + + lpdbRelation = pArea->lpdbRelations; + while( lpdbRelation ) + { + SELF_CHILDSYNC( lpdbRelation->lpaChild, lpdbRelation ); + lpdbRelation = lpdbRelation->lpdbriNext; + } + return SUCCESS; } @@ -765,12 +772,18 @@ ERRCODE hb_waRelArea( AREAP pArea, USHORT uiRelNo, void * pRelArea ) */ ERRCODE hb_waRelEval( AREAP pArea, LPDBRELINFO pRelInfo ) { + int iChildArea, iCurrArea; + PHB_ITEM pResult; HB_TRACE(HB_TR_DEBUG, ("hb_waRelEval(%p, %p)", pArea, pRelInfo)); - HB_SYMBOL_UNUSED( pArea ); - HB_SYMBOL_UNUSED( pRelInfo ); - printf( "\nTODO: hb_waRelEval()\n" ); - return SUCCESS; + iCurrArea = hb_rddGetCurrentWorkAreaNumber(); + hb_rddSelectWorkAreaNumber( pRelInfo->lpaParent->uiArea ); + pResult = hb_vmEvalBlock( pRelInfo->itmCobExpr ); + hb_rddSelectWorkAreaNumber( iCurrArea ); + if( SELF_SEEK( pArea, 0, pResult, 0 ) == SUCCESS ) + return SUCCESS; + else + return FAILURE; } /* @@ -822,6 +835,7 @@ ERRCODE hb_waSetRel( AREAP pArea, LPDBRELINFO lpdbRelInf ) lpdbRelations->lpdbriNext = ( LPDBRELINFO ) hb_xgrab( sizeof( DBRELINFO ) ); lpdbRelations = lpdbRelations->lpdbriNext; } + lpdbRelations->lpaParent = pArea; lpdbRelations->lpaChild = lpdbRelInf->lpaChild; lpdbRelations->itmCobExpr = lpdbRelInf->itmCobExpr; lpdbRelations->abKey = lpdbRelInf->abKey;