as_DBMGetPrevRecordId

Description
ÁÖ¾îÁø ½ºÄµÀÇ ÇöÀç ·¹ÄÚµå À§Ä¡·ÎºÎÅÍ ÀÌÀü ·¹ÄÚµå ID¿Í ÇÊµå °ü·Ã Á¤º¸¸¦ ±¸ÇÑ´Ù.

Syntax
DBMErr as_DBMGetPrevRecordId(ScanId scanId, RecId* recId, P_S32 numExistFields, FieldDataInfo* fieldDataInfo);

Parameters
scanId openµÈ ½ºÄµ ID
recId ÀÌÀü ·¹ÄÚµåÀÇ ID
numExistFields  ·¹Äڵ忡 ½ÇÁ¦ °ªÀÌ Á¸ÀçÇÏ´Â ÇʵåÀÇ ¼ö
fieldDataInfo·¹Äڵ忡 ½ÇÁ¦ °ªÀÌ Á¸ÀçÇÏ´Â Çʵåµé¿¡ ´ëÇÑ Á¤º¸

Returns
value¼³¸í
DBM_OK ÀÌÀü ·¹ÄÚµå id¸¦ ¼º°øÀûÀ¸·Î ±¸ÇÑ °æ¿ì
(À妽º ½ºÄµÀÌ ¾Æ´Ñ °æ¿ì¿¡¸¸ »ç¿ëµÈ´Ù. À妽º ½ºÄµÀÇ °æ¿ì, DBM_OK ´ë½Å DBM_OK_MATCH³ª DBM_OK_UNMATCH°¡ »ç¿ëµÈ´Ù. )
DBM_OK_MATCH ÀÌÀü ·¹ÄÚµå id¸¦ ¼º°øÀûÀ¸·Î ±¸ÇÑ °æ¿ì
À妽º ½ºÄµ¿¡¸¸ »ç¿ëµÇ´Â °ªÀ̸ç, ÀÌ´Â ´ÙÀ½ ·¹Äڵ尡 À妽º ½ºÄµ open½Ã ¼³Á¤ÇÑ Á¶°Ç¿¡ ¸Â´Â ·¹ÄÚµå ÀÓÀ» ÀǹÌÇÑ´Ù.
DBM_OK_UNMATCH ÀÌÀü ·¹ÄÚµå id¸¦ ¼º°øÀûÀ¸·Î ±¸ÇÑ °æ¿ì
À妽º ½ºÄµ¿¡¸¸ »ç¿ëµÇ´Â °ªÀ̸ç, ÀÌ´Â ´ÙÀ½ ·¹Äڵ尡 À妽º ½ºÄµ open½Ã ¼³Á¤ÇÑ Á¶°Ç¿¡ ¸ÂÁö¾Ê´Â ·¹ÄÚµå ÀÓÀ» ÀǹÌÇÑ´Ù.
DBM_NO_MORE_REC´õ ÀÌ»ó ·¹Äڵ尡 ¾ø´Â °æ¿ì
DBM_EMPTY_TABLEÅ×ÀÌºí¿¡ ·¹Äڵ尡 ÀüÇô ¾ø´Â °æ¿ì
DBM_EMPTY_CAT ÇØ´ç Category¿¡ ·¹Äڵ尡 ÀüÇô ¾ø´Â °æ¿ì
(Category¿¡ ´ëÇÑ ½ºÄµÀÎ °æ¿ì¿¡¸¸ »ç¿ëÇÏ´Â °ª)
DBM_INVALID_SCAN_IDÁÖ¾îÁø ½ºÄµ id¸¦ °®´Â ½ºÄµÀÌ Á¸ÀçÇÏÁö ¾Ê´Â °æ¿ì
DBM_DB_NOT_INITEDµ¥ÀÌŸº£À̽º°¡ ÃʱâÈ­µÇ¾î ÀÖÁö ¾ÊÀº °æ¿ì
DBM_OUT_OF_DATE_SCANÇØ´ç ½ºÄµÀÌ »ç¿ëÇÏ´Â À妽º°¡ º¯°æµÈ °æ¿ì

