PowerBuilder: вставка данных с использованием окна данных - PullRequest
2 голосов
/ 16 июня 2010

Предположим, у меня есть таблица с именем 'test', в которой есть три столбца с именами test_id, test_name и test_age.Я использовал аргумент поиска под названием :al_test_id, чтобы предложить пользователю ввести идентификатор и выполнить поиск в базе данных соответствующих записей идентификатора, и, если он найден, отобразить его для пользователя.Теперь, если запись не найдена, я хочу, чтобы пользователь мог вставить новую строку, используя идентификатор, который он / она ввел в качестве аргумента поиска.

Как я могу это сделать?

1 Ответ

3 голосов
/ 16 июня 2010

Итак, есть много решений этой проблемы.Вот один из них.

В событии, которое запускается, когда пользователь инициирует поиск (примечание 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 () зарегистрировал бы строку как измененную сразу же,хотя пользователь еще ничего не сделал.Ничего более раздражающего, чем наличие компьютера, подсказывает мне сохранить мои изменения, когда я их не внес.

Удачи,

Терри.

...