hur.cn - 华软网

 热门搜索

菜鸟继续求教,还是数据窗口的问题(在线等)

  作者:未知    来源:网络    更新时间:2018/6/13
我建了2个窗口,分别为W_1和W_2,各有一个数据窗口,分别引用的表中只有一个字段ID(主键)名称和值都相同。
当我从W_1打开W_2时,想把一些当前W_1.DW_1中的内容直接显示在W_2.DW_1上,应该怎样做??
例如:表一有 学号,姓名,性别等等,表二有 学号,成绩一,成绩二等等,当我用W_1打开W_2时,W_2.DW_1上要能显示当前W_1中的学号和姓名,但W_2.DW_1更新数据时只能改表二的内容。
------华软网友回答------
使用结构数组定义,然后把W_1.DW_1中的内容赋值给结构数组变量,
打开W_2时候通过结构数组变量传给W_2.DW_1
------华软网友回复------
saiche05(赛车)能说详细点吗??我刚学PB不久,有很多基础的东西都不清楚。。。
------华软网友回复------
菜单file->new->选择PB Object页->Structure
定义Structure的结构:
st_id[]
st_name[]
st_course[]

假设保存名称为str_st

在W_1的按钮中定义:
str_st lstr_st
long ll_row,ll_rowcount
ll_rowcount=dw_1.rowcount()
if ll_rowcount<=0 then return

for ll_row=1 to ll_rowcount
    lstr_st.st_id[ll_row]=dw_1.object.学号[ll_row]
    lstr_st.st_name[ll_row]=dw_1.object.学生姓名[ll_row]
next

openwithparm(w_2,lstr_st)

在w_2的open()事件中:
dw_1.settransobject( SQLCA )
str_st lstr_st
long ll_row,ll_rowcount,ll_insert
lstr_st=message.PowerObjectParm

if isvalid(lstr_st)  then
   ll_rowcount=upperbound(lstr_st.st_id)
   for ll_row=1 to ll_rowcount

    ll_insert=dw_1.insertrow(0)
dw_1.setitem(ll_insert,"学号",lstr_st.st_id[ll_row])
next

end if
//注:这只是大概内容。具体情况你再琢磨一下吧。



   
   



------华软网友回复------
在打开W_2时把W_1中的DW_1传过去,您想要什么就读什么吧。

用以下语句打开W_2:
openwithparm(w_2,dw_1)

然后在W_2的OPEN事件中接收参数:
datawindow ldw

ldw = Message.PowerObjectParm
if not isvalid(ldw) or isnull(ldw) then
   MessageBox('提示','参数接收错误!')
   return
end if

然后想要什么数据就从ldw中读吧!
------华软网友回复------
W_2.DW_1上要能显示当前W_1中的学号和姓名?
具体是什么意思,我可能不是很清楚,
如果想根据当前W_1中的学号和姓名从数据库中检索出W_2.DW_1的数据,
那么只能是:
在w_2的open()事件中:
dw_1.settransobject( SQLCA )
str_st lstr_st
long ll_row,ll_rowcount,ll_insert
string ls_id
is_sql=dw_1.getsqlselect()
lstr_st=message.PowerObjectParm

if isvalid(lstr_st) then
ll_rowcount=upperbound(lstr_st.st_id)
ls_id=lstr_st.st_id[1]
if ll_rowcount>=2 then
for ll_row=2 to ll_rowcount
ls_id=ls_id+','+lstr_st.st_id[ll_row]

next
end if
end if

string ls_sql
ls_sql=is_sql+" where 学号 in "+ls_sql
dw_1.setsqlselect(ls_sql)
dw_1.retrieve()


在窗口w_2定义实例变量
string is_sql


------华软网友回复------
W_2.DW_1上要能显示当前W_1中的学号和姓名?
具体是什么意思,我可能不是很清楚,
如果想根据当前W_1中的学号和姓名从数据库中检索出W_2.DW_1的数据,
那么只能是:
在w_2的open()事件中:
dw_1.settransobject( SQLCA )
str_st lstr_st
long ll_row,ll_rowcount,ll_insert
string ls_id
is_sql=dw_1.getsqlselect()
lstr_st=message.PowerObjectParm

if isvalid(lstr_st) then
ll_rowcount=upperbound(lstr_st.st_id)
ls_id=lstr_st.st_id[1]
if ll_rowcount>=2 then
for ll_row=2 to ll_rowcount
ls_id=ls_id+','+lstr_st.st_id[ll_row]

next
end if
end if

string ls_sql
ls_sql=is_sql+" where 学号 in "+ls_sql
dw_1.setsqlselect(ls_sql)
dw_1.retrieve()


在窗口w_2定义实例变量
string is_sql


------华软网友回复------
string ls_sql
ls_sql=ls_id     //忘了添加
ls_sql=is_sql+" where 学号 in "+ls_sql
dw_1.setsqlselect(ls_sql)
dw_1.retrieve()


在窗口w_2定义实例变量
string is_sql
------华软网友回复------
不好意思saiche05(赛车),flyerlxg(飞鸟) 。可能我的语文太差,写得大家都看不懂....
其实我要求没那么复杂,因为这几个表的互相切换次数很多,所以我想用一个全局变量来传递它们的共有列ID算了。
我只是想在W_2.DW_1上加个控件,能显示表二中没有的姓名就可以了....可我不知道应该用的是什么控件,内容要怎么写....
------华软网友回复------
定义Structure的结构:
st_id[]
st_name[]
st_course[]
还是可以使用这个结构数组变量呀,
在全局变量里定义
str_st gstr_st
ll_rowcount=upperbound(gstr_st.st_id)
ls_id=gstr_st.st_id[1]

------华软网友回复------
很简单的,
w_2的数据窗口这样建:
select 表1.学号,表1.姓名,表2.成绩1,...,表2.成绩n
from 表1,表2
where 表1.学号 = 表2.学号

------华软网友回复------
FOR saiche05(赛车):我的全局变量就是用你的方法,不过。。。。我还是不知道怎么在DW上添加什么样的控件能显示变量 -_-!  
FOR csdsjkk()  :我不想在一个DW里引用两个表,因为要能随时更改更新内容,怕会有些其他问题。。
------华软网友回复------
我晕啊,简单点吧,需要两个函数

nettranobject()

具体的找点教材或是书什么就知道了啊,很容易的啊
------华软网友回复------
把图示的dw语法转为文字表达式
然后这样修改:

select 原有的列,'                 ' from  ...

中间的 '              ' 即为新加列
这个新加列就可当作姓名列处理


------华软网友回复------
表2的数据窗口中再增加一个学号列,edit格式为dddw,用表1的学号列和姓名列作为其dddw,
把display 和 data都设为 姓名


------华软网友回复------
谢谢各位的大力帮助,问题终于解决了~~~
用的是csdsjkk()和 saiche05(赛车)结合的方法。      
华软声明:本内容来自网络,如有侵犯您版权请来信指出,本站立即删除。