Comments
ÀÀ¿ë ÇÁ·Î±×·¥¿¡¼­ Å×ÀÌºí¿¡ Á¸ÀçÇÏ´Â Àüü ÇÊµå ¼ö ÀÌ»óÀÇ FieldDataInfo ¹è¿­À» »ý¼ºÇؼ­ ¸Å°³º¯¼ö·Î ³Ñ°Ü¾ß ÇÑ´Ù. ±×·¯¸é ½ÇÁ¦ Á¸ÀçÇÏ´Â ¼ö ¸¸Å­ÀÇ ÇÊµå µ¥ÀÌŸ¿¡ ´ëÇÑ Á¤º¸¸¦ ¹ÝȯÇØÁØ´Ù.

¸Å°³º¯¼ö fieldDataInfoÀÇ ÀڷᱸÁ¶´Â ´ÙÀ½°ú °°´Ù.
typedef struct {
  FieldIdid;
  FieldDataType type ;
  S32 len ;
} FieldDataInfo ;
DBM_OK_MATCH, DBM_OK_UNMATCH´Â À妽º ½ºÄµ¿¡¸¸ »ç¿ëµÇ´Â °ªÀÌ´Ù. °Ë»öµÇ´Â ÀÌÀü ·¹Äڵ尡 ½ºÄµ open´ç½Ã ¼³Á¤µÈ key °ª°ú matchµÇ´Â ·¹ÄÚµåÀÎ °æ¿ì, DBM_OK_MATCH¸¦ ¸®ÅÏÇÏ°í, ±×·¸Áö ¾ÊÀº °æ¿ì¿¡´Â DBM_OK_UNMATCH¸¦ ¸®ÅÏÇÑ´Ù.

½ºÄµÀ» OpenÇÏ°í as_DBMInsertRecord, as_DBMDeleteRecord, as_DBMSetFieldContent (À妽º ÇÊµå °ª º¯°æ)¸¦ ¼öÇàÇÑ ÈÄ¿¡´Â as_DBMGetPrevRecordId ¸¦ »ç¿ëÇÒ ¼ö ¾ø´Ù. À妽º°¡ º¯°æµÇ¾úÀ¸¹Ç·Î ½ºÄµ¿¡¼­ ¿Ã¹Ù¸¥ ·¹Äڵ带 ¾òÀ» ¼ö ¾ø±â ¶§¹®ÀÌ´Ù.

See Also
as_DBMGetPrevRecordIdWithJump, as_DBMGetNextRecordId

Example
TableId tableId; ScanId scanId; RecId recId; DBMErr ret=DBM_OK;
int numFields, numExistFields; FieldDataInfo *fieldDataInfo;
FieldData fieldData;
/* Get tableId */
ret =as_ DBMOpenSeqScanTable( tableId, NULL_CAT_ID, DBM_PRIM, 0,
DBM_INCR, &scanId);
if( ret < DBM_OK ) // error handling
ret = as_DBMGetNumFieldsInTable(tableId, &numFields);
...
/* allocate space for fieldDataInfo */
fieldDataInfo =(FieldDataInfo*)Lmalloc( sizeof(FieldDataInfo) * numFields );
ret=as_DBMGetPrevRecordId(scanId,recId,&numExistFields, fieldDataInfo)
while(ret >= DBM_OK ) {
   /*memory allocation for field data and assign fieldDataInfo to fieldData*/
   fieldData = (FieldData*)Lmalloc( sizeof(FieldData) *numExistFields);
   for( i=0; i < numExistFields; i++) {
     fieldData[i].id = filedDataInfo]i].id;
     fieldData[i].type = filedDataInfo]i].type;
     fieldData[i].len = filedDataInfo]i].len;
     if(fieldData[i].type==DBM_STRING || fieldData[i].type==DBM_BLOB )
       fieldData[i].content.str = Lmalloc(fieldData[i].len );
   }
   ret = as_DBMGetRecordAllFields( scanId, recId, fieldId, len, fieldDataType, content );
   ...
   for( i=0; i<numExistFields; i++) {
     if(fieldData[i].type==DBM_STRING || fieldData[i].type==DBM_BLOB )
       Lfree( fieldData[i].content.str );
   }
   ret=as_DBMGetPrevRecordId(scanId, &recId, &numExistFields, fieldDataInfo);
}

cf) as_DBMGetPrevRecordId(...) in case of as_ DBMOpenIndexScanTable(...)
   if( ret == DBM_OK_MATCH )
     //process for record matching with key value;
   if( ret == DBM_OK_UNMATCH)
     //process for record unmatching with key value;