レコードが存在するかどうかを確認し、存在しない場合は作成する必要がある場合に、頻繁に発生する状況の解決策を実装したいと考えています。
PROCE CreateIfNotFound:
DEF INPUT PARAM bBuf AS HANDLE NO-UNDO.
DEF INPUT PARAM chPred AS CHAR NO-UNDO.
DEF INPUT PARAM iLockMode AS INT NO-UNDO:
DEF VAR hQry AS HANDLE NO-UNDO.
CREATE QUERY hQry.
hQry:SET-BUFFERS(bBuf).
hQry:QUERY-PREPARE("FOR EACH " + bBuf:NAME + " WHERE " + chPred).
hQry:QUERY-OPEN.
IF NOT hQry:GET-FIRST(LockMode) THEN DO:
bBuf:BUFFER-CREATE.
???
END.
END PROCE.
chPred
察するに:
field1 = value1 AND field2 = value2 AND [...]
ここで、field1、field2、および [...] は一意のインデックス フィールドです。chPred
解析せずに、作成されたレコードの特定のフィールドを特定の値で初期化するにはどうすればよいですか? また、値には が含まれている可能性があるため、区切り記号はあまり役に立ちません。一般に、選択できる任意の区切り記号ですAND
。=
もちろん、そうである可能性は低いですが_!^@_MY_DELIM!@^__
、私はこの解決策があまり好きではありません。