テリーが述べたように、データウィンドウのクエリモードを使用することをお勧めします。ユーザーに指示を提供する必要がありますが、基本的な使用法は、データウィンドウに直接照合する値を入力することです。詳細については、 『データウィンドウプログラマーズガイド』のトピック「ユーザーにクエリ機能を提供する」を参照してください。これが私のユーティリティウィンドウの1つにあるコードです。ツールバーボタン付きのメニューを使用して、データウィンドウをクエリモードにし、クエリモードをオフにして取得します。メニューとデータウィンドウイベントの間でPFCメッセージルーティングを使用していますが、ボタンをクリックしたイベントからイベントを呼び出すことができます。その場合、メニューを変更する行を削除します。
// this code is in an event in the DataWindow
// toggles query mode on and off
if "no" = object.dataWindow.queryMode then
// you may want to check for unsaved changes here and let the user go back
object.dataWindow.queryMode = "yes"
m_myMenu.m_rows.m_query.checked = TRUE // this has a button on the toolbar
else
m_myMenu.m_rows.m_query.checked = FALSE
acceptText()
object.dataWindow.queryMode = "no"
retrieve()
end if
最大限の柔軟性を得るには、一部またはすべての列にcriteria.override_edit='yes'を設定します。以下のコードは、すべての列にcriteria.override_edit='yes'を設定します。これはあなたの状況には適切でないかもしれません。override_editを使用しない場合、ユーザーは列の検証に合格するクエリ値の入力に制限されます。
// this code is in an event in the DataWindow
// it is called after the DataObject is set
// it sets criteria.override_edit='yes' for all the columns
string ls_describe, ls_modify, ls_col, ls_result
integer li_colCount, li_col
setTransObject(SQLCA)
ls_describe = "datawindow.column.count"
ls_result = dw_1.describe(ls_describe)
if not isnumber(ls_result) then
// logging code elided
ls_result = '0'
end if
li_colCount = integer(ls_result)
for li_col = li_colCount to 1 step -1
ls_col = "#" + string(li_col)
ls_modify = ls_col + ".criteria.override_edit='yes'"
ls_result = dw_1.modify(ls_modify)
if "" <> ls_result then
// every column may not have an edit, and some edits might not // have the property. it's just as fast to try to modify it as it
// is to check it
// logging code elided
end if
next