С Новым годом! Форум программистов, компьютерный форум, киберфорум
Delphi: Базы данных
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/6: Рейтинг темы: голосов - 6, средняя оценка - 5.00
2 / 2 / 0
Регистрация: 06.06.2009
Сообщений: 324
1

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

07.04.2011, 17:19. Показов 1054. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте! При работе программы вылетает ошибка
http://s1.ipicture.ru/uploads/... LOqZ7F.jpg
Код здесь:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
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;
Не подскажете как можно это исправить. Заранее благодарю.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
Блог
07.04.2011, 17:19
Ответы с готовыми решениями:

Элементы на активной вкладке PageControl1
У меня по клику на кнопке программно создается tabsheet в PageControl-e. Нужно сделать так, чтобы...

Ошибка при запуске программы с базой данных в Delphi 2010
Здравствуйте! При запуске программы с базой данных вылетает ошибка...

подводные камни при переходе на delphi 2010
Скажите как перейти с delphi на rad studio 2010.

Ошибка при переходе на другой экран (Eclipse)
Я недавно начал программировать в Eclipse, освоился ещё не до конца. И вот пишу только второе...

4
1263 / 706 / 62
Регистрация: 21.12.2009
Сообщений: 2,256
07.04.2011, 17:30 2
Попытайтесь в отладочном режиме установить точное место пояления исключения. Проверьте в этот момент состояние State наборов данных.
0
2 / 2 / 0
Регистрация: 06.06.2009
Сообщений: 324
07.04.2011, 17:38  [ТС] 3
Так на рисунке видно это место. Там точка останова...
0
1263 / 706 / 62
Регистрация: 21.12.2009
Сообщений: 2,256
07.04.2011, 17:55 4
Тогда, что тут непонятного? Вам система сообщает: набор dm.SimpleDSBook находится в состоянии "закрыт" и запрашивать у него количество записей нельзя. Можно, если это удовлетворяет Вашим условиям
Delphi
1
if (dm.SimpleDSBook.Active) and (dm.SimpleDSBook.RecordCount = 0) then
1
2 / 2 / 0
Регистрация: 06.06.2009
Сообщений: 324
07.04.2011, 21:13  [ТС] 5
Спасибо, эта проблема решена, сейчас другая будет))
0
07.04.2011, 21:13
BasicMan
Эксперт
19315 / 2622 / 84
Регистрация: 17.02.2009
Сообщений: 10,364
Блог
07.04.2011, 21:13
Помогаю со студенческими работами здесь

Ошибка при установке Delphi 2010
При установке выходит ошибка нет каких то плагинов, построить проект. И все дальше установка не...

Delphi 2010 ошибка несоответствие типов 'Array' and 'PAnsiChar' при использовании OEMtoAnsi
Здравствуйте. Пытаюсь запустить на embarcadero rad studio 2010 следующий код на delphi: Var F...

Сложение строк(конкатенация) при переходе с VS C++ 6.0 на VS 2010
Добрый день. При переносе проекта из VS C++ 6.0(MFC) на VS 2010 возникло несколько проблем. 1....

Форма поверх другой [Delphi 7 or 2010]
Как сделать чтобы форма одного проекта была поверх другой формы этого же проекта, но два этих окна...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru