Previous Topic

Next Topic

ReadIsamVData

ISAM read variable-length data at record position.

Short Name

REDIVREC()

Type

ISAM function

Declaration

COUNT ReadIsamVData(COUNT datno, LONG recbyt, pVOID recptr, pVRLEN plen)

Description

ReadIsamVData() reads a variable-length ISAM record and is the variable-length analog to ReadIsamData(). ReadIsamVData() reads the data at record position recbyt for data file datno into the buffer pointed to by recptr for plen bytes.

ReadIsamVData() decreases network traffic by eliminating the need to make two separate function calls as follows:

  • Retrieve the fixed-length portion of the record with an ISAM search routine, such as FirstRecord(),
  • Call ReReadVRecord() to retrieve the variable length component.

As with the other variable-length ISAM functions, ReadIsamVData() can read all or a portion of the variable-length record, potentially further reducing network traffic.

Return

Value

Symbolic Constant

Explanation

0

NO_ERROR

Successful ISAM read operation.

33

DNUL_ERR

recptr is NULL. No data file read performed.

36

READ_ERR

Read error occurred. Bad record byte value.

42

DLOK_ERR

Could not get lock on data record. No data file read performed.

160

ITIM_ERR

Record deleted by another user.

633

NPLN_ERR

plen is NULL.

634

NLEN_ERR

*plen is negative on input.

See c-tree Plus Error Codes for a complete listing of valid c-tree Plus error values.

Example

COUNT   datno;
LONG   recbyt[16];
TEXT   recptr[1024];
VRLEN   varlen;

/* fill in an array of record positions */
FillRecordByteArray(recbyt);

varlen = 64; /* set plen to 64 bytes */

/* read *plen bytes of the 10th record in the array */
if (ReadIsamVData(datno,recbyt[9],recptr,&varlen))
    printf("\nCould not read 10th record, error = %d", isam_err);
else
    printf("\nSuccessful record read at offset %ld", recbyt[10]);

Limitations

The recbyt parameter in this function is a 4-byte value capable of addressing at most 4 gigabytes. If your application supports HUGE files (greater than 4 gigabytes), you must use the ctSetHgh() and ctGetHgh() functions to set or get the high order 4 bytes of the file offset.

See also

ctSetHgh(), ctGetHgh(), FirstRecord(), ReReadVRecord(), ReadData(), ReadIsamData().