&dhucpackage; &dhsection;

&funcname;

Inserts a new record in the Paradox file

#include <paradox.h>

int &funcname;(pxdoc_t *pxdoc, pxval_t **dataptr)

## DESCRIPTION

Inserts a new record stored in the array `dataptr` into a Paradox file. The position of the record will be determined by the function itself, starting at the beginning of the file and searching towards the end for a free slot. A free slot can be the result of former calls of `PX_delete_record(3)` or not completely filled data blocks in the input file. If there is no free slot within the file, then a new record will be added at the end.

Blobs will be automatically written if a blob file was set with `PX_set_blob_file(3)`.

The memory for `dataptr` and the field values can be freed after `&funcname;` has been called.

Each single element in the array of pointers to pxval_t can be easily created with `MAKE_PXVAL(pxdoc_t *pxdoc, pxval_t *val)` and setting the actual value afterwards. A quite common way to build up the record is the following:

    dataptr = (pxval_t **) malloc(PX_get_num_fields(pxdoc)*sizeof(pxval_t *));
    MAKE_PXVAL(pxdoc, dataptr[0]);
    dataptr[0]->type = pxfLong;
    dataptr[0]->value.lval = 45;
    dataptr[1]->type = pxfAlpha;
    dataptr[1]->value.str.val = "test";
    dataptr[1]->value.str.len = 4;

    PX_insert_record(pxdoc, dataptr);
    free(dataptr[0]);
    free(dataptr[1]);
    free(dataptr);

There is currently no need to set the type, though it is recommended.

The field types pxfMemoBLOb and pxfFmtMemoBLOb are treated like strings.

Fields of type pxfAutoInc are automatically incremented if its value is set to NULL. In such a case the value is taken from the header of the database. You should not have more than one field of type pxfAutoInc in your database, otherwise the automatic incrementation will not work.

## RETURN VALUE

Returns the record number on success or -1 on failure. The number of the first record is 0.

## SEE ALSO

`PX_retrieve_record(3)`, `PX_delete_record(3)`, `PX_update_record(3)`

## AUTHOR

This manual page was written by &dhusername; &dhemail;.