Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C++ Builder > Непонятные ошибки


Автор: chaos 19.6.2005, 15:52
Код

void __fastcall TForm1::FormCreate(TObject *Sender)
{
    ImageList1->Clear();
    ComboBox1->Clear();

    ADOQuery1->SQL->Clear();
    ADOQuery1->SQL->Text = "SELECT Name, Obj FROM Icons";
    ADOQuery1->Open();
    ADOQuery1->First();

    TIcon *icon = new TIcon;

    while(!ADOQuery1->Eof)
    {

        ComboBox1->Items->Add(ADOQuery1->FieldByName("Name")->AsString);

        icon->LoadFromStream(ADOQuery1->CreateBlobStream(ADOQuery1->FieldByName("Obj"), bmRead));
        ImageList1->AddIcon(icon);

        ADOQuery1->Next();
    }
    delete icon;

    ADOQuery1->Close();
}

ADOQuery1->Close(); на этом месте постоянно вылетает ошибка, хотя если перед этой строкой поставить ADOQuery1->First(); то вроде все работает


А когда Выполняю следующий код вываливается ошибка на строке
Form1->ADOQuery1->ExecSQL();
самое что интересное если из программы убрать обработчик FormCreate то код ниже успешно отрабатывается
Код

void __fastcall TOKBottomDlg::OKBtnClick(TObject *Sender)
{
    try
    {
        __try
        {
            TMemoryStream *IcoStream = new(TMemoryStream);
            Image1->Picture->Icon->SaveToStream(IcoStream);

            Form1->ADOQuery1->SQL->Clear();
            Form1->ADOQuery1->SQL->Text = "INSERT INTO icons (Name, Obj) VALUES(:nme, :ico)";

            Form1->ADOQuery1->Parameters->ParamByName("nme")->Value = Edit2->Text;
            Form1->ADOQuery1->Parameters->ParamByName("ico")->LoadFromStream(IcoStream, ftGraphic);
            Form1->ADOQuery1->ExecSQL();
        }
        __finally
        {
            if (Form1->ADOQuery1->Active)
                Form1->ADOQuery1->Close();

            delete IcoStream;
        }
    }
    catch (Exception &E)
    {
        ShowMessage(E.Message);
    }
}


почему такое происходит???

Автор: chaos 19.6.2005, 17:09
вот подумал может нельзя с одни и темже ADOQuery делать Open и ExecSQL?
Сделал так где запросы должны возвращать записи использую ADOQuery, где не должно ADOCommand

Автор: _hunter 21.6.2005, 10:47
дык само-собой нельзя.
Цитата
Call ExecSQL to execute the SQL statement currently assigned to the SQL property. Use ExecSQL to execute queries that do not return a cursor to data (such as INSERT, UPDATE, DELETE, and CREATE TABLE).

для SELECT' a -- юзай Open()

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)