Кодга работаю через isc_dsql_execute - т.е. рабтает тот код - который в данном случае закоментарен, всё работает правильно. В таблицу БД всё записывается верно как и ожидается.
Когда работаю через isc_dsql_execute_immediate - то программа отрабатывает без ошибок - но в таблицу БД в три первых поля (они все SQL_LONG) записываются только нули. Одни нули, а поле SQL_TEXT типа записываются теже значения - т.е. верные.
Тип пр этом первых трёх параметров и размер клинт "видит", а значения почему-то нет

Код: Выделить всё
XSQLDA *xsqlda=NULL;
XSQLVAR *sqlvar=NULL;
xsqlda=(XSQLDA*)malloc(XSQLDA_LENGTH(4));
xsqlda->version=SQLDA_VERSION1;
xsqlda->sqln=4;
xsqlda->sqld=4;
char *str_sql_stmt="insert into fire_info (id, value_, type_, rem) values(?, ?, ?, ?)";
// declare SQL statement
/*
isc_stmt_handle stmt=NULL;
isc_dsql_allocate_statement(status, &h_db_agroprom, &stmt);
if (status[0]==1 && status[1]) {
isc_print_status(status);
}
isc_dsql_prepare(status, &h_tr_agroprom, &stmt, 0, str_sql_stmt, 1, xsqlda);
if (status[0]==1 && status[1]) {
isc_print_status(status);
}
isc_dsql_describe_bind(status, &stmt, 1, xsqlda);
if (status[0]==1 && status[1]) {
isc_print_status(status);
}
*/
int id=1, value_=id+10, type_=2;
static char remark[255], num[3];
int i;
for (i=0; i<10; i++) {
sqlvar=xsqlda->sqlvar;
itoa(i, num, 10);
strcpy(remark, "remark string: 1");
strcat(remark, num);
sqlvar->sqltype=SQL_LONG;
sqlvar->sqldata=(char*)&id;
sqlvar->sqllen=sizeof(id);
sqlvar++;
sqlvar->sqltype=SQL_LONG;
sqlvar->sqldata=(char*)&value_;
sqlvar->sqllen=sizeof(value_);
sqlvar++;
sqlvar->sqltype=SQL_LONG;
sqlvar->sqldata=(char*)&type_;
sqlvar->sqllen=sizeof(type_);
sqlvar++;
sqlvar->sqltype=SQL_TEXT;
sqlvar->sqldata=remark;
sqlvar->sqllen=strlen(remark);
// isc_dsql_execute(status, &h_tr_agroprom, &stmt, 1, xsqlda);
isc_dsql_execute_immediate(status, &h_db_agroprom, &h_tr_agroprom, 0, str_sql_stmt, 1, xsqlda);
if (status[0]==1 && status[1]) {
isc_print_status(status);
}
id++;
value_++;
}