2000-09-05 14:47 GMT+1 Bruno Cantero <bruno@issnet.net>
This commit is contained in:
@@ -1,3 +1,8 @@
|
||||
2000-09-05 14:47 GMT+1 Bruno Cantero <bruno@issnet.net>
|
||||
* contrib/rdd_ads/ads1.c
|
||||
* contrib/rdd_ads/rddads.h
|
||||
* Minor correction.
|
||||
|
||||
2000-09-02 13:10 UTC+0800 Ron Pinkas <ron@profit-master.com>
|
||||
* include/hbclass.ch
|
||||
! Changed @MEthod() to @MethodName() to avoid possible conflicts with #translate METHO()...
|
||||
|
||||
@@ -37,18 +37,15 @@
|
||||
#define HB_OS_WIN_32_USED
|
||||
#define MAX_STR_LEN 255
|
||||
|
||||
#include <ctype.h>
|
||||
#include "hbapi.h"
|
||||
#include "hbinit.h"
|
||||
#include "hbapiitm.h"
|
||||
#include "rddsys.ch"
|
||||
#include "hbapierr.h"
|
||||
#include "hbapilng.h"
|
||||
#include "hbdate.h"
|
||||
#include "hbapierr.h"
|
||||
#include "rddads.h"
|
||||
|
||||
static ERRCODE adsRecCount( ADSAREAP pArea, ULONG * pRecCount );
|
||||
static ERRCODE adsReadDBHeader( ADSAREAP pArea );
|
||||
|
||||
HB_FUNC( _ADS );
|
||||
HB_FUNC( ADS_GETFUNCTABLE );
|
||||
@@ -75,7 +72,7 @@ HB_INIT_SYMBOLS_END( ads1__InitSymbols )
|
||||
#pragma startup ads1__InitSymbols
|
||||
#endif
|
||||
|
||||
static RDDFUNCS adsSuper = { 0 };
|
||||
static RDDFUNCS adsSuper = { NULL };
|
||||
|
||||
static void commonError( ADSAREAP pArea, USHORT uiGenCode, USHORT uiSubCode, char* filename )
|
||||
{
|
||||
@@ -85,8 +82,9 @@ static void commonError( ADSAREAP pArea, USHORT uiGenCode, USHORT uiSubCode, cha
|
||||
hb_errPutGenCode( pError, uiGenCode );
|
||||
hb_errPutSubCode( pError, uiSubCode );
|
||||
hb_errPutDescription( pError, hb_langDGetErrorDesc( uiGenCode ) );
|
||||
if( filename ) hb_errPutFileName( pError, filename );
|
||||
SUPER_ERROR( (AREAP)pArea, pError );
|
||||
if( filename )
|
||||
hb_errPutFileName( pError, filename );
|
||||
SUPER_ERROR( ( AREAP ) pArea, pError );
|
||||
hb_errRelease( pError );
|
||||
return;
|
||||
}
|
||||
@@ -225,32 +223,14 @@ static BOOL strcmpNoCase( char * s1, char * s2, int n )
|
||||
|
||||
#define adsBof NULL
|
||||
#define adsEof NULL
|
||||
|
||||
/*
|
||||
static ERRCODE adsBof( ADSAREAP pArea, BOOL * pBof )
|
||||
{
|
||||
HB_TRACE(HB_TR_DEBUG, ("adsBof(%p, %p)", pArea, pBof));
|
||||
|
||||
AdsAtBOF ( pArea->hTable, (UNSIGNED16 *)&(pArea->fBof) );
|
||||
* pBof = pArea->fBof;
|
||||
return SUCCESS;
|
||||
}
|
||||
|
||||
static ERRCODE adsEof( ADSAREAP pArea, BOOL * pEof )
|
||||
{
|
||||
HB_TRACE(HB_TR_DEBUG, ("adsEof(%p, %p)", pArea, pEof));
|
||||
|
||||
AdsAtEOF( pArea->hTable, (UNSIGNED16 *)&(pArea->fEof) );
|
||||
* pEof = pArea->fEof;
|
||||
return SUCCESS;
|
||||
}
|
||||
*/
|
||||
#define adsFound NULL
|
||||
|
||||
static ERRCODE adsGoBottom( ADSAREAP pArea )
|
||||
{
|
||||
HB_TRACE(HB_TR_DEBUG, ("adsGoBottom(%p)", pArea));
|
||||
|
||||
pArea->fTop = FALSE;
|
||||
pArea->fBottom = TRUE;
|
||||
AdsGotoBottom ( (pArea->hOrdCurrent) ? pArea->hOrdCurrent : pArea->hTable );
|
||||
hb_adsCheckBofEof( pArea );
|
||||
return SUPER_SKIPFILTER( (AREAP)pArea, -1 );
|
||||
@@ -300,6 +280,8 @@ static ERRCODE adsGoTop( ADSAREAP pArea )
|
||||
{
|
||||
HB_TRACE(HB_TR_DEBUG, ("adsGoTop(%p)", pArea));
|
||||
|
||||
pArea->fTop = TRUE;
|
||||
pArea->fBottom = FALSE;
|
||||
AdsGotoTop ( (pArea->hOrdCurrent) ? pArea->hOrdCurrent : pArea->hTable );
|
||||
hb_adsCheckBofEof( pArea );
|
||||
return SUPER_SKIPFILTER( (AREAP)pArea, 1 );
|
||||
@@ -359,11 +341,21 @@ static ERRCODE adsSeek( ADSAREAP pArea, BOOL bSoftSeek, PHB_ITEM pKey, BOOL bFin
|
||||
}
|
||||
AdsIsFound( pArea->hTable, (UNSIGNED16 *)&(pArea->fFound) );
|
||||
hb_adsCheckBofEof( pArea );
|
||||
|
||||
return SUCCESS;
|
||||
}
|
||||
|
||||
#define adsSkip NULL
|
||||
static ERRCODE adsSkip( ADSAREAP pArea, LONG lToSkip )
|
||||
{
|
||||
ERRCODE uiError;
|
||||
|
||||
HB_TRACE(HB_TR_DEBUG, ("adsSkip(%p, %ld)", pArea, lToSkip));
|
||||
|
||||
pArea->fTop = pArea->fBottom = FALSE;
|
||||
AdsSkip ( (pArea->hOrdCurrent) ? pArea->hOrdCurrent : pArea->hTable, lToSkip );
|
||||
hb_adsCheckBofEof( pArea );
|
||||
return SUPER_SKIPFILTER( (AREAP)pArea, 1 );
|
||||
}
|
||||
|
||||
#define adsSkipFilter NULL
|
||||
|
||||
static ERRCODE adsSkipRaw( ADSAREAP pArea, LONG toSkip )
|
||||
@@ -382,17 +374,16 @@ static ERRCODE adsSkipRaw( ADSAREAP pArea, LONG toSkip )
|
||||
|
||||
static ERRCODE adsAddField( ADSAREAP pArea, LPDBFIELDINFO pFieldInfo )
|
||||
{
|
||||
|
||||
HB_TRACE(HB_TR_DEBUG, ("adsAddField(%p, %p)", pArea, pFieldInfo));
|
||||
|
||||
if( SUPER_ADDFIELD( (AREAP)pArea, pFieldInfo ) == SUCCESS )
|
||||
return SUCCESS;
|
||||
return FAILURE;
|
||||
/* Update field offset */
|
||||
pArea->pFieldOffset[ pArea->uiFieldCount ] = pArea->uiRecordLen;
|
||||
pArea->uiRecordLen += pFieldInfo->uiLen;
|
||||
return SUPER_ADDFIELD( ( AREAP ) pArea, pFieldInfo );
|
||||
}
|
||||
|
||||
static ERRCODE adsAppend( ADSAREAP pArea, BOOL bUnLockAll )
|
||||
{
|
||||
|
||||
HB_SYMBOL_UNUSED( bUnLockAll );
|
||||
HB_TRACE(HB_TR_DEBUG, ("adsAppend(%p, %d)", pArea, (int) bUnLockAll));
|
||||
|
||||
@@ -405,7 +396,6 @@ static ERRCODE adsAppend( ADSAREAP pArea, BOOL bUnLockAll )
|
||||
|
||||
static ERRCODE adsDeleteRec( ADSAREAP pArea )
|
||||
{
|
||||
|
||||
HB_TRACE(HB_TR_DEBUG, ("adsDeleteRec(%p)", pArea));
|
||||
|
||||
AdsDeleteRecord ( pArea->hTable );
|
||||
@@ -414,15 +404,12 @@ static ERRCODE adsDeleteRec( ADSAREAP pArea )
|
||||
|
||||
static ERRCODE adsDeleted( ADSAREAP pArea, BOOL * pDeleted )
|
||||
{
|
||||
|
||||
UNSIGNED16 bDeleted;
|
||||
|
||||
|
||||
HB_TRACE(HB_TR_DEBUG, ("adsDeleted(%p, %p)", pArea, pDeleted));
|
||||
|
||||
AdsIsRecordDeleted ( pArea->hTable, &bDeleted);
|
||||
*pDeleted = (BOOL) bDeleted;
|
||||
|
||||
return SUCCESS;
|
||||
}
|
||||
|
||||
@@ -454,6 +441,7 @@ static ERRCODE adsFlush( ADSAREAP pArea )
|
||||
{
|
||||
HB_SYMBOL_UNUSED( pArea );
|
||||
HB_TRACE(HB_TR_DEBUG, ("adsFlush(%p)", pArea ));
|
||||
|
||||
AdsWriteAllRecords();
|
||||
return SUCCESS;
|
||||
}
|
||||
@@ -464,8 +452,7 @@ static ERRCODE adsGetRec( ADSAREAP pArea, BYTE ** pBuffer )
|
||||
|
||||
HB_TRACE(HB_TR_DEBUG, ("adsGetRec(%p, %p)", pArea, pBuffer));
|
||||
|
||||
AdsGetRecord( pArea->hTable, pArea->pRecord,
|
||||
&pulLen );
|
||||
AdsGetRecord( pArea->hTable, pArea->pRecord, &pulLen );
|
||||
* pBuffer = pArea->pRecord;
|
||||
return SUCCESS;
|
||||
}
|
||||
@@ -473,14 +460,14 @@ static ERRCODE adsGetRec( ADSAREAP pArea, BYTE ** pBuffer )
|
||||
static ERRCODE adsGetValue( ADSAREAP pArea, USHORT uiIndex, PHB_ITEM pItem )
|
||||
{
|
||||
LPFIELD pField;
|
||||
BYTE * pBuffer, * szText, szEndChar;
|
||||
BYTE * pBuffer;
|
||||
char szBuffer[ 21 ];
|
||||
|
||||
HB_TRACE(HB_TR_DEBUG, ("adsGetValue(%p, %hu, %p)", pArea, uiIndex, pItem));
|
||||
|
||||
if( uiIndex > pArea->uiFieldCount )
|
||||
return FAILURE;
|
||||
|
||||
pField = pArea->lpFields + uiIndex - 1;
|
||||
if( pArea->fEof )
|
||||
{
|
||||
int i;
|
||||
@@ -488,44 +475,45 @@ static ERRCODE adsGetValue( ADSAREAP pArea, USHORT uiIndex, PHB_ITEM pItem )
|
||||
for( i=0; i < pArea->uiRecordLen; i++ )
|
||||
*( pBuffer+i ) = ' ';
|
||||
}
|
||||
else
|
||||
{
|
||||
if( !pArea->fValidBuffer ) adsGetRec( pArea, &pBuffer );
|
||||
}
|
||||
szText = pBuffer + pArea->pFieldOffset[ uiIndex - 1 ];
|
||||
else if( !pArea->fValidBuffer )
|
||||
adsGetRec( pArea, &pBuffer );
|
||||
|
||||
pField = pArea->lpFields + uiIndex - 1;
|
||||
switch( pField->uiType )
|
||||
{
|
||||
case 'C':
|
||||
hb_itemPutCL( pItem, ( char * ) szText,
|
||||
pField->uiLen + ( ( USHORT ) pField->uiDec << 8 ) );
|
||||
case HB_IT_STRING:
|
||||
hb_itemPutCL( pItem, ( char * ) pBuffer + pArea->pFieldOffset[ uiIndex - 1 ],
|
||||
pField->uiLen );
|
||||
break;
|
||||
|
||||
case 'N':
|
||||
szEndChar = * ( szText + pField->uiLen );
|
||||
* ( szText + pField->uiLen ) = '\0';
|
||||
case HB_IT_LONG:
|
||||
memcpy( szBuffer, pBuffer + pArea->pFieldOffset[ uiIndex - 1 ],
|
||||
pField->uiLen );
|
||||
szBuffer[ pField->uiLen ] = 0;
|
||||
if( pField->uiDec )
|
||||
hb_itemPutNDLen( pItem, atof( ( char * ) szText ), ( int ) pField->uiLen - ( ( int ) pField->uiDec + 1 ), ( int ) pField->uiDec );
|
||||
hb_itemPutNDLen( pItem, atof( szBuffer ),
|
||||
( int ) pField->uiLen - ( ( int ) pField->uiDec + 1 ),
|
||||
( int ) pField->uiDec );
|
||||
else
|
||||
hb_itemPutNLLen( pItem, atol( ( char * ) szText ), ( int ) pField->uiLen );
|
||||
* ( szText + pField->uiLen ) = szEndChar;
|
||||
hb_itemPutNLLen( pItem, atol( szBuffer ), ( int ) pField->uiLen );
|
||||
break;
|
||||
|
||||
case 'D':
|
||||
szEndChar = * ( szText + pField->uiLen );
|
||||
* ( szText + pField->uiLen ) = '\0';
|
||||
hb_itemPutDS( pItem, ( char * ) szText );
|
||||
* ( szText + pField->uiLen ) = szEndChar;
|
||||
case HB_IT_DATE:
|
||||
memcpy( szBuffer, pBuffer + pArea->pFieldOffset[ uiIndex - 1 ], 8 );
|
||||
szBuffer[ 8 ] = 0;
|
||||
hb_itemPutDS( pItem, szBuffer );
|
||||
break;
|
||||
|
||||
case 'L':
|
||||
if( *szText == ' ' || *szText == 'F' )
|
||||
hb_itemPutL( pItem, FALSE );
|
||||
else
|
||||
hb_itemPutL( pItem, TRUE );
|
||||
case HB_IT_LOGICAL:
|
||||
hb_itemPutL( pItem, pArea->pRecord[ pArea->pFieldOffset[ uiIndex ] ] == 'T' ||
|
||||
pArea->pRecord[ pArea->pFieldOffset[ uiIndex ] ] == 't' ||
|
||||
pArea->pRecord[ pArea->pFieldOffset[ uiIndex ] ] == 'Y' ||
|
||||
pArea->pRecord[ pArea->pFieldOffset[ uiIndex ] ] == 'y' );
|
||||
break;
|
||||
case 'M':
|
||||
|
||||
case HB_IT_MEMO:
|
||||
{
|
||||
UNSIGNED8 szName[HARBOUR_MAX_RDD_FIELDNAME_LENGTH+1];
|
||||
UNSIGNED8 szName[ HARBOUR_MAX_RDD_FIELDNAME_LENGTH + 1 ];
|
||||
UNSIGNED16 pusBufLen = HARBOUR_MAX_RDD_FIELDNAME_LENGTH;
|
||||
UNSIGNED8 *pucBuf;
|
||||
UNSIGNED32 pulLen;
|
||||
@@ -549,7 +537,6 @@ static ERRCODE adsGetValue( ADSAREAP pArea, USHORT uiIndex, PHB_ITEM pItem )
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
return SUCCESS;
|
||||
}
|
||||
@@ -582,9 +569,9 @@ static ERRCODE adsPutValue( ADSAREAP pArea, USHORT uiIndex, PHB_ITEM pItem )
|
||||
BYTE * szText, szEndChar;
|
||||
BOOL bError;
|
||||
long lDay, lMonth, lYear;
|
||||
UNSIGNED8 szName[HARBOUR_MAX_RDD_FIELDNAME_LENGTH+1];
|
||||
UNSIGNED8 szName[ HARBOUR_MAX_RDD_FIELDNAME_LENGTH + 1 ];
|
||||
UNSIGNED16 pusBufLen = HARBOUR_MAX_RDD_FIELDNAME_LENGTH;
|
||||
UNSIGNED8 pucFormat[11];
|
||||
UNSIGNED8 pucFormat[ 11 ];
|
||||
UNSIGNED16 pusLen = 10;
|
||||
|
||||
HB_TRACE(HB_TR_DEBUG, ("adsPutValue(%p, %hu, %p)", pArea, uiIndex, pItem));
|
||||
@@ -605,7 +592,7 @@ static ERRCODE adsPutValue( ADSAREAP pArea, USHORT uiIndex, PHB_ITEM pItem )
|
||||
AdsGetFieldName( pArea->hTable, uiIndex, szName, &pusBufLen );
|
||||
switch( pField->uiType )
|
||||
{
|
||||
case 'C':
|
||||
case HB_IT_STRING:
|
||||
if( HB_IS_STRING( pItem ) )
|
||||
{
|
||||
uiCount = ( USHORT ) hb_itemGetCLen( pItem );
|
||||
@@ -618,7 +605,7 @@ static ERRCODE adsPutValue( ADSAREAP pArea, USHORT uiIndex, PHB_ITEM pItem )
|
||||
}
|
||||
break;
|
||||
|
||||
case 'N':
|
||||
case HB_IT_LONG:
|
||||
if( HB_IS_NUMERIC( pItem ) )
|
||||
{
|
||||
if( pField->uiDec )
|
||||
@@ -638,7 +625,7 @@ static ERRCODE adsPutValue( ADSAREAP pArea, USHORT uiIndex, PHB_ITEM pItem )
|
||||
}
|
||||
break;
|
||||
|
||||
case 'D':
|
||||
case HB_IT_DATE:
|
||||
if( HB_IS_DATE( pItem ) )
|
||||
{
|
||||
AdsGetDateFormat ( pucFormat, &pusLen );
|
||||
@@ -653,7 +640,7 @@ static ERRCODE adsPutValue( ADSAREAP pArea, USHORT uiIndex, PHB_ITEM pItem )
|
||||
}
|
||||
break;
|
||||
|
||||
case 'L':
|
||||
case HB_IT_LOGICAL:
|
||||
if( HB_IS_LOGICAL( pItem ) )
|
||||
{
|
||||
*szText = hb_itemGetL( pItem ) ? 'T' : 'F';
|
||||
@@ -662,7 +649,7 @@ static ERRCODE adsPutValue( ADSAREAP pArea, USHORT uiIndex, PHB_ITEM pItem )
|
||||
}
|
||||
break;
|
||||
|
||||
case 'M':
|
||||
case HB_IT_MEMO:
|
||||
if( HB_IS_STRING( pItem ) )
|
||||
{
|
||||
uiCount = ( USHORT ) hb_itemGetCLen( pItem );
|
||||
@@ -671,7 +658,6 @@ static ERRCODE adsPutValue( ADSAREAP pArea, USHORT uiIndex, PHB_ITEM pItem )
|
||||
bError = FALSE;
|
||||
}
|
||||
break;
|
||||
|
||||
}
|
||||
|
||||
if( bError )
|
||||
@@ -686,7 +672,6 @@ static ERRCODE adsPutValue( ADSAREAP pArea, USHORT uiIndex, PHB_ITEM pItem )
|
||||
|
||||
static ERRCODE adsRecAll( ADSAREAP pArea )
|
||||
{
|
||||
|
||||
HB_TRACE(HB_TR_DEBUG, ("adsRecAll(%p)", pArea));
|
||||
|
||||
AdsRecallRecord ( pArea->hTable );
|
||||
@@ -695,7 +680,6 @@ static ERRCODE adsRecAll( ADSAREAP pArea )
|
||||
|
||||
static ERRCODE adsRecCount( ADSAREAP pArea, ULONG * pRecCount )
|
||||
{
|
||||
|
||||
HB_TRACE(HB_TR_DEBUG, ("adsRecCount(%p, %p)", pArea, pRecCount));
|
||||
|
||||
AdsGetRecordCount( pArea->hTable, ADS_IGNOREFILTERS, pRecCount );
|
||||
@@ -714,18 +698,53 @@ static ERRCODE adsRecNo( ADSAREAP pArea, PHB_ITEM pRecNo )
|
||||
return SUCCESS;
|
||||
}
|
||||
|
||||
#define adsSetFieldsExtent NULL
|
||||
static ERRCODE adsSetFieldExtent( ADSAREAP pArea, USHORT uiFieldExtent )
|
||||
{
|
||||
HB_TRACE(HB_TR_DEBUG, ("adsSetFieldExtent(%p, %hu)", pArea, uiFieldExtent));
|
||||
|
||||
if( SUPER_SETFIELDEXTENT( ( AREAP ) pArea, uiFieldExtent ) == FAILURE )
|
||||
return FAILURE;
|
||||
|
||||
/* Alloc field offsets array */
|
||||
pArea->pFieldOffset = ( USHORT * ) hb_xgrab( uiFieldExtent * sizeof( USHORT * ) );
|
||||
memset( pArea->pFieldOffset, 0, uiFieldExtent * sizeof( USHORT * ) );
|
||||
return SUCCESS;
|
||||
}
|
||||
|
||||
#define adsAlias NULL
|
||||
|
||||
static ERRCODE adsClose( ADSAREAP pArea )
|
||||
{
|
||||
ERRCODE uiError;
|
||||
|
||||
HB_TRACE(HB_TR_DEBUG, ("adsClose(%p)", pArea));
|
||||
|
||||
AdsCloseTable ( pArea->hTable );
|
||||
return SUPER_CLOSE( (AREAP)pArea );
|
||||
uiError = SUPER_CLOSE( (AREAP)pArea );
|
||||
|
||||
/* Free field offset array */
|
||||
if( pArea->pFieldOffset )
|
||||
{
|
||||
hb_xfree( pArea->pFieldOffset );
|
||||
pArea->pFieldOffset = NULL;
|
||||
}
|
||||
|
||||
/* Free buffer */
|
||||
if( pArea->pRecord )
|
||||
{
|
||||
hb_xfree( pArea->pRecord );
|
||||
pArea->pRecord = NULL;
|
||||
}
|
||||
|
||||
/* Free all filenames */
|
||||
if( pArea->szDataFileName )
|
||||
{
|
||||
hb_xfree( pArea->szDataFileName );
|
||||
pArea->szDataFileName = NULL;
|
||||
}
|
||||
return uiError;
|
||||
}
|
||||
|
||||
//#define adsCreate NULL
|
||||
static ERRCODE adsCreate( ADSAREAP pArea, LPDBOPENINFO pCreateInfo)
|
||||
{
|
||||
ADSHANDLE hTable;
|
||||
@@ -745,9 +764,9 @@ static ERRCODE adsCreate( ADSAREAP pArea, LPDBOPENINFO pCreateInfo)
|
||||
{
|
||||
switch ( pField->uiType )
|
||||
{
|
||||
case 'D' :
|
||||
case 'L' :
|
||||
case 'M' :
|
||||
case HB_IT_DATE:
|
||||
case HB_IT_LOGICAL:
|
||||
case HB_IT_MEMO:
|
||||
if(strlen((( PHB_DYNS ) pField->sym )->pSymbol->szName) > HARBOUR_MAX_RDD_FIELDNAME_LENGTH )
|
||||
{
|
||||
ucField[0]='\0';
|
||||
@@ -775,7 +794,6 @@ static ERRCODE adsCreate( ADSAREAP pArea, LPDBOPENINFO pCreateInfo)
|
||||
strcat((char*)ucfieldDefs, (char*)ucBuffer);
|
||||
pField++;
|
||||
}
|
||||
pArea->hDataFile = FS_ERROR;
|
||||
uRetVal = AdsCreateTable( 0, pCreateInfo->abName, NULL, adsFileType, adsCharType,
|
||||
adsLockType, adsRights, ADS_DEFAULT, ucfieldDefs, &hTable);
|
||||
|
||||
@@ -828,6 +846,7 @@ static ERRCODE adsInfo( ADSAREAP pArea, USHORT uiIndex, PHB_ITEM pItem )
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
case DBI_LASTUPDATE:
|
||||
hb_itemPutDL( pItem, hb_dateEncode( pArea->bYear,
|
||||
pArea->bMonth,
|
||||
@@ -845,16 +864,37 @@ static ERRCODE adsInfo( ADSAREAP pArea, USHORT uiIndex, PHB_ITEM pItem )
|
||||
return SUCCESS;
|
||||
}
|
||||
|
||||
#define adsNewArea NULL
|
||||
static ERRCODE adsNewArea( ADSAREAP pArea )
|
||||
{
|
||||
HB_TRACE(HB_TR_DEBUG, ("adsNewArea(%p)", pArea));
|
||||
|
||||
if( SUPER_NEW( ( AREAP ) pArea ) == FAILURE )
|
||||
return FAILURE;
|
||||
|
||||
/* Size for deleted records flag */
|
||||
pArea->uiRecordLen = 1;
|
||||
return SUCCESS;
|
||||
}
|
||||
|
||||
static ERRCODE adsOpen( ADSAREAP pArea, LPDBOPENINFO pOpenInfo )
|
||||
{
|
||||
|
||||
ADSHANDLE hTable;
|
||||
UNSIGNED32 ulRetVal;
|
||||
UNSIGNED32 ulRetVal, pulLength;
|
||||
USHORT uiFields, uiCount;
|
||||
UNSIGNED8 szName[ HARBOUR_MAX_RDD_FIELDNAME_LENGTH + 1 ];
|
||||
UNSIGNED16 pusBufLen, pusType;
|
||||
DBFIELDINFO dbFieldInfo;
|
||||
|
||||
if( SUPER_OPEN( (AREAP) pArea, pOpenInfo ) == FAILURE )
|
||||
HB_TRACE(HB_TR_DEBUG, ("adsReadHeader(%p)", pArea));
|
||||
|
||||
pArea->szDataFileName = ( char * ) pOpenInfo->abName;
|
||||
pArea->atomAlias = hb_dynsymGet( ( char * ) pOpenInfo->atomAlias );
|
||||
if( ( ( PHB_DYNS ) pArea->atomAlias )->hArea )
|
||||
{
|
||||
hb_errRT_DBCMD( EG_DUPALIAS, EDBCMD_DUPALIAS, NULL, ( char * ) pOpenInfo->atomAlias );
|
||||
return FAILURE;
|
||||
}
|
||||
( ( PHB_DYNS ) pArea->atomAlias )->hArea = pOpenInfo->uiArea;
|
||||
|
||||
ulRetVal = AdsOpenTable ( 0, pOpenInfo->abName, NULL,
|
||||
adsFileType, adsCharType, adsLockType, adsRights,
|
||||
@@ -863,17 +903,59 @@ static ERRCODE adsOpen( ADSAREAP pArea, LPDBOPENINFO pOpenInfo )
|
||||
&hTable);
|
||||
if( ulRetVal != AE_SUCCESS )
|
||||
{
|
||||
commonError( pArea, EG_OPEN, (USHORT) ulRetVal, ( char * ) pOpenInfo->abName );
|
||||
commonError( pArea, EG_OPEN, ( USHORT ) ulRetVal, ( char * ) pOpenInfo->abName );
|
||||
return FAILURE;
|
||||
}
|
||||
|
||||
pArea->hTable = hTable;
|
||||
pArea->hOrdCurrent = 0;
|
||||
if( adsReadDBHeader( pArea ) == FAILURE )
|
||||
SELF_FIELDCOUNT( ( AREAP ) pArea, &uiFields );
|
||||
SELF_SETFIELDEXTENT( ( AREAP ) pArea, uiFields );
|
||||
|
||||
/* Size for deleted flag */
|
||||
pArea->uiRecordLen = 1;
|
||||
|
||||
for( uiCount = 1; uiCount <= uiFields; uiCount++ )
|
||||
{
|
||||
adsClose( pArea );
|
||||
return FAILURE;
|
||||
pusBufLen = HARBOUR_MAX_RDD_FIELDNAME_LENGTH;
|
||||
AdsGetFieldName( pArea->hTable, uiCount, szName, &pusBufLen );
|
||||
dbFieldInfo.atomName = szName;
|
||||
* ( dbFieldInfo.atomName + pusBufLen ) = '\0';
|
||||
AdsGetFieldType ( pArea->hTable, szName, &pusType );
|
||||
AdsGetFieldLength( pArea->hTable, szName, &pulLength );
|
||||
dbFieldInfo.uiLen = ( USHORT ) pulLength;
|
||||
dbFieldInfo.uiDec = 0;
|
||||
switch( pusType )
|
||||
{
|
||||
case ADS_STRING:
|
||||
dbFieldInfo.uiType = HB_IT_STRING;
|
||||
break;
|
||||
|
||||
case ADS_NUMERIC:
|
||||
dbFieldInfo.uiType = HB_IT_LONG;
|
||||
AdsGetFieldDecimals( pArea->hTable, szName, ( UNSIGNED16 * ) &pulLength );
|
||||
dbFieldInfo.uiDec = ( USHORT ) pulLength;
|
||||
break;
|
||||
|
||||
case ADS_LOGICAL:
|
||||
dbFieldInfo.uiType = HB_IT_LOGICAL;
|
||||
break;
|
||||
|
||||
case ADS_DATE:
|
||||
dbFieldInfo.uiType = HB_IT_DATE;
|
||||
break;
|
||||
|
||||
case ADS_MEMO:
|
||||
dbFieldInfo.uiType = HB_IT_MEMO;
|
||||
break;
|
||||
}
|
||||
SELF_ADDFIELD( ( AREAP ) pArea, &dbFieldInfo );
|
||||
}
|
||||
return adsGoTop( pArea );
|
||||
|
||||
/* Alloc buffer */
|
||||
pArea->pRecord = ( BYTE * ) hb_xgrab( pArea->uiRecordLen );
|
||||
pArea->fValidBuffer = FALSE;
|
||||
return SELF_GOTOP( ( AREAP ) pArea );
|
||||
}
|
||||
|
||||
#define adsRelease NULL
|
||||
@@ -881,7 +963,8 @@ static ERRCODE adsOpen( ADSAREAP pArea, LPDBOPENINFO pOpenInfo )
|
||||
static ERRCODE adsStructSize( ADSAREAP pArea, USHORT * StructSize )
|
||||
{
|
||||
HB_SYMBOL_UNUSED( pArea );
|
||||
*StructSize = sizeof( ADSAREA );
|
||||
|
||||
* StructSize = sizeof( ADSAREA );
|
||||
return SUCCESS;
|
||||
}
|
||||
|
||||
@@ -890,7 +973,6 @@ static ERRCODE adsStructSize( ADSAREAP pArea, USHORT * StructSize )
|
||||
|
||||
static ERRCODE adsPack( ADSAREAP pArea )
|
||||
{
|
||||
|
||||
HB_TRACE(HB_TR_DEBUG, ("adsPack(%p)", pArea));
|
||||
|
||||
if( pArea->fShared )
|
||||
@@ -919,25 +1001,26 @@ static ERRCODE adsZap( ADSAREAP pArea )
|
||||
return adsGoTop( pArea );
|
||||
}
|
||||
|
||||
#define adschildEnd NULL
|
||||
#define adschildStart NULL
|
||||
#define adschildSync NULL
|
||||
#define adssyncChildren NULL
|
||||
#define adsChildEnd NULL
|
||||
#define adsChildStart NULL
|
||||
#define adsChildSync NULL
|
||||
#define adsSyncChildren NULL
|
||||
|
||||
static ERRCODE adsclearRel( ADSAREAP pArea )
|
||||
static ERRCODE adsClearRel( ADSAREAP pArea )
|
||||
{
|
||||
HB_TRACE(HB_TR_DEBUG, ("adsclearRel(%p)", pArea ));
|
||||
|
||||
SUPER_CLEARREL( ( AREAP ) pArea );
|
||||
AdsClearRelation( pArea->hTable );
|
||||
return SUCCESS;
|
||||
}
|
||||
|
||||
#define adsforceRel NULL
|
||||
#define adsrelArea NULL
|
||||
#define adsrelEval NULL
|
||||
#define adsrelText NULL
|
||||
#define adsForceRel NULL
|
||||
#define adsRelArea NULL
|
||||
#define adsRelEval NULL
|
||||
#define adsRelText NULL
|
||||
|
||||
static ERRCODE adssetRel( ADSAREAP pArea, LPDBRELINFO lpdbRelations )
|
||||
static ERRCODE adsSetRel( ADSAREAP pArea, LPDBRELINFO lpdbRelations )
|
||||
{
|
||||
ADSHANDLE hIndex;
|
||||
UNSIGNED32 ulRetVal;
|
||||
@@ -1034,7 +1117,6 @@ static ERRCODE adsOrderListRebuild( ADSAREAP pArea )
|
||||
HB_TRACE(HB_TR_DEBUG, ("adsOrderListRebuild(%p)", pArea));
|
||||
|
||||
AdsReindex ( pArea->hTable );
|
||||
|
||||
return SUCCESS;
|
||||
}
|
||||
|
||||
@@ -1150,13 +1232,11 @@ static ERRCODE adsOrderInfo( ADSAREAP pArea, USHORT uiIndex, LPDBORDERINFO pOrde
|
||||
return SUCCESS;
|
||||
}
|
||||
|
||||
|
||||
static ERRCODE adsClearFilter( ADSAREAP pArea )
|
||||
{
|
||||
HB_TRACE(HB_TR_DEBUG, ("adsClearFilter(%p)", pArea));
|
||||
|
||||
AdsClearFilter ( pArea->hTable );
|
||||
|
||||
return SUPER_CLEARFILTER( ( AREAP ) pArea );
|
||||
}
|
||||
|
||||
@@ -1188,7 +1268,6 @@ static ERRCODE adsSetFilter( ADSAREAP pArea, LPDBFILTERINFO pFilterInfo )
|
||||
HB_TRACE(HB_TR_DEBUG, ("adsSetFilter(%p, %p)", pArea, pFilterInfo));
|
||||
|
||||
AdsSetFilter( pArea->hTable, (UNSIGNED8*) hb_itemGetCPtr( pFilterInfo->abFilterText ) );
|
||||
|
||||
return SUPER_SETFILTER( ( AREAP ) pArea, pFilterInfo );
|
||||
}
|
||||
|
||||
@@ -1305,63 +1384,7 @@ static ERRCODE adsUnLock( ADSAREAP pArea, ULONG lRecNo )
|
||||
#define adsGetValueFile NULL
|
||||
#define adsOpenMemFile NULL
|
||||
#define adsPutValueFile NULL
|
||||
|
||||
static ERRCODE adsReadDBHeader( ADSAREAP pArea )
|
||||
{
|
||||
UNSIGNED8 szName[HARBOUR_MAX_RDD_FIELDNAME_LENGTH+1];
|
||||
UNSIGNED16 pusBufLen;
|
||||
DBFIELDINFO pFieldInfo;
|
||||
USHORT uiFields, uiCount;
|
||||
UNSIGNED16 pusType;
|
||||
UNSIGNED32 pulLength;
|
||||
|
||||
HB_TRACE(HB_TR_DEBUG, ("adsReadHeader(%p)", pArea));
|
||||
|
||||
adsFieldCount( pArea, &uiFields );
|
||||
AdsGetRecordLength( pArea->hTable, &pulLength );
|
||||
pArea->uiRecordLen = ( USHORT ) pulLength;
|
||||
|
||||
SUPER_SETFIELDEXTENT( (AREAP)pArea, uiFields );
|
||||
pFieldInfo.uiTypeExtended = 0;
|
||||
|
||||
for( uiCount = 1; uiCount <= uiFields; uiCount++ )
|
||||
{
|
||||
pusBufLen = HARBOUR_MAX_RDD_FIELDNAME_LENGTH;
|
||||
AdsGetFieldName( pArea->hTable, uiCount, szName, &pusBufLen );
|
||||
pFieldInfo.atomName = szName;
|
||||
*(pFieldInfo.atomName + pusBufLen ) = '\0';
|
||||
AdsGetFieldType ( pArea->hTable, szName, &pusType);
|
||||
AdsGetFieldLength( pArea->hTable, szName, &pulLength);
|
||||
pFieldInfo.uiLen = ( USHORT ) pulLength;
|
||||
pFieldInfo.uiDec = 0;
|
||||
switch( pusType )
|
||||
{
|
||||
case ADS_STRING:
|
||||
pFieldInfo.uiType = 'C';
|
||||
break;
|
||||
case ADS_NUMERIC:
|
||||
pFieldInfo.uiType = 'N';
|
||||
AdsGetFieldDecimals( pArea->hTable, szName, (UNSIGNED16 *)&pulLength );
|
||||
pFieldInfo.uiDec = ( USHORT ) pulLength;
|
||||
break;
|
||||
case ADS_LOGICAL:
|
||||
pFieldInfo.uiType = 'L';
|
||||
break;
|
||||
case ADS_DATE:
|
||||
pFieldInfo.uiType = 'D';
|
||||
break;
|
||||
case ADS_MEMO:
|
||||
pFieldInfo.uiType = 'M';
|
||||
pArea->fHasMemo = TRUE;
|
||||
break;
|
||||
}
|
||||
adsAddField( pArea, &pFieldInfo );
|
||||
}
|
||||
pArea->pRecord = ( BYTE * ) hb_xgrab( pArea->uiRecordLen + 1 );
|
||||
pArea->pRecord[ pArea->uiRecordLen ] = 0;
|
||||
return SUCCESS;
|
||||
}
|
||||
|
||||
#define adsReadDBHeader NULL
|
||||
#define adsWriteDBHeader NULL
|
||||
#define adsWhoCares NULL
|
||||
|
||||
@@ -1397,7 +1420,7 @@ static RDDFUNCS adsTable = { ( DBENTRYP_BP ) adsBof,
|
||||
( DBENTRYP_ULP ) adsRecCount,
|
||||
( DBENTRYP_ISI ) adsRecInfo,
|
||||
( DBENTRYP_I ) adsRecNo,
|
||||
( DBENTRYP_S ) adsSetFieldsExtent,
|
||||
( DBENTRYP_S ) adsSetFieldExtent,
|
||||
( DBENTRYP_P ) adsAlias,
|
||||
( DBENTRYP_V ) adsClose,
|
||||
( DBENTRYP_VP ) adsCreate,
|
||||
@@ -1414,16 +1437,16 @@ static RDDFUNCS adsTable = { ( DBENTRYP_BP ) adsBof,
|
||||
( DBENTRYP_VT ) adsTrans,
|
||||
( DBENTRYP_VT ) adsTransRec,
|
||||
( DBENTRYP_V ) adsZap,
|
||||
( DBENTRYP_VR ) adschildEnd,
|
||||
( DBENTRYP_VR ) adschildStart,
|
||||
( DBENTRYP_VR ) adschildSync,
|
||||
( DBENTRYP_V ) adssyncChildren,
|
||||
( DBENTRYP_V ) adsclearRel,
|
||||
( DBENTRYP_V ) adsforceRel,
|
||||
( DBENTRYP_SVP ) adsrelArea,
|
||||
( DBENTRYP_VR ) adsrelEval,
|
||||
( DBENTRYP_SVP ) adsrelText,
|
||||
( DBENTRYP_VR ) adssetRel,
|
||||
( DBENTRYP_VR ) adsChildEnd,
|
||||
( DBENTRYP_VR ) adsChildStart,
|
||||
( DBENTRYP_VR ) adsChildSync,
|
||||
( DBENTRYP_V ) adsSyncChildren,
|
||||
( DBENTRYP_V ) adsClearRel,
|
||||
( DBENTRYP_V ) adsForceRel,
|
||||
( DBENTRYP_SVP ) adsRelArea,
|
||||
( DBENTRYP_VR ) adsRelEval,
|
||||
( DBENTRYP_SVP ) adsRelText,
|
||||
( DBENTRYP_VR ) adsSetRel,
|
||||
( DBENTRYP_OI ) adsOrderListAdd,
|
||||
( DBENTRYP_V ) adsOrderListClear,
|
||||
( DBENTRYP_VP ) adsOrderListDelete,
|
||||
|
||||
@@ -68,42 +68,6 @@ typedef struct _ADSAREA_
|
||||
USHORT heapSize;
|
||||
USHORT rddID;
|
||||
|
||||
/*
|
||||
* DBFS's additions to the workarea structure
|
||||
*
|
||||
* Warning: The above section MUST match WORKAREA exactly! Any
|
||||
* additions to the structure MUST be added below, as in this
|
||||
* example.
|
||||
*/
|
||||
|
||||
FHANDLE hDataFile; /* Data file handle */
|
||||
FHANDLE hMemoFile; /* Memo file handle */
|
||||
USHORT uiHeaderLen; /* Size of header */
|
||||
USHORT uiRecordLen; /* Size of record */
|
||||
ULONG ulRecCount; /* Total records */
|
||||
char * szDataFileName; /* Name of data file */
|
||||
char * szMemoFileName; /* Name of memo file */
|
||||
BOOL fHasMemo; /* WorkArea with Memo fields */
|
||||
BOOL fHasTags; /* WorkArea with MDX or CDX index */
|
||||
BOOL fShared; /* Shared file */
|
||||
BOOL fReadOnly; /* Read only file */
|
||||
USHORT * pFieldOffset; /* Pointer to field offset array */
|
||||
BYTE * pRecord; /* Buffer of record data */
|
||||
BOOL fValidBuffer; /* State of buffer */
|
||||
BOOL fPositioned; /* Positioned record */
|
||||
ULONG ulRecNo; /* Current record */
|
||||
BOOL fRecordChanged; /* Record changed */
|
||||
BOOL fAppend; /* TRUE if new record is added */
|
||||
BOOL fDeleted; /* TRUE if record is deleted */
|
||||
BOOL fUpdateHeader; /* Update header of file */
|
||||
BOOL fFLocked; /* TRUE if file is locked */
|
||||
LPDBRELINFO lpdbPendingRel; /* Pointer to parent rel struct */
|
||||
BYTE bYear; /* Last update */
|
||||
BYTE bMonth;
|
||||
BYTE bDay;
|
||||
ULONG * pLocksPos; /* List of records locked */
|
||||
ULONG ulNumLocksPos; /* Number of records locked */
|
||||
|
||||
/*
|
||||
* ADS's additions to the workarea structure
|
||||
*
|
||||
@@ -112,6 +76,21 @@ typedef struct _ADSAREA_
|
||||
* example.
|
||||
*/
|
||||
|
||||
char * szDataFileName; /* Name of data file */
|
||||
USHORT uiHeaderLen; /* Size of header */
|
||||
USHORT uiRecordLen; /* Size of record */
|
||||
ULONG ulRecCount; /* Total records */
|
||||
ULONG ulRecNo; /* Current record */
|
||||
BYTE bYear; /* Last update */
|
||||
BYTE bMonth;
|
||||
BYTE bDay;
|
||||
USHORT * pFieldOffset; /* Pointer to field offset array */
|
||||
BYTE * pRecord; /* Buffer of record data */
|
||||
BOOL fValidBuffer; /* State of buffer */
|
||||
BOOL fRecordChanged; /* Record changed */
|
||||
BOOL fShared; /* Shared file */
|
||||
BOOL fReadOnly; /* Read only file */
|
||||
BOOL fFLocked; /* TRUE if file is locked */
|
||||
ADSHANDLE hTable;
|
||||
ADSHANDLE hOrdCurrent;
|
||||
} ADSAREA;
|
||||
|
||||
@@ -56,6 +56,7 @@ extern "C" {
|
||||
#define EDBF_SHARED 1023
|
||||
#define EDBF_APPENDLOCK 1024
|
||||
#define EDBF_READONLY 1025
|
||||
#define EDBF_INVALIDKEY 1026
|
||||
|
||||
|
||||
|
||||
@@ -64,11 +65,14 @@ extern "C" {
|
||||
|
||||
|
||||
|
||||
/* FPT's */
|
||||
/* FPT's and CDX's */
|
||||
|
||||
#define FPT_DEFBLOCKSIZE 64
|
||||
#define SIZEOFMEMOFREEBLOCK 6
|
||||
#define MAXFREEBLOCKS 82
|
||||
#define CDX_MAXKEY 240
|
||||
|
||||
|
||||
|
||||
typedef struct _MEMOHEADER
|
||||
{
|
||||
@@ -284,7 +288,7 @@ extern ERRCODE hb_cdxSysName( CDXAREAP pArea, BYTE * pBuffer );
|
||||
#define hb_cdxOrderListFocus NULL
|
||||
#define hb_cdxOrderListRebuild NULL
|
||||
#define hb_cdxOrderCondition NULL
|
||||
#define hb_cdxOrderCreate NULL
|
||||
extern ERRCODE hb_cdxOrderCreate( CDXAREAP pArea, LPDBORDERCREATEINFO pOrderInfo );
|
||||
#define hb_cdxOrderDestroy NULL
|
||||
#define hb_cdxOrderInfo NULL
|
||||
#define hb_cdxClearFilter NULL
|
||||
|
||||
@@ -2277,26 +2277,26 @@ HB_FUNC( ORDCONDSET )
|
||||
|
||||
HB_FUNC( ORDCREATE )
|
||||
{
|
||||
DBORDERCREATEINFO pOrderInfo;
|
||||
DBORDERCREATEINFO dbOrderInfo;
|
||||
|
||||
if( s_pCurrArea )
|
||||
{
|
||||
pOrderInfo.abBagName = ( BYTE * ) hb_parc( 1 );
|
||||
pOrderInfo.atomBagName = ( BYTE * ) hb_parc( 2 );
|
||||
pOrderInfo.abExpr = hb_param( 3, HB_IT_STRING );
|
||||
if( ( ( strlen( ( char * ) pOrderInfo.abBagName ) == 0 ) &&
|
||||
( strlen( ( char * ) pOrderInfo.atomBagName ) == 0 ) ) ||
|
||||
!pOrderInfo.abExpr )
|
||||
dbOrderInfo.abBagName = ( BYTE * ) hb_parc( 1 );
|
||||
dbOrderInfo.atomBagName = ( BYTE * ) hb_parc( 2 );
|
||||
dbOrderInfo.abExpr = hb_param( 3, HB_IT_STRING );
|
||||
if( ( ( strlen( ( char * ) dbOrderInfo.abBagName ) == 0 ) &&
|
||||
( strlen( ( char * ) dbOrderInfo.atomBagName ) == 0 ) ) ||
|
||||
!dbOrderInfo.abExpr )
|
||||
{
|
||||
hb_errRT_DBCMD( EG_ARG, EDBCMD_REL_BADPARAMETER, NULL, "ORDCREATE" );
|
||||
return;
|
||||
}
|
||||
pOrderInfo.itmCobExpr = hb_param( 4, HB_IT_BLOCK );
|
||||
dbOrderInfo.itmCobExpr = hb_param( 4, HB_IT_BLOCK );
|
||||
if( ISLOG( 5 ) )
|
||||
pOrderInfo.fUnique = hb_parl( 5 );
|
||||
dbOrderInfo.fUnique = hb_parl( 5 );
|
||||
else
|
||||
pOrderInfo.fUnique = hb_set.HB_SET_UNIQUE;
|
||||
SELF_ORDCREATE( ( AREAP ) s_pCurrArea->pArea, &pOrderInfo );
|
||||
dbOrderInfo.fUnique = hb_set.HB_SET_UNIQUE;
|
||||
SELF_ORDCREATE( ( AREAP ) s_pCurrArea->pArea, &dbOrderInfo );
|
||||
}
|
||||
else
|
||||
hb_errRT_DBCMD( EG_NOTABLE, EDBCMD_NOTABLE, NULL, "ORDCREATE" );
|
||||
|
||||
@@ -771,6 +771,20 @@ ERRCODE hb_cdxSysName( CDXAREAP pArea, BYTE * pBuffer )
|
||||
return SUCCESS;
|
||||
}
|
||||
|
||||
/*
|
||||
* Create new order.
|
||||
*/
|
||||
ERRCODE hb_cdxOrderCreate( CDXAREAP pArea, LPDBORDERCREATEINFO pOrderInfo )
|
||||
{
|
||||
HB_TRACE(HB_TR_DEBUG, ("hb_cdxOrderCreate(%p, %p)", pArea, pOrderInfo));
|
||||
HB_SYMBOL_UNUSED( pOrderInfo );
|
||||
|
||||
if( SELF_GOCOLD( ( AREAP ) pArea ) == FAILURE )
|
||||
return FAILURE;
|
||||
|
||||
return SUCCESS;
|
||||
}
|
||||
|
||||
/*
|
||||
* Create a memo file in the WorkArea.
|
||||
*/
|
||||
|
||||
@@ -16,13 +16,14 @@ function Main()
|
||||
dbCreate( "testcdx", aStruct, "DBFCDX", .T., "TESTCDX" )
|
||||
|
||||
? "RddName:", RddName()
|
||||
? "Press any key to continue..."
|
||||
InKey( 0 )
|
||||
// ? "Press any key to continue..."
|
||||
// InKey( 0 )
|
||||
Select( "TESTDBF" )
|
||||
SET FILTER TO TESTDBF->SALARY > 140000
|
||||
TESTDBF->( dbGoTop() )
|
||||
while !TESTDBF->( Eof() )
|
||||
TESTCDX->( dbAppend() )
|
||||
TESTCDX->CHARACTER = TESTDBF->FIRST
|
||||
TESTCDX->NUMERIC = TESTDBF->SALARY
|
||||
TESTCDX->MEMO := TESTDBF->FIRST + Chr( 13 ) + Chr( 10 ) + ;
|
||||
TESTDBF->LAST + Chr( 13 ) + Chr( 10 ) + ;
|
||||
@@ -37,9 +38,12 @@ function Main()
|
||||
? TESTCDX->( RecNo() ), TESTCDX->NUMERIC
|
||||
? TESTCDX->MEMO
|
||||
TESTCDX->( dbSkip() )
|
||||
? "Press any key to continue..."
|
||||
InKey( 0 )
|
||||
// ? "Press any key to continue..."
|
||||
// InKey( 0 )
|
||||
end
|
||||
|
||||
Select( "TESTCDX" )
|
||||
OrdCreate( "testcdx", "Character", "CHARACTER", FIELD->CHARACTER, .F. )
|
||||
|
||||
|
||||
return nil
|
||||
Reference in New Issue
Block a user