Пожалуйста Помогите В Решении Проблемы

Тема в разделе "Delphi - Базы данных", создана пользователем Antiseptik, 5 июл 2013.

  1. Antiseptik

    Antiseptik Member

    Регистрация:
    4 июл 2013
    Сообщения:
    5
    Симпатии:
    0
    Таблица на Paradox имеет поле "сумма", которе заполняется ручками с клавиатуры и где ничего не высчитывается. При введении в это поле циферок и попытке записи в таблицу БД выдаётся ошибка о переполнении стэка. Прбовал даже через SetText проверку ввода данных делать - не помогает. Причём проблема возникает только при добавлении новой записи, а при редактировании суммы уже существующей - никаких ошибок. И део в том, что это поле автоматом проверяется БД, ничего кроме циферок, туде не введётся по определению.

    Например. самый простой код:
    procedure TDM.AgreemASummSetText(Sender: TField; const Text: String);
    begin
    DM.AgreemASumm.Value:=StrToFloat(Text);
    end;
     
  2. sinkopa

    sinkopa Well-Known Member

    Регистрация:
    17 июн 2009
    Сообщения:
    344
    Симпатии:
    9
    TDM.AgreemASummSetText - это обработчик события которое возникает когда AgreemASumm получает из редактора поля свое строковое значение.
    DM.AgreemASumm.Value := StrToFloat(Text); - это код который рождает событие которое вызывает обработчик TDM.AgreemASummSetText...
    Заколдованный круг получается... который у программистов называется - stack overflow. :)
     
  3. Antiseptik

    Antiseptik Member

    Регистрация:
    4 июл 2013
    Сообщения:
    5
    Симпатии:
    0
    Спасибо большое. Я уже попробовал убрать процедуру целиком, т.е. чтобы БД обрабатывала ввод данных, но возникает та же самая ошибка к моему сожелению. Чёт я туплю конкретно. Ошибка возникает после выбора данных в предидущем Loockup-поле "Вид договора". Если поле "сумма" поставить и соответственно заполнить, до Loockup-поля "Вид договора", то ошибки не возниает. Вот код, который обрабатывается при вводе в Loockup-поле "Вид договора":

    Код (Delphi):
    procedure TDM.AgreemTypeAgreemChange(Sender: TField);
    begin
    if TempState='dsInsert' then
    begin
    if DM.Types.Locate('TTypeAgreem', DM.AgreemTypeAgreem.AsString, []) then
    begin

    Form_Contracts.DBGrid_AGREEMENTS.Columns[6].Title.Color:=clInfoBk;
    Form_Contracts.DBGrid_AGREEMENTS.Columns[6].Color:=clCream;

    DM.AgreemASumm.ReadOnly:=false;

    Form_Contracts.DBGrid_AGREEMENTS.SelectedIndex:=7;
    Form_Contracts.DBGrid_AGREEMENTS.EditorMode:=true; //+
    Form_Contracts.DBGrid_AGREEMENTS.SetFocus;
    Form_Contracts.DBGrid_AGREEMENTS.Columns[7].Title.Color:=$DFFFDB;
    Form_Contracts.DBGrid_AGREEMENTS.Columns[7].Color:=$DFFFDB;

    Abort;
    end;
    end;
    end;
    Т.е. суть проста: после выборки данных в Loockup-поле "Вид договора", мы автоматом переходим к следуюущему поле "Сумма", в котором собственно ошибка и возникает.
     
  4. sinkopa

    sinkopa Well-Known Member

    Регистрация:
    17 июн 2009
    Сообщения:
    344
    Симпатии:
    9
    Да Вы батенька кудесник... :)
    Я никак не могу себе представить (что то с экстрасенсорикой хреново сегодня) как реализовано Ваше Loockup-поле "Вид договора"...
    Но зато явственно наблюдается... я бы сказал просто маниакальная тагя положить какой нибудь код в бесконечную вложенную рекурсию... :)
    DM.Types это у Вас какой-то Dataset, правильно я понял? AgreemType - это видимо у Вас тот самый злополучный Loockup, да? И связан он как я подозреваю с датасетом... DM.Types?
    Вы отдаете себе отчет, что метод датасета DM.Types.Locate('TTypeAgreem', DM.AgreemTypeAgreem.AsString, []) (думаю что я не ошибся) как раз и рождает событие которое приводит Вас к обработчику TDM.AgreemTypeAgreemChange(Sender: TField);
    Вы не пробовали пройти Ваш код по шагам в отладчике? :)
    Знаете что такое "точка останова" и как пользоваться отладчиком?
     
  5. Antiseptik

    Antiseptik Member

    Регистрация:
    4 июл 2013
    Сообщения:
    5
    Симпатии:
    0
    большое спасибо! разобрался!
     
Загрузка...
Похожие Темы - Пожалуйста Помогите Решении
  1. limbra
    Ответов:
    3
    Просмотров:
    68
  2. uxbmw3w
    Ответов:
    0
    Просмотров:
    89
  3. GREED
    Ответов:
    1
    Просмотров:
    544
  4. Рая
    Ответов:
    3
    Просмотров:
    791
  5. sonia2000
    Ответов:
    0
    Просмотров:
    964

Поделиться этой страницей