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

Ваш аккаунт

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

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

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

Ошибка при переходе к другой вкладке PageControl1 в Delphi 2010

340
07 апреля 2011 года
Fellinggood
170 / / 27.04.2009
Здравствуйте! При работе программы вылетает ошибка

Код здесь:
Код:
procedure TForm1.BitBtn10Click(Sender: TObject);
begin
   close;
end;


procedure TForm1.BitBtn4Click(Sender: TObject);
var s1, s2, s3, s4, s5:string;
begin
if(InputQuery('Ввод названия книги', 'Название:', s1)) then
   begin
      InputQuery('Ввод кода книги', 'Код:', s2);
      InputQuery('Ввод количества книг', 'Количество:', s3);
      InputQuery('Ввод издательства книги', 'Издательство:', s4);
      InputQuery('Ввод года издания книги', 'Год:', s5);
      with dm.q do
      begin
         Active := false;
         SQL.Clear;
         SQL.Add('INSERT INTO BOOK(NAME_BOOK, CODE_BOOK, QUANTITY_BOOK,');
         SQL.Add('IZDATELSTVO, YEAR_IZD, ID_THEMATIC) VALUES(');
         SQL.Add(QuotedStr(s1) + ',' + QuotedStr(s2) + ',' + QuotedStr(s3) + ',');
         SQL.Add(QuotedStr(s4) + ',' + QuotedStr(s5) + ',');
         SQL.Add(dm.SimpleDSThematic.FieldByName('ID_THEMATIC').AsString + ')');
         ExecSQL;
      end;
      with dm.SimpleDSBook do
      begin
         Active := false;
         DataSet.Active := false;
         DataSet.Active := true;
         Active := true;
         Locate('NAME_BOOK', s1, [loCaseInsensitive]);
      end;
   end;
end;

procedure TForm1.BitBtn7Click(Sender: TObject);
var s1, s2, s3, s4:string;
begin
if(InputQuery('Ввод фамилии автора', 'Фамилия:', s1)) then
   begin
      InputQuery('Ввод имени автора', 'Имя:', s2);
      InputQuery('Ввод отчества автора', 'Отчество:', s3);
      InputQuery('Ввод кода автора', 'Код:', s4);
      with dm.q do
      begin
         Active := false;
         SQL.Clear;
         SQL.Add('INSERT INTO AUTHOR(FAMILY, NAME, OTCHESTVO,');
         SQL.Add('CODE_AUTHOR) VALUES(');
         SQL.Add(QuotedStr(s1) + ',' + QuotedStr(s2) + ',' + QuotedStr(s3) + ',');
         SQL.Add(QuotedStr(s4) + ')');
         ExecSQL;
      end;
      with dm.SimpleDSAuthor do
      begin
         Active := false;
         DataSet.Active := false;
         DataSet.Active := true;
         Active := true;
         Locate('FAMILY', s1, [loCaseInsensitive]);
      end;
      with dm.q do
      begin
         Active := false;
         SQL.Clear;
         SQL.Add('INSERT INTO BOOK_AUTHOR(ID_BOOK, ID_AUTHOR) VALUES(');
         SQL.Add(dm.SimpleDSBook.FieldByName('ID_BOOK').AsString + ',' +  dm.SimpleDSAuthor.FieldByName('ID_AUTHOR').AsString + ')');
         ExecSQL;
      end;
   end;
end;

procedure TForm1.FormActivate(Sender: TObject);
begin
   PageControl1.ActivePage := TabSheet1;
   dm.SQLConnection1.Connected := false;
   dm.SQLConnection1.Params.Values['database'] := ExtractFileDir(ParamStr(0)) + '\bd.fdb';
   dm.SQLConnection1.Connected := true;
   dm.SimpleDSThematic.Active := false;
   dm.SimpleDSThematic.DataSet.CommandText := 'SELECT * FROM THEMATIC';
   dm.SimpleDSThematic.DataSet.Active := true;
   dm.SimpleDSThematic.Active := true;
end;

procedure TForm1.PageControl1Change(Sender: TObject);
begin
  if PageControl1.ActivePage = TabSheet2 then
      begin
         if dm.SimpleDSThematic.RecordCount = 0 then
            exit;
         with dm.SimpleDSBook do
            begin
               Active := false;
               DataSet.Active := false;
               DataSet.CommandText := 'SELECT * FROM BOOK WHERE ID_THEMATIC = '+
               dm.SimpleDSThematic.FieldByName('ID_THEMATIC').AsString;
               DataSet.Active := true;
               Active := true;
            end;
      end;

   if PageControl1.ActivePage = TabSheet3 then
      begin
         if dm.SimpleDSBook.RecordCount = 0 then
            exit;
         if dm.SimpleDSAuthor.RecordCount = 0 then
            exit;
         with dm.SimpleDSAuthor do
            begin
               Active := false;
               DataSet.Active := false;
               DataSet.CommandText := 'SELECT * FROM AUTHOR WHERE AUTHOR.ID_AUTHOR = '+
               '(SELECT ID_AUTHOR FROM BOOK_AUTHOR WHERE BOOK_ AUTHOR.ID_BOOK = '+
                dm.SimpleDSBook.FieldByName('ID_BOOK').AsString;
               DataSet.Active := true;
               Active := true;
            end;
      end;
end;

Не подскажете как можно это исправить. Заранее благодарю.
6
07 апреля 2011 года
George
4.1K / / 05.01.2007
А текст ошибки Вам ни о чем не говорит? При переходе к другой вкладке Вы, очевидно, обращаетесь к датасету, предварительно не открыв его. К св-ву RecordCount, например, можно обращаться только когда набор данных открыт.
340
07 апреля 2011 года
Fellinggood
170 / / 27.04.2009
Цитата: George
Вы, очевидно, обращаетесь к датасету, предварительно не открыв его. К св-ву RecordCount, например, можно обращаться только когда набор данных открыт.



А как открыть датасет?

6
07 апреля 2011 года
George
4.1K / / 05.01.2007
Какбе Open метод есть. Либо Active := true;
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог