![]() |
|
|
#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
|
|||
|
|||
|
Тема закрыта, вопрос решен
|