Итак, есть много решений этой проблемы.Вот один из них.
В событии, которое запускается, когда пользователь инициирует поиск (примечание ii_TestID - переменная экземпляра, объявление другой переменной локально и оставлено вам):
ii_TestID = Integer (sle_SearchTest.Text)
ll_RowCount = dw_Test.Retrieve (ii_TestID)
IF ll_RowCount = 0 THEN dw_Test.InsertRow(0)
Я собираюсьПредполагается, что в пользовательском интерфейсе нет кнопки для добавления нового результата теста, поэтому мы будем иметь дело только с одним за раз.В случае сохранения:
li_ID = dw_Test.GetItemNumber (1, "test_id")
IF IsNull (li_ID) OR li_ID = 0 THEN dw_Test.SetItem (1, "test_id", ii_TestID)
dw_Test.Update()
Почему я оставляю установку test_id до последней минуты?Поэтому я могу кодировать что-то вроде этого в событии CloseQuery окна:
IF dw_Test.ModifiedCount() > 0 or dw_Test.DeletedCount() > 0 THEN
CHOOSE CASE MessageBox ("Huh?", "Would you like to save your changes before exiting?", Question!, YesNoCancel!)
CASE 1
EVENT ue_Save()
CASE 2
// do nothing
CASE 3
RETURN 1
END CHOOSE
END IF
Если бы я изменил test_id сразу после InsertRow (), то ModifiedCount () зарегистрировал бы строку как измененную сразу же,хотя пользователь еще ничего не сделал.Ничего более раздражающего, чем наличие компьютера, подсказывает мне сохранить мои изменения, когда я их не внес.
Удачи,
Терри.