![]() |
|
#1
|
|||
|
|||
![]() Народ нужна помощь, пишу программу, вроде бы как уже закончил писать, но при различных ее тестах... до выхода в паблик стала наблюдаться ошибка Stuck Overflow
Наблюдаеться она при работе с ДБГрид, а точнее если в БДГрид выведено записей > 1, и при переходе на запись №2 сразу же вылетает Stuck Overflow Часть Кода программы Код:
procedure TForm4.FormCreate(Sender: TObject); begin AssignFile (ini,'ip.ini'); Reset (ini); Read (ini,server); CloseFile (ini); //Создаем mysql конект ZConnection1.HostName:=server; ZConnection1.Port:=3306; ZConnection1.Database:='Releaser'; ZConnection1.User:='*******'; ZConnection1.Password:='*********'; ZConnection1.Protocol:='mysql'; ZConnection1.Connect; end; procedure TForm4.ComboBox1Change(Sender: TObject); begin if (ComboBox1.Text='') or (ComboBox1.Text=' ') or (ComboBox1.Text=' ') or (ComboBox1.Text=' Категории') then begin ShowMessage ('Вы должны выбрать одну из предложенных категорий'); end; if ComboBox1.Text='Фильмы' then prefix:='Films'; if ComboBox1.Text='Игры' then prefix:='Games'; if ComboBox1.Text='Музыка' then prefix:='Music'; if ComboBox1.Text='Софт' then prefix:='Soft'; ZTable1.TableName:=prefix; ZTable1.Active:=True; //DataSource1.DataSet.Active:=True; end; end. Меняеться таблица просмотра данных, но если в таблице скажем "table_2" записей = 3 то стак оверфлоу ![]() буду благодарен любой помощи |
#2
|
|||
|
|||
![]() Ну да, событие OnChange комбобокса внутри себя меняет значение этого комбобокса. Естественно, получаешь ошибку Stack overflow (переполнение стека), т.к обработка изменения приводит к запуску еще одной обработки (изменение значения).
Попроьбуй в начале отключить этот обработчик, а в конце его подключить обратно: Код:
procedure TForm4.ComboBox1Change(Sender: TObject); begin ComboBox1.Onchange := Nil; // Здесь как и было раньше (твой код) ComboBox1.Onchange := ComboBox1Change; end; |
#3
|
|||
|
|||
![]() Не это не естественно, во первых при событии Onchange он просто записывает название таблиц,а потом уже поставляет переменную вкак имя таблицы, т.е. он выбирает только 1 раз!
но спасибо за подсказку Правдо не работает( |
#4
|
|||
|
|||
![]() Даже при таком раскладе я получаю оверфлоу!
Код:
procedure TForm4.Button1Click(Sender: TObject); begin prefix:='Music'; ZTable1.TableName:=prefix; ZTable1.Active:=True; DataSource1.DataSet.Active:=True; end; |
#5
|
|||
|
|||
![]() Полный проект в студию.
Вообще, либо компоненты доступа к БД кривые, либо у тебя еще где-то куча кода. А на какой строке кода показывает отладчик ошибку? |
#7
|
|||
|
|||
![]() Тема закрыта, вопрос решен
|