0

PowerBuilder 12.5 Classic で SetTransObject() と Retrieve() を使用しています。ただし、データを取得する際にユーザーに大きな力を与えるわけではありません。ユーザーが従業員 ID に挿入する必要がある 1 行の編集 (sle_employeeID) があり、選択した ID NO の従業員データ (IDNO、名前、年齢、指定) がデータウィンドウに表示されます。

dw_1.settransobject(sqlca)
string employeeID
employeeID=sle_employee.text
dw_1.retrieve(employeeID)

このコードは、仕様に従ってデータウィンドウ オブジェクトからデータ全体を取得します。表形式のクイック セレクト ステートメントを使用しました。コントロールを介してデータを選択するためのより自由な方法を私に与えるコードを手伝ってください。

4

2 に答える 2

1

あなたの期待が何であるかは私にはわかりませんが、SetTransObject()とRetrieve()があなたが彼らに求めたことを正確に実行していることに私は驚かされます。問題はありません。20個のSLEと20個の引数を持つデータウィンドウ(および引数が空の場合に引数のスキップを基準として処理するのに十分洗練された付随するSELECTステートメント)を作成する場合、SetTransObject()とRetrieve()は問題なく機能します。

データウィンドウには、Query By Example(QBE)と呼ばれる機能があります。ただし、これによりユーザーに重要なクエリ機能が提供されますが、ユーザーが誰であるかを検討することをお勧めします。ユーザーがデータ分析またはコンピューターサイエンスの博士号を取得している場合、QBEは問題ありません。ユーザーがハングオーバーのカジュアルな雇用テレマーケティング業者である場合、あなたは彼らを頭上に投げ込んでいる可能性があります。

幸運を、

テリー。

于 2012-07-26T19:09:12.723 に答える
1

テリーが述べたように、データウィンドウのクエリモードを使用することをお勧めします。ユーザーに指示を提供する必要がありますが、基本的な使用法は、データウィンドウに直接照合する値を入力することです。詳細については、 『データウィンドウプログラマーズガイド』のトピック「ユーザーにクエリ機能を提供する」を参照してください。これが私のユーティリティウィンドウの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 
于 2012-07-28T22:33:36.617 に答える