Не найдено результатов в запросе adodb select - PullRequest
0 голосов
/ 14 марта 2011

Я использую соединение ADODB в C. Код работает более или менее нормально, но я получаю ошибки, когда нет результата для моего запроса, и я пытаюсь его прочитать.Соответствующий код:

__object *con, *rec;
con = __object_create("ADODB.Connection");
if(con!=NULL) con->Open("odbc name"); 
if (con == NULL || con->State==0)
{
    return 0;
}
rec= __object_create("ADODB.RecordSet");

sprintf(query, "SELECT SUM(column) FROM table WHERE %s", constraint);
rec->CursorLocation=3;
rec->Open(query, con, 1, 3);
float result = rec->Fields(0); // <- Error here
rec->Close();
__object_delete(rec);
__object_delete(con);

Я получаю код ошибки 80020005 (несоответствие типов).Столбец БД имеет тип float.Когда есть записи, которые соответствуют ограничению, и я получаю результат, все работает отлично.Но когда он не соответствует ни одной записи, сервер БД возвращает ноль, и я получаю ошибку.К счастью, результат установлен в 0, что является разумным, но я хотел бы обнаружить это лучше.

Стандартные способы (BOF / EOF, Fields-> Count, == NULL, ...) все терпят неудачу.Большинство примеров кода, которые я могу найти, предназначены для VB, а не для C, поэтому они не очень полезны.

1 Ответ

1 голос
/ 14 марта 2011

rec->Fields(0).Value возвращает вариант перед присваиванием переменной с плавающей запятой, проверяет, представляет ли вариант VT_NULL, который указывает, что возвращаемые данные равны NULL.

...