简单问题

wjjhyf 2003-05-02 01:17:43
dateawindow操作一表A,更新A的同时更新B表中的数据,怎么处理,请赐教。我是新手!
...全文
71 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
3166910 2003-05-02
  • 打赏
  • 举报
回复
$PBExportHeader$gf_dwupdate.srf
$PBExportComments$设置数据窗口中可以更新的表
global type gf_dwupdate from function_object
end type

forward prototypes
global function integer gf_dwupdate (datawindow a_dw, string as_update_table)
end prototypes

global function integer gf_dwupdate (datawindow a_dw, string as_update_table);//====================================================================
// 函数 _ uf_update_setup for uo_fyz_cs returns integer
//____________________________________________________________________
// 描述:设置数据窗口中可以更新的表
//
// 特殊描述:
//____________________________________________________________________
// 参数:
// datawindow a_dw <Pass By> <描述>将要更新的数据窗口
// string as_update_table <Pass By> <描述>将要修改的表名的全称。
//____________________________________________________________________
// 返回值: (INTEGER)
//____________________________________________________________________
// 作者: chengf 日期: 2002_09_10

//====================================================================
Long ll_ipos,ll_maxcol,i
String ls_colnam,ls_mod,ls_table_name,ls_err,ls_updatekey[]
string ls_qualifier = ''

// 得到这个DataWindow包含列的数量
ls_err=a_dw.object.DataWindow.Column.Count
ll_maxcol=Integer(ls_err)
If(ll_maxcol < 1)Then Return 1

// 确认DataWindow中的每一列是否属于要修改的表中的列,如是将其update 属性设为Yes,否则为No.
FOR i=1 To ll_maxcol
ls_mod="#"+String(i)+".Name"
ls_colnam=a_dw.Describe(ls_mod)
ls_table_name=a_dw.Describe(ls_colnam + ".dbName")
ls_table_name=Left(ls_table_name,(Pos(ls_table_name,".",1) - 1))
If(Upper(as_update_table)=Upper(ls_table_name))Then
ls_mod=ls_colnam+".Update=Yes"
Else
// 如果该列不在可修改的表中,
// 而其为主键的属性为TRUE
// 将其列名存在ls_updatekey[ ]中
// 并将其主键的属性设为FALSE。
// 由于PB不保留列的全名,我们不能。
// 保留非修改表的键的名称。
// 所以我们将其保留在数组之中,以便其恢复
If(Upper(a_dw.Describe(ls_colnam+".Key"))=" YES")Then
ls_updatekey[upperbound(ls_updatekey[]) + 1]=ls_colnam
ls_mod=ls_colnam+".Key=No"
If(a_dw.Modify(ls_mod)<>"")Then Return 2
End If
ls_mod=ls_colnam+".Update=No"
End IF
// 确认修改是否成功
If(a_dw.Modify(ls_mod)<>"")Then Return 2

NEXT
// 将修改表名设置为全称
a_dw.object.DataWindow.Table.UpdateTable = ls_qualifier + as_update_table
// 修改DataWindow
If(a_dw.Update(TRUE,FALSE)<>1)Then
Return 5
Else
// 将DataWindow恢复为其原来的状态
ll_maxcol=UpperBound(ls_updatekey)
FOR i=1 to ll_maxcol
ls_mod=ls_updatekey[i]+".key=Yes"
If (a_dw.Modify(ls_mod)<>"") Then Return 6
next

End If
Return 0
end function


这是一个全局函数导出结果,你创建gf_dwupdate.srf这个文件复制以上内容,然后导入,调用的时候分别传入要更新的数据窗口(dwo),和需要修改哪张表(string)就ok了,更新两张表就调用两次
xirumin 2003-05-02
  • 打赏
  • 举报
回复
可以
1。直接用sql语句
2. 看不见的dw
3. datastore
fiend_terminator 2003-05-02
  • 打赏
  • 举报
回复
程序可以作活点啊
增加是增加,一条增加保存后再增加第二条
修改是修改,一次只能修改一条记录,保存后在修改任意条
-------
利用以上网友给的方法都可以。
愉快的登山者 2003-05-02
  • 打赏
  • 举报
回复
1.利用数据库中的触发器功能,当表A修改时,触发器自动修改表B.
不让使用,这个就留着吧.
2.在进行A表的录入或修改时,将录入修改的日期时间添入,然后根据日期时间进行判断,将表A的修改数据统计到表B中.
wangkenping 2003-05-02
  • 打赏
  • 举报
回复
数 据 缓 冲 区 的 状 态 值
Primary Buffer 和Delete Buffer 都 有 行 级 和 列 级 的 状 态 值, 这 个 状 态 值 是 一 个 枚 举 类 型 。 在 提 交 时 由 该 行 的 状 态 值 来 决 定 是 否 要 产 生SQL 语 句, 其 中Primary Buffer 产 生 的 是IN-SE RT 和UPDATE 语 句, 而Delete Buffer 产 生 的 是DELETE 语 句。 我 们 用GetItemStatus() 函 数 和Se tItemStatus() 函 数 可 以 对 这 一 状 态 值 作 操 纵。 这 一 枚 举 状 态 有 以 下 四 种:

·NotModified! — — — 该 行 或 行 的 值 为 查 询 所 得, 没 有 发 生 改 变。

·DataModified! — — — 该 行 或 列 的 值 为 查 询 所 得, 发 生 了 改 变。

·New! — — — 该 行 或 列 为 一 插 入 的 新 行, 数 据 没 有 发 生 改 变( 数 据 为 空 或 缺 省 值)。

·NewModified! — — — 该 行 或 列 为 一 插 入 的 新 行, 数 据 发 生 改 变。 改 变 是 通 过 用 户 键 盘 输 入 或 调 用 了SetItem() 函 数。

wjjhyf 2003-05-02
  • 打赏
  • 举报
回复
操作B表,可用内嵌SQL语句!
wjjhyf 2003-05-02
  • 打赏
  • 举报
回复
是这样,A表是销售商品,B 表库存,当一次多个销售被录入时商品被录入且更新时,怎么处理!
wjjhyf 2003-05-02
  • 打赏
  • 举报
回复
1.领导规定不准用触发器
2.我怎么知道A更新了哪些行,且哪些是新增的,哪些是修改的?
注要是datawindow一次可修改多行,然后更新!!
bomber2001 2003-05-02
  • 打赏
  • 举报
回复
^_^,当然也可以做一个datastore
用datastore操作表b
shahand 2003-05-02
  • 打赏
  • 举报
回复
1
触发器
2
保存按钮里面
if dw_1.update() = 1 then
commit using your_tran;
update b set....//嵌入式sql
end if

611

社区成员

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

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