Код: Выделить всё
main_sqlda = (XSQLDA *)malloc(XSQLDA_LENGTH(3));
main_sqlda->sqln = 3;
main_sqlda->sqld = 3;
main_sqlda->version = 1;
if (isc_dsql_prepare(status, &trans, &main_stmt, 0, main_select, 1, NULL))
{
ERREXIT(status, 1)
}
isc_dsql_describe(status, &main_stmt, 1, main_sqlda);
for (i=0, main_var = main_sqlda->sqlvar; i < main_sqlda->sqld; i++, main_var++)
{
main_dtype = (main_var->sqltype & ~1);
switch(main_dtype)
{
case SQL_VARYING:
main_var->sqldata = (char *)malloc(sizeof(char)*main_var->sqllen + 2);
break;
case SQL_TEXT:
main_var->sqldata = (char *)malloc(sizeof(char)*main_var->sqllen);
break;
case SQL_LONG:
main_var->sqldata = (char *)malloc(sizeof(long));
break;
case SQL_SHORT:
main_var->sqldata = (char *)malloc(sizeof(short));
break;
}
main_var->sqlind = (short *)malloc(sizeof(short));
}
if (isc_dsql_execute(status, &trans, &main_stmt, 1, NULL))
{
ERREXIT(status, 1)
}
isc_dsql_set_cursor_name(status, &main_stmt, "main_cursor", NULL);
while ((main_fetch_stat = isc_dsql_fetch(status, &main_stmt, 1, main_sqlda)) == 0)
{
for(i = 0; i <= col_count - 1; i++)
{
main_dtype = (main_sqlda->sqlvar[i].sqltype & ~1);
switch(main_dtype)
{
case SQL_LONG:
strcpy(long_s, "");
if (*(short *) (chn_sqlda->sqlvar[chn_i].sqlind) == -1)
sprintf(long_s, "%s", "NULL");
else
sprintf(long_s, "%d", *(long *) (main_sqlda->sqlvar[i].sqldata));
}
}
}
if (main_fetch_stat != 100L)
{
ERREXIT(status, 1)
}
if (isc_dsql_free_statement(status, &main_stmt, DSQL_close))
{
ERREXIT(status, 1)
}