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 (記載なし)

PowerSpaceの運営は、パワーフューチャー株式会社が行っております。
Copyright © 2013 Power Future Co., Ltd.