вставить в другую таблицу на NewRecord - PullRequest
0 голосов
/ 14 октября 2010

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

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

в loc

OtherAdoQuery.insert;

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

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

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

на

ADOQuery.onNewRecord ();

begin

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

end;

Edit:

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

  • beforePost
  • newRecord
  • myFunc

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

Ответы [ 2 ]

2 голосов
/ 14 октября 2010

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

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

0 голосов
/ 18 октября 2010

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

для ADOQuery.dataSource был задан DataSet из ClientDataSet.

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

...