C++ Builder: получение значений через ADOQuery с помощью SELECT

Вопрос как для Delphi-кодеров, так и для C++ Builder, потому что я использую те же компоненты. Я пытаюсь заполнить ярлыки на форме данными из базы данных. Я делаю запрос SELECT через TADOQuery. Но когда я пытаюсь получить результат, я всегда получаю сообщение об ошибке типа "ADOQuery1: поле 'count' not found". 'id', переданный функции, является значением поля автоинкремента, которое ТОЧНО существует в базе данных (оно было получено через DBLookupComboBox). Кроме того, выполнение запроса вручную для отображения результата в DBGrid является успешным. Запрашивать без параметров и записывать значение 'id' в строку запроса тоже не удается. В чем проблема? Вот код

void TSellForm::LoadData(int id) {
    TADOQuery* q = DataModule1->ADOQuery1;
    q->Active = false;
    try
    {
        q->SQL->Text = "select * from drugs where(id=:id)";
        q->Parameters->ParamByName("id")->Value = IntToStr(id);
        q->ExecSQL();
        this->LabelAvail->Caption = q->FieldByName("count")->Value;
    }
    catch (Exception* e) {
        MessageBox(NULL, PChar(WideString(e->Message)),
            L"Exception", MB_OK|MB_ICONWARNING);
    }
    q->SQL->Clear();
}

2 ответа

Решение

ExecSQL используется только для операторов SQL, которые не возвращают набор записей, и для определения результатов, которые вы используете RowsAffected,

За SELECT операторы (которые возвращают набор записей), вы используете Open или установить Active к истине.

Также, count является зарезервированным словом в большинстве диалектов SQL (как в SELECT Count(*) FROM ..., так что если у вас есть столбец с таким именем, вам нужно его избежать, как правило, используя либо [] или двойные кавычки вокруг него или путем наложения его в SELECT сам.

ADOQuery1->Close();
ADOQuery1->SQL->Text= "SELECT * FROM reportTble WHERE (firstName =:firstName) " ;
ADOQuery1->Parameters->ParamByName("firstName")->Value =  textBox->Text ;
ADOQuery1->Open();

Вот как вы можете использовать ADOQuery

Другие вопросы по тегам