Subject Re: [ib-support] API XSQLVAR struct ?
Author Raul Chirea
Hi William,

From: "William L. Thomson Jr." <support@...>

> I then do a loop like
> for(int i=0;i<num_cols;i++) {
> osqlda->sqlvar[i].sqldata = (char *)&var[i];
> osqlda->sqlvar[i].sqltype = SQL_VARYING + 1;
> osqlda->sqlvar[i].sqlind = &flag[i];
> }
> So I am asking why the only way I can get at the data is by passing a
> struct.
> osqlda->sqlvar[i].sqldata = (char *)&var[i];
> and then doing
> var[i].var_string
> To get at my data. I would like to not use a struct if possible?
> But every attempt at something other than a struct fails?

That is because you set the output type for all fields to be SQL_VARYING:

> osqlda->sqlvar[i].sqltype = SQL_VARYING + 1;

This way the server+API converts data in a field to VARCHAR.
VARCHAR means that at the begining of the data buffer first 2 bytes contains
a short int (2 bytes) and next bytes are the string itself having a length
indicated by that short int at the begining of buffer. Note that the string
is not a NULL terminated string.

Instead of converting output data to VARCHAR (SQL_VARYING) you should
convert it to SQL_TEXT which is the standard NULL terminated string used in


PS: Thanking me once per message is more than enough !