db_select

	acnet_status.i2.v = db_select(handle.g.v, request_buffer.i1a.r,
				      num_rows.u4.r, bytes_per_row.u4.v,
				      reply_buffer.g.v)

	This routine reads data from relational databases using SQL.
	Help with datatypes and creating tables is in intro_database.
	Multiple SQL commands are allowed, but in most cases all returned
	data sets must be homogenous to avoid errors.

	handle		database connection handle returned from
			a previous call to db_open
	request_buffer	SQL statment text, NULL terminated string
	num_rows	an input/output parameter, input is number of
			rows that will fit in reply_buffer, output
			is number of rows actually returned.
			Ignored if db_select is setting up
			db_nextrow call.
	bytes_per_row	EXACT size of each and every returned row
			(sum of the lengths of all columns requested)
			If db_select is setting up a call to
			db_nextrow and bytes_per_row is not passed in
			db_nextrow, this value is used.
	reply_buffer	user's array of structures into which the
			returned rows will be moved, NULL if
			db_nextrow is going to be called

 Note on text/image columns:
	Sybase image and text columns are treated specially.  Instead of
	embedding the data directly into the caller's reply_buffer, a buffer is
	malloc'd and a pointer to it is placed in the reply_buffer.  The
	function db_free_image should be used to free the buffer responsibility
	to free the image/data buffers.  One buffer is malloc'd for each column
	of each row that contains image/text data.  All non-NULL buffer
	pointers MUST be freed, or a memory leak will result.

	The column in the reply_buffer should be declared as "unsigned char*".
	If the length of the image/text data is needed (i.e., if it is not
	fixed length or self-describng) then you should include
	"datalength(name)" as one of the columns of the query (where "name" is
	the name of the column in question).  For convenience, a null byte is
	appended to text data.

 notes:
 -----
	01. This function may also be used to modify data, however in the
	    case when no explicit result or status is expected, the db_modify
	    function is more appropriate.

	This function returns ACNET status values as follows:

	OK			success
	SQL_SMALLROW		success, but row is smaller than bytes_per_row
	SQL_MOREROWS		success, but more than num_rows are available
	SQL_xxx			database access failure

	This function requires the following include files:

	clib_h, acnet_errors_h

	Related functions:

	db_modify, db_open, db_close, db_error, db_nextrow, db_free_image

	C/C++ usage:

	usage example