окно данных powerbuilder для проверки записей

почти 3 месяца в powerbuilder classic 12.5 и sql server 2008, и я хорошо работаю.
Я создаю систему проката автомобилей, используя регистрационный_номер автомобиля в качестве первичного ключа.

мне нужно зафиксировать детали автомобиля и убедиться, что Registration_number недоступен. Код здесь не работает, но код емкости работает...

  1. Что не так с кодом? пожалуйста, дайте другой способ, который работает.

  2. если я не нажму на столбец «емкость» и не нажму «Сохранить», программа продолжит работу и сохранит запись, даже если это пустое поле. как мне этого избежать.

      String car_registration_number
     car_registration_number = dw_newvehicle.GetItemString( Row, "registration_number" )
     long error_code = 0
     string  column
     column = dwo.name
     choose case column
        case "registration_number"
            if data = car_registration_number THEN
                messagebox("validation error", "You cannot available regno")
                error_code = 1   
            end if
        case "capacity"
            if integer(data) >10 then 
               messagebox("validation error", "a car's capacity cannot be more than 10...")
             error_code = 1  
            end if
     end choose
     return error_code
    

person Wepex    schedule 20.08.2012    source источник


Ответы (2)


Вместо GetItemString вверху вам нужно будет сделать один или два поиска в DataWindow для регистрационного номера в данных. Если первый find возвращает 0, все в порядке. Если он возвращает текущую строку, вам нужно искать от строки до последней строки, если вы не находитесь в последней строке, что вполне может быть, если вы вставляете. Однако я бы не стал делать это таким образом, потому что это не будет работать в многопользовательской среде. Вместо этого вы должны пойти дальше и вставить строку, а затем, если вы получите ошибку дублирующего ключа, сообщите пользователю, что регистрационный номер уже есть в системе. Если пользователь собирается ввести много данных, вы можете попытаться SELECT регистрационный номер из базы данных, когда пользователь вводит его, но вы все равно должны иметь возможность обрабатывать ошибку дублирования ключа.

person Hugh Brackett    schedule 20.08.2012

  1. Я не понимаю, какую проверку вы делаете здесь для registration_number: вы получаете текущее значение столбца в DW в car_registration_number, затем вы сравниваете со значением, которое было изменено (код исходит из события itemchanged?) . Ожидаете ли вы ввести значение, отличное от текущего?

    Также остерегайтесь GetItemString, если тип столбца не является текстовым (так как он называется ..._number), так как PB может рухнуть, вернуть какое-то нулевое значение или молча выйти из строя (в зависимости от настроения PB в данный момент;). Если вы получите нулевое значение, ваша проверка if всегда будет давать сбой.

    Если вы хотите получить числовые значения, используйте вместо этого GetItemNumber.

  2. вы можете установить столбец capacity равным not null в вашей базе данных. При сохранении DW вы получите сообщение об ошибке, говорящее о том, что какое-то требуемое значение не было установлено.

    Лучшей идеей было бы повторить событие UpdateStart для столбцов, которые являются членами первичного ключа таблицы, и проверить, установлены ли они или нет.

    Чтобы написать некоторый динамический код, вы можете получить во время выполнения столбцы из DW, описав datawindow.column.count, а затем проверив элементы pk с помощью #1.key (замените #1 на #2, #3,...), если проверка должна быть выполнена для этого столбец.

person Seki    schedule 20.08.2012
comment
тип данных для моих данных (регистрационный номер автомобиля) представляет собой строку, комбинацию букв и цифр, например DEBH354, поэтому я использовал getitemstring - person Wepex; 21.08.2012