Получается только обработать текстовые запросы, другие, например, вещественные данные не выводятся.. Что мне надо делать ?
Вот, что у меня получилось написать...
Код: Выделить всё
void __fastcall TForm1::Button2Click(TObject *Sender)
{
char *sel_str =
"SELECT radius FROM planets;";
isc_tr_handle trans = 0;
int num_cols, i;
isc_stmt_handle stmt = NULL;
XSQLDA *sqlda;
XSQLVAR *var;
char empdb[128];
long fetch_stat;
sqlda = (XSQLDA *) malloc(XSQLDA_LENGTH(3));
sqlda->sqln = 3;
sqlda->version = 1;
isc_start_transaction(status_vector, &trans, 1, &db1, 0, NULL);
isc_dsql_allocate_statement(status_vector, &db1, &stmt);
isc_dsql_prepare(status_vector, &trans, &stmt, 0, sel_str, 1, sqlda);
isc_dsql_describe(status_vector, &stmt, 1, sqlda);
num_cols = sqlda->sqld;
for (i=0, var = sqlda->sqlvar; i < num_cols; i++, var++)
{
ISC_SHORT dtype = (var->sqltype & ~1);
switch(dtype)
{
case SQL_VARYING:
var->sqltype = SQL_TEXT;
var->sqldata = (char *)malloc(sizeof(char)*var->sqllen);
break;
case SQL_TEXT:
var->sqldata = (char *)malloc(sizeof(char)*var->sqllen);
break;
case SQL_LONG:
var->sqldata = (char *)malloc(sizeof(long)*var->sqllen);
break;
case SQL_SHORT:
var->sqldata = (char *)malloc(sizeof(short)*var->sqllen);
break;
case SQL_DOUBLE:
var->sqldata = (char *)malloc(sizeof(double)*var->sqllen);
break;
}
if (var->sqltype & 1)
{
var->sqlind = (short *)malloc(sizeof(short));
}
}
isc_dsql_execute(status_vector, &trans, &stmt, SQL_DIALECT_V6, NULL);
while ((fetch_stat = isc_dsql_fetch(status_vector, &stmt, SQL_DIALECT_V6, sqlda)) == 0)
{
for (i = 0; i < num_cols; i++)
{
Form1->Memo1->Lines->Add(sqlda->sqlvar[i].sqldata);
}
}
}