1

powerbuilder classic 12.5 および sql server 2008 に 3 か月近くかかり、うまく機能しています。
car registration_number を主キーとして使用して、レンタカー システムを作成しています。

車の詳細を取得し、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、データの登録番号をデータウィンドウで 1 つまたは 2 つ検索する必要があります。最初findに 0 が返された場合は問題ありません。現在の行が返される場合は、最後の行にいる場合を除き、行から最後の行まで検索する必要があります。挿入している場合はそうなる可能性があります。ただし、マルチユーザー環境では機能しないため、そのようにはしません。代わりに、先に進んで行を挿入し、重複キーエラーが発生した場合は、登録番号が既にシステムにあることをユーザーに伝えてください。ユーザーが大量のデータを入力する場合は、ユーザーが入力したSELECTときにデータベースから登録番号を取得しようとすることができますが、それでも重複キー エラーを処理できる必要があります。

于 2012-08-20T14:29:18.720 に答える
1
  1. ここでどのようなチェックを行っているのかわかりませんregistration_number。DWの列の現在の値を取得してcar_registration_numberから、変更された値と比較しています(コードはitemchangedイベントから取得されますか?)。現在の値とは異なる値を入力する予定ですか?

    またGetItemString、列のタイプがテキストではない場合(..._ numberと呼ばれる)、PBがクラッシュしたり、null値を返したり、黙って失敗したりする可能性があるので注意してください(現在のPBの気分によって異なります;)。null値を取得すると、ifチェックは常に失敗します。

    数値を取得したい場合は、GetItemNumber代わりに使用してください。

  2. capacityあなたはあなたのデータベースにあるように列を設定することがnot nullできます。DWを保存するときに、設定されていない必要な値があることを示すエラーが表示されます。

    テーブルの主キーのメンバーである列でイベントを繰り返し処理し、UpdateStartそれらが設定されているかどうかを確認することをお勧めします。

    動的コードを作成するには、実行時にDWから列を取得するために、その列でチェックを実行する必要があるかどうかを説明しdatawindow.column.count、pkメンバーをチェックします#1.key(#1を#2、#3、...に置き換えます)。

于 2012-08-20T14:27:43.633 に答える