1

使用 powerbuilder classic 12.5 和 sql server 2008 将近 3 个月,并且运行良好。
我正在创建一个使用汽车注册号作为主键的汽车租赁系统。

我需要获取汽车的详细信息并确保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
    
4

2 回答 2

2

而不是GetItemString在顶部,您需要在 DataWindow 中查找数据中的注册号一两次。如果第一个find返回 0,你就可以了。如果它返回当前行,您需要从行搜索到最后一行,除非您在最后一行,如果您正在插入,您可能会这样做。但是,我不会那样做,因为它不能在多用户环境中工作。相反,您应该继续插入该行,然后如果您遇到重复键错误,请告诉用户注册号已经在系统中。如果用户要输入大量数据,您可以SELECT在用户输入时尝试从数据库中获取注册号,但您仍然必须能够处理重复键错误。

于 2012-08-20T14:29:18.720 回答
1
  1. 我不明白你在这里做什么样的检查registration_number:你正在获取 DW 中列的当前值,car_registration_number然后你正在与修改的值进行比较(代码来自itemchanged事件?)。您是否希望输入一个与当前值不同的值?

    还要注意GetItemString如果列的类型不是文本(因为它被称为 ..._number),因为 PB 可能会崩溃,返回一些空值或静默失败(取决于当时的 PB 情绪;)。如果你得到一个空值,你的if检查总是会失败。

    如果要获取数值,请GetItemNumber改用。

  2. 您可以将capacity列设置为not null在您的数据库中。保存 DW 时,您将收到一条错误消息,提示您未设置一些必需的值。

    一个更好的主意是在UpdateStart事件中迭代作为表主键成员的列并检查它们是否已设置。

    要编写一些动态代码,您可以在运行时通过描述datawindow.column.count然后检查 pk 成员#1.key(将 #1 替换为 #2、#3、...)从 DW 中获取列,如果必须对该列进行检查。

于 2012-08-20T14:27:43.633 回答