Вставить в другую таблицу на NewRecord

Получил ADOQuery с событием OnNewRecord.

на процедуре я пытаюсь добавить данные автоматически в другую таблицу. данные представляют собой несколько строк, которые необходимы и обрабатываются в clientDataSet в случае отмены.

на месте

OtherAdoQuery.insert;

Я получаю сообщение об ошибке, что ADOQuery не удалось вставить нулевое значение в ненулевое поле. Я нахожусь в режиме вставки, однако я никогда не спрашивал DELPHI, чтобы отправить! я не нахожу, почему это отправляет.

Изменить: не могли бы вы помочь мне найти подсказку по этой проблеме?

еще несколько уточнений:

в

ADOQuery.onNewRecord();

начать

CliendDataSet.insert; // здесь идет пост для ADOQueryPost. где ClientDataSet был в состоянии просмотра

конец;

Редактировать:

эта ошибка не имеет смысла! посмотрите на трассировку стека:

  • beforePost
  • новая запись
  • MyFunc

где myFunc вызывает NewRecord со вставкой.

2 ответа

Решение

Ответ был от связи между таблицами.

ADOQuery.dataSource был установлен DataSet ClientDataSet.

это безумный большой урон, и никакой намеки на дельфи.

Я не слишком знаком с TAdoQuery, но я знаю, как отследить такую ​​ошибку. Во-первых, если он еще не установлен, перейдите в "Параметры проекта" и включите "Использовать DCU отладки" на вкладке "Компиляция", затем запустите полную сборку и запустите ее. Когда вы получите отчет об исключении в отладчике, нажмите Break, и вы должны оказаться внутри кода для TAdoQuery или одного из его подобъектов. Попробуйте изучить стек вызовов. Если вы посмотрите несколько звонков, вы, вероятно, найдете что-то, что вы называли чем-то еще, что вызывает Post Следите за трассировкой стека до тех пор, пока не дойдете до своего кода, и вы получите представление о том, что происходит, и, если вы немного проанализируете его, вы должны найти способ предотвратить проблему.

Сказав это, позвольте мне быстро догадаться о причине вашей проблемы: когда вы вызываете Insert для набора данных, если набор данных уже находится в режиме добавления, потому что вы ранее вызывали Insert или Append и не следили за публикацией, она сама вызовет Post перед настройкой новой строки, над которой вы будете работать. Может быть, это то, что с тобой происходит?

Другие вопросы по тегам