数据窗口自动保存

沧海——粟 2011-08-26 01:53:46
1.我在数据窗口中的rowfocushanged 写this.update() 后当我多次移动焦点时 就会保存多次 怎样写才能保存一次

我试过用this.retrieve() 但运行时会报错 然后所有的程序都会关闭掉


2.当我点击最后一行时会自动在最后插入一行 并在指定的列插入默认值 但我保存时pb就会报错 因为数据库中某些列不允许为

空 所以我怎样才能不保存最后一行 而我现在的做法只是屏蔽掉了这个错误 但后面还回出现一些问题!
...全文
189 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
沧海——粟 2011-09-02
  • 打赏
  • 举报
回复
我希望数据窗口实现一下两个功能:

1、换行自动更新
2、当选择最后一行时,自动在最后插入一行(新插入的行有默认值)


这两个功能要同时具备 同时也不能插入空行 还不能保存多条同样的数据


比如我点击最后一行10次这样就会插入10行 但我只在其中的一行做了修改 我再点击别的行时只保存我修改过的行
Cideason 2011-09-01
  • 打赏
  • 举报
回复
不保存 最後一行 可以~ 修改最後一行的狀態為 new! 狀態
liuhaifeng1976 2011-09-01
  • 打赏
  • 举报
回复
丁丁丁丁
Nate 2011-08-31
  • 打赏
  • 举报
回复
你可以写一个用户自定义事件,Event ID 为pbm-dwnprocessenter(即回车),代码如下:

IF THIS.AcceptText() < 0 THEN
RETURN 1
END IF

String ls_sdescribe,ls_msg,ls_colname
Long ll_row = 1
Int li_colnbr = 0


IF THIS.GetColumn() = Long(THIS.Object.datawindow.column.count) THEN
DO WHILE ll_row <> 0
li_colnbr++
IF this.FindRequired(primary!, ll_row, li_colnbr, ls_colname, TRUE) < 0 &
THEN EXIT
IF ll_row <> 0 THEN
ls_msg = "有(" + ls_colname + ")欄位必須輸入數據﹐但現在仍未輸入!!"
MessageBox("存盤時提示",ls_msg)
this.SetColumn(ls_colname)
RETURN 1
END IF
LOOP
IF THIS.Update() = 1 THEN
COMMIT USING sqlca;

IF THIS.GetRow() = THIS.RowCount() THEN
IF MessageBox("確定","是否繼續插入一行!?",question!,yesno!,1) = 1 THEN
THIS.TriggerEvent("ue_insert")
ELSE
THIS.Object.datawindow.READONLY = "YES"
RETURN 1
END IF
ELSE
RETURN 1
END IF
ELSE
ROLLBACK USING sqlca;
MessageBox("存檔","上筆記錄存檔失敗!!")

RETURN 1
END IF
ELSE
Send( Handle(THIS), 256, 9, Long(0,0))

END IF

RETURN 1
沧海——粟 2011-08-30
  • 打赏
  • 举报
回复
顶一下!
沧海——粟 2011-08-29
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 mtbiao 的回复:]
为什么要改变一次焦点就保存一次呢?对于新增的行,你可以判断在输入到最后一列的数据时保存,如果成功,再另外新增一行或者进行其他操作啊。
[/Quote]


不知道如何判断?
沧海——粟 2011-08-29
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 lightsword1 的回复:]
选择不同的事件,效率会大不相同
[/Quote]



什么意思?
lightsword1 2011-08-29
  • 打赏
  • 举报
回复
选择不同的事件,效率会大不相同
Nate 2011-08-27
  • 打赏
  • 举报
回复
为什么要改变一次焦点就保存一次呢?对于新增的行,你可以判断在输入到最后一列的数据时保存,如果成功,再另外新增一行或者进行其他操作啊。
SKY_4K_PPM 2011-08-27
  • 打赏
  • 举报
回复
1.我在数据窗口中的rowfocushanged 写this.update() 后当我多次移动焦点时 就会保存多次 怎样写才能保存一次

我试过用this.retrieve() 但运行时会报错 然后所有的程序都会关闭掉
=======================================================================
我建议使用 itemchanged 实际上你并非是需要每次移动焦点的时候要保存,你是希望焦点的数据被修改而立即保存吧。用 dwo.name锁定那几个比较敏感的修改字段,update就可以了。
========================================================================

2.当我点击最后一行时会自动在最后插入一行 并在指定的列插入默认值 但我保存时pb就会报错 因为数据库中某些列不允许为

空 所以我怎样才能不保存最后一行 而我现在的做法只是屏蔽掉了这个错误 但后面还回出现一些问题!
========================================================================
那就可能是你的主键列或者非空列 没有被赋值 然后就更新报的错误吧,或许你的主键列或者非空根本就没有在输入的datawindow之内。
========================================================================
baiynije 2011-08-27
  • 打赏
  • 举报
回复
或者你可以用一個datastore將修改過的行復制到datastore來協助更新
沧海——粟 2011-08-26
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 yyoinge 的回复:]
rowfocuschanged事件中这么写:
C/C++ code
if modifiedcount() + deletedcount() > 0 then
dwitemstatus ldwst
boolean lb_last_st_changed
if rowcount() > 0 then
ldwst = dw_1.getitemstatus……
[/Quote]



当多次点击时 还是会保存多次 也就是说我录入一行数据后 再点击几次别的行 就会保存几条数据 但我只要保存一条就行 也就是需要在保存完成后清除缓存的数据 可是不知道这样行不行 怎样写呢?
沧海——粟 2011-08-26
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 baiynije 的回复:]
你這種做法有問題吧,每移動一個焦點就保存一次?
[/Quote]



恩 我觉得也是 但怎么样判断是否更改呢 而且不保存自动插入的默认值所在的行
yyoinge 2011-08-26
  • 打赏
  • 举报
回复
rowfocuschanged事件中这么写:
if modifiedcount() + deletedcount() > 0 then
dwitemstatus ldwst
boolean lb_last_st_changed
if rowcount() > 0 then
ldwst = dw_1.getitemstatus(rowcount(), 0, primary!)
if ldwst = new! then //newmodified! 的需要控制不update吗?
dw_1.setitemstatus(rowcount(), 0, primary!, notmodified!)
lb_last_st_changed = true //手动修改过最后一行的状态
end if
end if
if update(true, true) = 1 then
commit using sqlca;
else
rollback using sqlca;
if lb_last_st_changed then //还原最后一行状态
dw_1.setitemstatus(rowcount(), 0, primary!, ldwst)
end if
messagebox('提示', '无法自动保存!')
return
end if
end if
baiynije 2011-08-26
  • 打赏
  • 举报
回复
你這種做法有問題吧,每移動一個焦點就保存一次?
nvhaixx 2011-08-26
  • 打赏
  • 举报
回复
我觉得如果要保存资料的话,你应该是先比对一下资料,如果资料有变化,你就保存,没有变化,就不管!

609

社区成员

发帖
与我相关
我的任务
社区描述
PowerBuilder DataWindow
社区管理员
  • DataWindow社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