Поле num_med не может быть изменено

Я поместил этот код в speedbutonclick, но когда я пытался его выполнить, я получил сообщение о том, что указанное поле num_med не может быть изменено код

   procedure TAddEdiMedForm.SpeedButton1Click(Sender: TObject);
   begin
   DM.MedicamentTable.InsertRecord([ Edit1.Text, Edit2.Text, Edit3.text,
                                            Edit4.Text, Edit5.Text, Edit6.Text, 
   Edit7.Text]);
   CloseModal;                                              
   end;

Какой компонент вы используете (DM.MedicamentTable)?

Rodolfo Donã Hosp 13.09.2018 19:24

Я использую TFDQUERY

Ali Alife 13.09.2018 19:28

Какой тип поля является вашим полем num_med в FDQuery и находящейся за ним RDMS и помечено ли оно только для чтения в любом случае?

MartynA 13.09.2018 19:47

тип поля - int

Ali Alife 13.09.2018 19:50

Но как насчет только чтения?

MartynA 13.09.2018 20:02

readonly - это ложь, конечно

Ali Alife 13.09.2018 20:17

Я не уверен насчет "конечно". Вы не предоставили достаточно информации, чтобы кто-либо мог диагностировать вашу проблему. Итак, я проголосовал за его закрытие, как и еще 2 человека. Если он получит 5 близких голосов, никто не сможет опубликовать ответ, даже если он знает, в чем проблема.

MartynA 13.09.2018 20:20

это совсем не о readonly, а о свойствах поля На самом деле я узнал, почему я получил это сообщение, потому что это первичный ключ и автоматическое приращение, в любом случае большое спасибо всем вам

Ali Alife 13.09.2018 23:03

Нет проблем с тем, что num_med является первичным ключом, если значение, которое вы пытаетесь вставить, является уникальным в то время, когда вы пытаетесь его вставить. Проблема заключается в попытке вставить значение для поля AutoInc. Вам нужно получить это значение (с сервера) после вставки новой строки. не пытайтесь навязывать значение со стороны клиента!

MartynA 14.09.2018 00:14
4
9
524
1

Ответы 1

Проблема заключается в попытке вставить значение для поля AutoInc, что вы пытаетесь сделать с помощью оператора InsertRecord. Вам необходимо получить значение AutoInc (с сервера) после вставки новой строки, а не пытаться принудительно установить значение со стороны клиента!

Поскольку вы не можете указать значение для поля AutoInc при добавлении новой строки, вам следует избегать использования InsertRecord. Вместо этого вызовите Insert для набора данных, заполните другие поля (не AutoInc) отдельными операторами присваивания, затем вызовите Post. Как лучше всего получить значение AutoInc, зависит от внутреннего сервера, хотя FireDAC обычно неплохо справляется с этим за вас - посмотрите, как получить значение в онлайн-справке, или погуглите.

Вы должны были упомянуть, что поле Num_med является AutoInc в вашем q, а не беспечно говорить, что это поле Int в комментарии в ответ на запрос информации, которую вы должны были предоставить в первую очередь. В будущем, пожалуйста, проявите немного внимания к читателям здесь, включив всю соответствующую информацию в свой начальный вопрос.

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