PX_insert_record Inserts a new record in the Paradox file
#include <paradox.h>
int PX_insert_record(pxdoc_t *pxdoc, pxval_t **dataptr)
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
PX_insert_record 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.
Returns the record number on success or -1 on failure. The number
of the first record is 0.
PX_retrieve_record(3),
PX_delete_record(3),
PX_update_record(3)
This manual page was written by Uwe Steinmann uwe@steinmann.cx.