Вставить в другую таблицу на 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 перед настройкой новой строки, над которой вы будете работать. Может быть, это то, что с тобой происходит?