as_DBMGetPrevRecordIdWithJump

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

Syntax
DBMErr as_DBMGetPrevRecordIdWithJump(ScanId scanId, S32 numJumps, RecId* recId, P_S32 numExistFields, FieldDataInfo* fieldDataInfo);

Parameters
scanIdopenµÈ ½ºÄµ ID
numJumps ±¸ÇÏ°íÀÚ ÇÏ´Â ÀÌÀü ·¹Äڵ尡 ÇöÀç ·¹ÄÚµå·ÎºÎÅÍ ¶³¾îÁ® ÀÖ´Â À§Ä¡Á¤º¸(offset)
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_INVALID_OFFSET numJumps¸¸Å­ÀÇ ÀÌÀü ·¹Äڵ尡 Á¸ÀçÇÏÁö ¾Ê´Â °æ¿ì ¶Ç´Â numJumps <= 0ÀÎ °æ¿ì
DBM_EMPTY_TABLE Å×ÀÌºí¿¡ ·¹Äڵ尡 ÀüÇô ¾ø´Â °æ¿ì
DBM_EMPTY_CAT ÇØ´ç Category¿¡ ·¹Äڵ尡 ÀüÇô ¾ø´Â °æ¿ì
(Category¿¡ ´ëÇÑ ½ºÄµÀÎ °æ¿ì¿¡¸¸ »ç¿ëÇÏ´Â °ª)
DBM_INVALID_SCAN_IDÁÖ¾îÁø ½ºÄµ id¸¦ °®´Â ½ºÄµÀÌ Á¸ÀçÇÏÁö ¾Ê´Â °æ¿ì
DBM_DB_NOT_INITEDµ¥ÀÌŸº£À̽º°¡ ÃʱâÈ­µÇ¾î ÀÖÁö ¾ÊÀº °æ¿ì
DBM_OUT_OF_DATE_SCANÇØ´ç ½ºÄµÀÌ »ç¿ëÇÏ´Â À妽º°¡ º¯°æµÈ °æ¿ì

Comments
as_DBMGetPrevRecordId¸¦ ¿©·¯ ¹ø È£ÃâÇÏ´Â °Í°ú °°Àº ±â´ÉÀ» ÇÏ´Â ÇÔ¼öÀÌ´Ù.
±×·¯¹Ç·Î, ScanÀ» openÇÑ ÀÌÈÄ ·¹ÄÚµå id¸¦ ±¸ÇÏ´Â ÃÖÃÊÀÇ È£ÃâÀ̶ó¸é, scan¿¡ ÇØ´çµÇ´Â ÃÖÃÊÀÇ ·¹ÄÚµå·ÎºÎÅÍÀÇ numJumps-1¸¸Å­ ¶³¾îÁø ÀÌÀü ·¹Äڵ带 ±¸ÇÏ°Ô µÈ´Ù´Â Á¡¿¡ À¯ÀÇÇØ¾ß ÇÑ´Ù. Áï, scan¿¡ ´ëÇÑ ÃÖÃÊÀÇ È£ÃâÀ̸鼭 numJumps==1ÀÎ °æ¿ì, ÃÖÃÊÀÇ ·¹Äڵ带 ±¸ÇÏ°Ô µÈ´Ù.

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

¸Å°³º¯¼ö fieldDataInfoÀÇ ÀڷᱸÁ¶´Â ´ÙÀ½°ú °°´Ù.
typedef struct {
  FieldId id;
  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_DBMGetNextRecordId ¸¦ »ç¿ëÇÒ ¼ö ¾ø´Ù. À妽º°¡ º¯°æµÇ¾úÀ¸¹Ç·Î ½ºÄµ¿¡¼­ ¿Ã¹Ù¸¥ ·¹Äڵ带 ¾òÀ» ¼ö ¾ø±â ¶§¹®ÀÌ´Ù.

See Also
as_DBMGetPrevRecordId, as_DBMGetNextRecordIdWithJump

Example
TableId tableId; ScanId scanId; RecId recId; DBMErr ret=DBM_OK;
S32 numFields, numExistFields; FieldDataInfo fieldDataInfo;
FieldData fieldData;
S32 numJumps;
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 );
numJumps = 2;
while( (ret = as_DBMGetPrevRecordIdWithJump( scanId, &recId, &numExistFields, fieldDataInfo, numJumps) >= DBM_OK ) {
   /*memory allocation for field data and assign fieldDataInfo to fieldData*/
   fieldData = (FieldData*)Lmalloc( sizeof(FieldData) *numExistFields);
     ...
   ret = as_DBMGetRecordAllFields( scanId, recId, fieldId, len, fieldDataType, content );
     ...
}