0

Excel ドキュメントからコピー/貼り付けを使用して入力できるようにしたいデータウィンドウがあります。現在、日付フィールドを除いて、必要なものすべてをインポートしています。現在、ユーザーは MM/YYYY 日付を含む Excel ファイルからすべてを手動で入力し、[保存] をクリックすると、システムが日付コンポーネントを追加して、Oracle データベースに日付フィールドとして渡すことができます。

コピー/貼り付けを実装した後、日付フィールドは MM/YYYY 形式 (例: 11/2013) の Excel ファイルから取得され、すぐに PowerBuilder がデータ検証エラー メッセージ (アイテム '11/2013' は検証テストに合格しません) を表示します。貼り付け済みです。

インポートを続行すると、他のすべてのデータが正しく貼り付けられます。Excel で日付を 2013 年 1 月 11 日と手動で変更すると、日付を含むすべてが正しく貼り付けられます。Excel ドキュメントはサードパーティから保護されており、日付形式を変更して日付コンポーネントを含めることはできません。

メソッドを使用しdw.ImportClipboard()てクリップボードからデータを取得し、それを正しい DW 列に割り当てています。コードスニペット:

    If Clipboard() <> "" Then
            If tab_detail.tabpage_adjustment.dw_adjustment.ImportClipboard(1, li_rows, 1, 7, 3) <= 0 Then
                MessageBox("Invalid Data", "Unable to paste!", StopSign!)
                Return -1
            End If 
... process data further

日付フィールドの前にImportClipboard()a を追加して検証に合格するために、関数と自動検証の間でデータを傍受できる方法はありますか? DD/おそらく、上記のコードのプロセスデータのさらなるセクションにあります。

あるいは、それを行うためのより良い方法はありますか?

ありがとう。

PowerBuilder Classic 12.5 を使用しています。これは、もともと PB8 で開発されたアプリケーションです。

編集: データストアの使用が提案され、それを調べました。それが私が求めているもののようです。しかし、私はそれを私のために働かせることができませんでした。

これが私がやったことです:

datastore ids_Adjustment
ids_Adjustment = CREATE DATASTORE
ids_Adjustment.DataObject = "tab_detail.tabpage_adjustment.dw_adjustment"
ids_Adjustment.SetTransObject( SQLCA )

li_test = ids_Adjustment.ImportClipboard(1, li_rows, 1, 7, 3)
messagebox("test", "Here: "+String(li_test))

    If ids_Adjustment.ImportClipboard(1, li_rows, 1, 7, 3) <= 0 Then
        MessageBox("Invalid Data", "Unable to paste the return Adjustment! "+String(ids_Adjustment.ImportClipboard(1, li_rows, 1, 7, 3)), StopSign!)
        Return -1
    End If

どちらのメッセージ ボックスも表示されませんが、インポート クリップボードを削除すると、メッセージ ボックスは正常に表示されます。それらが機能していない理由を特定できません..

行を変更すると:

ids_Adjustment.DataObject = "tab_detail.tabpage_adjustment.dw_adjustment"

ids_Adjustment.DataObject = "d_agentreturn_detail_adjustment"

(これは DW オブジェクトの名前です)

メッセージボックスはエラーコード -4 を返します。ドキュメントによると、これは無効な入力を意味します。いつも持っているのと同じ行とデータをコピー/貼り付けているので、なぜこれを行っているのかよくわかりません。

EDIT2/ソリューション:

示唆されたように、外部データ ソースを選択して列を追加する新しいデータウィンドウ オブジェクト (リッチテキスト) を作成し、今回は必要な日付フィールドを文字列にしました。次に、上記のように、新しいデータ オブジェクトを参照して importClipboard を実行する DataStore を作成しました。次に、日付文字列に日付コンポーネントを追加しました。

ids_Adjustment.SetItem(li_idx, 'adjustment_period', String("01/"+ids_Adjustment.GetItemString(li_idx, 'adjustment_period')))

次に、データウィンドウ オブジェクトをデータストアの値と等しくしました。

tab_detail.tabpage_adjustment.dw_adjustment.Object.adjustment_period [li_idx] = date(ids_Adjustment.GetItemString(li_idx, 'adjustment_period'))

ご意見とアイデアをありがとうございます。

4

1 に答える 1