|
|
После
создания XSQLDA для передачи параметров в SQL
инструкцию, SQL
инструкция может быть создана и
подготовлена. Локальные
переменные, соответствующие параметрам
метки - заполнителя в строке должны быть
присвоены соответствующим полям sqldata
структурах XSQLVAR:
char
*str = "UPDATE DEPARTMENT SET BUDGET = ?, LOCATION = ?"; Эта инструкция содержит
два параметра BUDGET
и LOCATION.
isc_stmt_handle stmt;
/* Обьявите дескриптор инструкции. */
stmt
= NULL;
/* Установите в NULL перед
выделением памяти. */
. . .
isc_dsql_allocate_statement(status_vector, &db1, &stmt);
isc_dsql_prepare(status_vector,
&trans, &stmt, 0, str, 1,in_sqlda);
isc_dsql_describe_bind(status_vector,
&stmt, 1, in_sqlda);
if
(in_sqlda->sqld > in_sqlda->sqln)
{
n = in_sqlda->sqld;
free(in_sqlda);
in_sqlda = (XSQLDA *)malloc(XSQLDA_LENGTH(n));
in_sqlda->sqln = n
in_sqlda->version = SQLDA_VERSION1;
isc_dsql_describe_bind(status_vector, &stmt, 1, in_sqlda);
}
Следующий
пример кода иллюстрирует эти шаги,
выполненяет цикл для каждой структуры XSQLVAR
принадлежащей in_sqlda XSQLDA: for
( i=0, var = in_sqlda->sqlvar; i < in_sqlda->sqld; i++, var++ ) {
/* Обрабатываем здесь каждую XSQLVAR
структуру.
Var
указывает на структуру XSQLVAR. */
dtype = (var->sqltype & ~1); /* drop NULL flag for now */
switch(dtype)
{
case SQL_VARYING: /* приводит к SQL_TEXT*/
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));
/*
присваивается значения параметру */
*(long
*)(var->sqldata) = 17;
break;
. . .
} /* end of switch statement */
if (var->sqltype & 1)
{
/* выделяется переменная для NULL индикатора
*/
var->sqlind
= (short *)malloc(sizeof(short));
} }
/* конец цикла
*/
isc_dsql_execute(status_vector,
&trans, &stmt, 1, in_sqlda);
|
Дизайн: Piton Alien |