2015-12-19 2 views
0

Моя проблема заключается в том, что я пишу данные для отдельных полей в одной записи в разное время, и когда я добавляю данные ко второму настраиваемому полю в том же запись, я получаю сообщение об ошибке:Вставка разных частей записи в разное время при записи в базу данных

You must enter a value in the 'tblWorkoutDetails.Username' field

Несмотря на то, что данные были введены в предыдущем отчете.

В таблице это относится к называется tblWorkoutDetails и имеет следующие поля:

  • WorkoutID
  • Имя пользователя
  • WorkoutDate
  • Вес
  • талии

WorkoutI D и имя пользователя составляют составной ключ. Эта таблица относится к другой таблице, и я также записываю данные таким же образом.

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

adotblWorkoutDetails['Username'] := Username; 
adotblWorkoutDetails['WorkoutID'] := CurrentWorkout+1; 
adotblWorkoutDetails.Post; 
adotblWorkoutDetails.Refresh; 

Значения назначаются на полях просто переменные и это исполняет в совершенстве.

Второе утверждение, которое заполняет остальную часть полей в этой записи выглядит следующим образом:

adotblWorkoutDetails['WorkoutDate'] := Date; 
adotblWorkoutDetails['Weight'] := Weight; 
adotblWorkoutDetails['Waist'] := Waist; 
adotblWorkoutDetails.Post; 
adotblWorkoutDetails.Refresh; 

Программа порывает с вышеупомянутой ошибкой в ​​adotblWorkoutDetails.Post. При попытке исправить это, я попытался переназначить необходимые поля, однако у меня возникла ошибка, когда я вводил повторяющиеся данные. Кроме того, когда я заполняю каждое поле в записи в течение первого перехода (используя данные образца для заполнения полей «зарезервировано» для второй записи данных), код выполняется отлично, и так же код записывается в другую таблицу ,

Не могу решить, как это решить. Если вам нужна дополнительная информация/скриншоты из кода, пожалуйста, спросите.

Этот код дает мне «вы должны ввести значение в поле ...» Ошибка:

image

И раскомментировать эти две строки дает мне дубликат ошибки данных:

image

+0

Сообщение «вы должны ввести стоимость e в поле «tblWorkoutDetails.Username» исходит из кода вашего приложения, а не из кода библиотеки Delphi. Таким образом, вам нужно добавить код, который включает это сообщение, на ваш q. Также код, содержащий сообщение о том, что вы вводите повторяющиеся данные. – MartynA

+0

попробуйте добавить ** showmessage (adotblWorkoutDetails.fieldbyname ('WorkoutID'). AsString) ** сразу после вашего первого ** adotblWorkoutDetails.Refresh **. Сделайте то же самое для поля ** username **. Убедитесь, что они действительно установлены. –

+0

MartynA - Я не уверен, что понимаю ваше предложение. Я не написал никаких утверждений, содержащих сообщение с этой ошибкой, если это то, что вы получаете. Также см. Править для скриншотов кода. –

ответ

1

Я подозреваю, что происходит то, что ваша вторая операция ошибочно делает другую вставить, а не Редактировать, и что исключение, которое вы получаете, является результатом поля UserName, имеющего значение Required, свойство установлено на True.

Это работает так, как вы описываете:

adotblWorkoutDetails.Insert; 
adotblWorkoutDetails['Username'] := Username; 
adotblWorkoutDetails['WorkoutID'] := CurrentWorkout+1; 
adotblWorkoutDetails.Post; 
//adotblWorkoutDetails.Refresh; // Refresh is not required 

adotblWorkoutDetails.Insert; 
adotblWorkoutDetails['WorkoutDate'] := Date; 
adotblWorkoutDetails['Weight'] := Weight; 
adotblWorkoutDetails['Waist'] := Waist; 
adotblWorkoutDetails.Post; 
// adotblWorkoutDetails.Refresh; // Again, not required 

То, что вы должны делать вместо этого:

adotblWorkoutDetails.Insert; 
adotblWorkoutDetails['Username'] := Username; 
adotblWorkoutDetails['WorkoutID'] := CurrentWorkout+1; 
adotblWorkoutDetails.Post; 

// Locate the correct record using Locate or FindKey first, then 
adotblWorkoutDetails.Edit; 
adotblWorkoutDetails['WorkoutDate'] := Date; 
adotblWorkoutDetails['Weight'] := Weight; 
adotblWorkoutDetails['Waist'] := Waist; 
adotblWorkoutDetails.Post; 

(Как и в сторону для дальнейшего использования, никогда после любого из кода как изображение, если вам нужно отправить код, скопировать и вставить сам код. Here's a list причин, почему вы не должны.