2011-05-18 16:57 UTC+0300 Mindaugas Kavaliauskas (dbtopas/at/dbtopas.lt)

* harbour/contrib/rddads/adsx.c
    ! fixed DBORDERINFO() and ORDNUMBER(), etc. behaviour, for order 
      specified using tag parameter
This commit is contained in:
Mindaugas Kavaliauskas
2011-05-18 13:56:36 +00:00
parent 5b39850f11
commit bcd2904445
2 changed files with 56 additions and 2 deletions

View File

@@ -16,6 +16,11 @@
The license applies to all entries newer than 2009-04-28.
*/
2011-05-18 16:57 UTC+0300 Mindaugas Kavaliauskas (dbtopas/at/dbtopas.lt)
* harbour/contrib/rddads/adsx.c
! fixed DBORDERINFO() and ORDNUMBER(), etc. behaviour, for order
specified using tag parameter
2011-05-18 09:49 UTC+0200 Viktor Szakats (harbour.01 syenar.hu)
+ contrib/xhb/tests/dll.prg
+ dll call sample

View File

@@ -1180,10 +1180,59 @@ static HB_ERRCODE adsxOrderDestroy( ADSXAREAP pArea, LPDBORDERINFO pOrderInfo )
static HB_ERRCODE adsxOrderInfo( ADSXAREAP pArea, HB_USHORT uiIndex, LPDBORDERINFO pOrderInfo )
{
LPMIXTAG pTag = pArea->pTagCurrent;
LPMIXTAG pTag;
if( ! pTag && uiIndex != DBOI_ORDERCOUNT )
/* resolve any pending relations */
if( pArea->adsarea.lpdbPendingRel )
SELF_FORCEREL( ( AREAP ) pArea );
/* all others need an index handle */
if( uiIndex != DBOI_ORDERCOUNT && pOrderInfo->itmOrder && !HB_IS_NIL( pOrderInfo->itmOrder ) )
{
if( HB_IS_STRING( pOrderInfo->itmOrder ) )
{
pTag = pArea->pTagList;
while ( pTag )
{
if( ! hb_stricmp( hb_itemGetCPtr( pOrderInfo->itmOrder ), pTag->szName ) )
break;
pTag = pTag->pNext;
}
if( ! pTag )
return SUPER_ORDINFO( ( AREAP ) pArea, uiIndex, pOrderInfo );
}
else if( HB_IS_NUMERIC( pOrderInfo->itmOrder ) )
{
UNSIGNED16 usOrder = 0, usSearch = ( UNSIGNED16 ) hb_itemGetNI( pOrderInfo->itmOrder );
AdsGetNumIndexes( pArea->adsarea.hTable, &usOrder );
if( usSearch <= usOrder )
return SUPER_ORDINFO( ( AREAP ) pArea, uiIndex, pOrderInfo );
pTag = pArea->pTagList;
usOrder++;
while ( pTag )
{
if( usSearch == usOrder )
break;
pTag = pTag->pNext;
usOrder++;
}
if( ! pTag )
return SUPER_ORDINFO( ( AREAP ) pArea, uiIndex, pOrderInfo );
}
}
else if( ! pArea->pTagCurrent && uiIndex != DBOI_ORDERCOUNT )
{
return SUPER_ORDINFO( ( AREAP ) pArea, uiIndex, pOrderInfo );
}
else
pTag = pArea->pTagCurrent;
/* resolve any pending relations */
if( pArea->adsarea.lpdbPendingRel )