Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Ошибка при преобразовании формы

16K
08 октября 2009 года
iRain
72 / / 12.03.2008
Если пытаюст преобразовать главную форму, например:

 
Код:
FormStyle = fsMDIForm;


Выдает ошибку:
rised exception class EIBClientError with message 'Cannot perform operation -- DB is currently open'.
11
08 октября 2009 года
oxotnik333
2.9K / / 03.08.2007
ошибка с формой не связана никак
судя по описанию, ошибка возникает при действиях с БД
16K
08 октября 2009 года
iRain
72 / / 12.03.2008
Спорить не буду.
Сервер базы данных FireBird 2.1
На форме компоненты:
IBDataBase1
IBTransaction1
IBQuery1
DataSource1
DBLookupComboBox1

Только когда я работаюс компонентами никаких ошибок, начинаю елать, что то с формой - выбивает ошибку.
Какие мысли теперь будут?
11
08 октября 2009 года
oxotnik333
2.9K / / 03.08.2007
Цитата: iRain

Какие мысли теперь будут?


никаких... хз чего ты там наворотил, у тебя же код дюже секретный, никому не показываешь, так копайся сам в нем.
ЗЫ: отладчик в 90% случаев снимает подобные вопросы.

16K
08 октября 2009 года
iRain
72 / / 12.03.2008
Код не секреьный - он большой и был скопирован с рабочей программы.
Если это поможет:
Код:
void __fastcall TForm1::FormShow(TObject *Sender)
{
TIniFile *ini;
AnsiString inif = ExtractFilePath(Application->ExeName) + "azs.ini", basep, basen;

 if(!FileExists(inif))
  {
        TIniFile *ini;
        AnsiString inif = ExtractFilePath(Application->ExeName) + "azs.ini";

         ini = new TIniFile(inif);
         ini->WriteString("DataBase", "DataBase", ExtractFilePath(Application->ExeName));
         ini->WriteBool("Programm", "LogFile", true);
  }

 basep = ini->ReadString("DataBase", "DataBase", ExtractFilePath(Application->ExeName));
 basen = ExtractFilePath(basep) + "azs.gdb";
 inis.logfile = ini->ReadBool("Programm", "LogFile", true);
 delete ini;

 if(inis.logfile)
  {
        OpenLog(false);
        SaveLog("Запуск программы");
  }

 if(!FileExists(basen))
  {
        Application->MessageBoxA("Базаданных отсутствует, укажите правильный путь!","Ошибка", MB_ICONSTOP + MB_OK);
        ShellExecute(Handle,NULL,"FindBase.exe",NULL,ExtractFilePath(Application->ExeName).c_str(),SW_NORMAL);
        Form1->Close();
        return;
  }
        //Подключение базы данных...................................
        IBDatabase1->DatabaseName = basen;
        IBDatabase1->DefaultTransaction = IBTransaction1;

        IBDatabase1->Params->Add("SYSDBA");
        IBDatabase1->Params->Add("masterkey");
        IBDatabase1->LoginPrompt = false;

        IBTransaction1->DefaultDatabase = IBDatabase1;
        IBTransaction1->AutoStopAction = saCommit;
        IBTransaction1->DefaultAction = TACommit;

        IBDatabase1->Connected = true;
        IBTransaction1->Active = true;

        IBQuery1->Database = IBDatabase1;
        IBQuery1->Transaction = IBTransaction1;

        Form2->IBQuery1->Database = IBDatabase1;
        Form2->IBQuery1->Transaction = IBTransaction1;

 //Вывод списка пользователей.............................................
 Form1->PrepQuery(Form1->IBQuery1);
 Form1->IBQuery1->SQL->Add("select * from tbl_users where prava > 0 order by id");
 Form1->IBQuery1->Open();
 DBLookupComboBox1->ListField = "NAME";
 DBLookupComboBox1->KeyField = "NAME";
 DBLookupComboBox1->ListFieldIndex = 1;
 Form1->IBQuery1->First();
}


Есть еще обработка нажатия на кнопку:
Код:
AnsiString psw, pswb, name;

 psw = genpsw(Edit1->Text);

        pswb = IBQuery1->FieldByName("PSW")->AsString;
        pswb = getdb(pswb);
        name = getdb(IBQuery1->FieldByName("NAME")->AsString);

        if (pswb == psw)
         {
                openrul(IBQuery1->FieldByName("PRAVA")->AsInteger);
                if(!ruls.active)
                 {
                        Label3->Caption = "Данный пользователь не активен\nобратитесь к администратору!";
                        Edit1->Text = "";
                        ActiveControl = DBLookupComboBox1;
                        return;
                 }

                Label1->Caption = name;
                Form2->Caption = Form1->Caption + " - пользователь " + name;

                Label1->Tag = IBQuery1->FieldByName("ID")->AsInteger;

                IBQuery1->Close();

                Constraints->MaxHeight = 0;
                Constraints->MinHeight = 0;
                Constraints->MaxWidth = 0;
                Constraints->MinWidth = 0;

                Left = 1;
                Top = 1;
                Width = 1023;
                Height = 767;
                Form1->WindowState = wsMaximized;
                Color = clMedGray;
                FormStyle = fsMDIForm;  //После этой строки выбивает ошибку в режиме отладки
               
                SaveLog("Пользователь " + name + " вошел в программу");
         }
         else
          {
                Label3->Caption = "Не правильно введен пароль";
                Edit1->Text = "";
                ActiveControl = DBLookupComboBox1;
                ActiveControl = Edit1;
                SaveLog("Пользователь " + name + " ввел неверный пароль");
          }

}
288
08 октября 2009 года
nikitozz
1.2K / / 09.03.2007
Ну насколько я помню, после возникновения исключения Borland останавливается на строке, где это исключение было выброшено (в режиме отладки). Вот эту строку и смотрите.
11
08 октября 2009 года
oxotnik333
2.9K / / 03.08.2007
вот перед этим:
 
Код:
[FONT=monospace]
[/FONT]//Подключение базы данных...................................[FONT=monospace]
[/FONT]IBDatabase1->DatabaseName = basen;

база где нибудь отключается?
16K
08 октября 2009 года
iRain
72 / / 12.03.2008
Цитата: oxotnik333
вот перед этим:
 
Код:
[FONT=monospace]
[/FONT]//Подключение базы данных...................................[FONT=monospace]
[/FONT]IBDatabase1->DatabaseName = basen;

база где нибудь отключается?



Нет конечно, я ее использую постоянно.

14
08 октября 2009 года
Phodopus
3.3K / / 19.06.2008
Вам не кажется что изменение стиля формы настолько серьезный шаг, что после него вызывается обработчик FormShow()?
11
08 октября 2009 года
oxotnik333
2.9K / / 03.08.2007
Цитата: iRain
Нет конечно, я ее использую постоянно.


ну в общем то Phodopus уже ответил на все...
а конструкцию коннекта к БД можно переписать в виде

 
Код:
if (DataBase->Connected && DataBase->ConnectionOptions != NewConnectionOptions)
{
   DataBase->Disconnect();
   DataBase->ConnectionOptions = NewConnectionOptions;
   DataBase->Connect();
}
16K
08 октября 2009 года
iRain
72 / / 12.03.2008
Большое спасибо за помощь!!!
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог