PB 電子会議室
発言No. | 更新日 | 題名(クリックすると発言内容と関連するコメントが表示されます) |
---|---|---|
13744 | 00/11/01 11:28:20 | RE(1):PB6.5: データウィンドウ上に配置されたカラムについてどなたか教えてください。 By t.y |
13740 | 00/10/31 23:59:11 | PB6.5: データウィンドウ上に配置されたカラムのについてどなたか教えてください。 By Jacky_B |
カテゴリ:データウィンドウ
日付:2000年11月01日 11:28 発信者:t.y
題名:RE(1):PB6.5: データウィンドウ上に配置されたカラムについてどなたか教えてください。
Jacky_Bさん、こんにちは。
>データウィンドウをRetrieveで表示した後、SetItemにより変更しています。
>ここで変更前と変更後で値が変わったカラム名と値を取得したいのです。
>
>現在、考えた方法は、
>?DatawindowName.Column.Object.Original[1]とDatawindowName.Column.Object.Current[1]
> で値を比較する方法
>?カラムタイプをチェックし、GetItem系のOriginalValueオプションにより値を比較する方法
>です。データウィンドウ上の総カラムをColumn.Countで取得しループしながらColumn.Nameで
>カラム名を取得し、効率よく処理したいのでどちらも納得していません。
>
よくわかりませんが、
SetItemしたのならば、その処理をした時にカラム名と値はわかるのでは...と
いうわけにはいかないんですよね。
意味を勘違いしているかもしれませんが、こんなのはどうでしょう?
1.GetItemStatusでRow,Column指定してNotModified!以外のものを
変更ものと判断する
string sName
long i, j
long lRowCount, lColCount
lRowCount = dw_1.RowCount()
lColCount = dw_1.Object.Datawindow.Column.Count
FOR i = 1 TO lRowCount
FOR j = 1 TO lColCount
IF dw_1.GetItemStatus(i, j, Primary!) <> NotModified! THEN //変更あり
sName = dw_1.describe(\"#\" + string(j) + \".Name\") //カラム名
データはdw_1.Object.Data[i, j]で取得
データタイプ別に編集する場合はColTypeを取得して分岐するしかないと思います。
END IF
NEXT
NEXT
2.Retrieveした後そっくり同じdw_2を用意してRowsCopyした後
dw_1にSetItemし、その後dw_1とdw_2を比較
string sName
long i, j
lRowCount = dw_1.RowCount
dw_2.Reset()
dw_1.RowsCopy(1, lRowCount, Primary!, dw_2, 1, Primary!) //dw_2 = dw_1ってできたかな?
SetItem処理
あとは1.のループと同じ
判定が IF dw_1.Object.Data[i, j] <> dw_2.Object.Data[i, j]になる
とりあえず思い付くまま書いたので、未実験君です(^_^)
関数の詳細は、ヘルプで調べて見て下さい。
もし全然勘違いな返答でしたら、すみません。m(__)m
付加情報:
PowerBuilder Version (記載なし)
Client SoftWare
OS Windows 2000
DBMS Sybase SQL Anywhere Client
Browser InternetExplorer5.X
Server SoftWare
OS Windows 2000
DBMS (記載なし)
WebServer (記載なし)
Copyright © 2013 Power Future Co., Ltd.