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'))
ご意見とアイデアをありがとうございます。