0

Progress ABL を使用して単純な if-else ステートメントを実行する次のコードがあります。

部分文字列 " UK " が見つからない場合でも、プログラムを ELSE ステートメントに到達させることができません。誰でも私が欠けているものを見ることができますか:

FIND FIRST ttShipHead WHERE ttShipHead.ShipToCustCustID = "1404".
IF ttShipHead.AddrList Matches "*UK*" THEN
    assign ttShipHead.CheckBox01 = (false).
ELSE
    assign ttShipHead.CheckBox01 = (true).
4

4 に答える 4

1

デバッグを追加することをお勧めします。

FIND FIRST ttShipHead WHERE ttShipHead.ShipToCustCustID = "1404" no-error.

message available( ttShipHead ).
pause.

message ttShipHead.AddrList ( ttShipHead.AddrList Matches "*UK*" ).
pause.

IF ttShipHead.AddrList Matches "*UK*" THEN
        assign ttShipHead.CheckBox01 = (false).
    ELSE
        assign ttShipHead.CheckBox01 = (true).

message ttShipHead.Checkbox01.
pause.

これにより、何が問題なのかが明確になるはずです。

于 2013-06-18T15:02:12.493 に答える
0

レコード ttshiphead が見つからないというメッセージが画面に表示される場合は、IF ステートメントがまったく実行されていません。

通常、FIND には「NO-ERROR」の後に、必要に応じて「IF AVAILABLE ttshiphead THEN」が続きます。

于 2013-06-18T14:51:04.860 に答える
0

あなたのコードは正しいようです。たぶん、記録を確実に残すためにいくつかの小さな変更があります。

FIND FIRST ttShipHead WHERE ttShipHead.ShipToCustCustID = "1404" NO-ERROR.

IF AVAILABLE ttShipHead THEN 
    IF ttShipHead.AddrList MATCHES "*UK*":U THEN 
    assign ttShipHead.CheckBox01 = (false).
    ELSE
        assign ttShipHead.CheckBox01 = (true).

追加したい場合は、レコードが利用できない場合に表示します。

FIND FIRST ttShipHead WHERE ttShipHead.ShipToCustCustID = "1404" NO-ERROR.

IF AVAILABLE ttShipHead THEN 
    IF ttShipHead.AddrList MATCHES "*UK*":U THEN 
    assign ttShipHead.CheckBox01 = (false).
    ELSE
        assign ttShipHead.CheckBox01 = (true).
ELSE
    MESSAGE "NO RECORD FOUND".
于 2013-06-20T10:43:27.990 に答える