Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Базы данных > IBDataSet проблема добавления


Автор: MMihan 10.4.2013, 08:12
Добрый день!
Выходит ошбика при добвление записи smile   empty query, пробывал по разному , выходят другие ... ошибки, Подскажите пожалуста как должно быть (последовать кода при добавление  записи)
Fireberd 2.5   Создана таблица  через IBExpert 
на форме лежит DBGrid  при создание формы выполняется 

Код

void __fastcall TOrg::FormShow( TObject * Sender )
{
    DM->IBDataSet1->Close( );
        DM->IBDataSet1->SelectSQL->Add
        ( "SELECT ORG_ID, ORG_NAME,ORG_RUKOVOD,ORG_INN, ORG_KPP,ORG_ADRES,ORG_OGRN,ORG_TEL,ORG_PREDSTAV FROM ORG");
    
    DM->IBDataSet1->Open( );
    LinkLabel1->Color == Edit1->Color;
}


На форме есть кнопка Add для открытие другой формы что бы добавлять новую запись.

добавляется через Edit  и нажимется кнока Сохранить ... 

По кноке Сохранить  выполняется следуюший код
Код

void __fastcall TAdd_ORG::BitBtn1Click( TObject * Sender )
{

            DM->IBDataSet1->SelectSQL->Clear( );

            DM->IBDataSet1->InsertSQL->Add
        ( " insert into ORG (ORG_NAME,ORG_RUKOVOD,ORG_INN, ORG_KPP,ORG_ADRES,ORG_OGRN,ORG_TEL,ORG_PREDSTAV)");
            DM->IBDataSet1->InsertSQL->Add
        ( " values (:ORG_NAME,:ORG_RUKOVOD,:ORG_INN, :ORG_KPP,:ORG_ADRES,:ORG_OGRN,:ORG_TEL,:ORG_PREDSTAV)");
            
            DM->IBDataSet1->ExecSQL( );

            DM->IBDataSet1->ParamByName( "ORG_NAME" )->AsString = Name_E->Text;
            DM->IBDataSet1->ParamByName( "ORG_RUKOVOD" )->AsString =Rukovod_E->Text;
            // DM->IBDataSet1->ParamByName( "ORG_INN" )->AsInteger = StrToInt(INN_E1->Text);
            // DM->IBDataSet1->ParamByName( "ORG_KPP" )->AsInteger = StrToInt(KPP_E->Text);
            // DM->IBDataSet1->ParamByName( "ORG_ADRES" )->AsString = Adres_E->Text;
            // DM->IBDataSet1->ParamByName( "ORG_OGRN" )->AsInteger = StrToInt(OGRN_E->Text);
            // DM->IBDataSet1->ParamByName( "ORG_TEL" )->AsString = Tel_E->Text;
            // DM->IBDataSet1->ParamByName( "ORG_PREDSTAV" )->AsString = Predstav_E->Text;
            DM->IBDataSet1->Post( );
        
            DM->IBTransORG->StartTransaction( );
            DM->IBTransORG->Commit( );
            DM->IBTransORG->Active = false;
    
}





Автор: Riviero 16.4.2013, 09:53


Цитата(MMihan @  10.4.2013,  08:12 Найти цитируемый пост)
          DM->IBTransORG->StartTransaction( );


Это начало транзакции, должно быть написано до внесения изменений. (До Post и Exec)


Цитата(MMihan @  10.4.2013,  08:12 Найти цитируемый пост)
            DM->IBTransORG->Commit( );


Применение транзакции. Пишется после внесения данных в базу (происходит сама запись).

А у тебя получается, что ничего туда и не пишется. Точнее пишется, но без транзакций. Либо убери эти 2 строчки, либо переставь начало транзакции.


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