执行dw_9.CrosstabDialog()函数后,retrieve函数就失效了

tomorrower 2010-05-25 08:07:26
我使用crosstab创建数据窗口,sql语句为静态的: SELECT "tj_jbss"."dq", "tj_jbss"."bcpd","tj_jbss"."nyzh","tj_jbss"."sjdzh","tj_jbss"."jqjbssl" FROM "tj_jbss" ,选中:Rebuild columns at runtime

其中:
dw_9.DataObject = 'dw_jbss_tj1'
dw_9.SetTransObject( sqlca)
dw_9.retrieve( )能够正常获取数据

但是使用函数CrosstabDialog()后,dw_9.retrieve( )函数返回-1
代码如下:
dw_9.DataObject = 'dw_jbss_tj'
dw_9.SetTransObject( sqlca)
i = dw_9.CrosstabDialog()
MessageBox("",String(i))
j=dw_9.Retrieve( )
MessageBox("",String(j))

执行结果是i返回1(正常),j返回-1,不能检索到数据
我用dw_9.CrosstabDialog()是为了用户能够自定义行列,改变数据窗口显示格式
我不知道为什么?感觉是执行dw_9.CrosstabDialog()函数后,retrieve函数就失效了

...全文
132 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
tomorrower 2010-06-17
  • 打赏
  • 举报
回复
SQL语句的确是静态的,就是用普通的select 语句
但是 Rebuild columns at runtime是选中的

可是先retrieve后再使用CrosstabDialog,效果没有什么不同

先retrieve后再CrosstabDialog,最后还是要retrieve一下的吧?
lauhuaxun 2010-06-17
  • 打赏
  • 举报
回复
我用你的代码试了,
要用先retrieve后再CrosstabDialog
是可以的,不需要再retrieve

我的代码:
int i,j

dw_1.DataObject = 'd_001'
dw_1.SetTransObject( sqlca)

j=dw_1.Retrieve( )
MessageBox("",String(j))

i = dw_1.CrosstabDialog()
MessageBox("",String(i))
new4everlau 2010-06-06
  • 打赏
  • 举报
回复
静态的语句差生动态的报表,经测试这样的情况需要在retrieve后CrosstabDialog
lauhuaxun 2010-06-05
  • 打赏
  • 举报
回复
根据以上分析,可能是你的SQL语句是静态的,而你用了CrosstabDialog()函数以后,用户自定义的列与你之前用静态SQL语句建立的数据窗口列不一致造成.

我是个新手,还在学习中,如果说得不对,请多批评!
lauhuaxun 2010-06-05
  • 打赏
  • 举报
回复
CrosstabDialog

  功能:显示 Crosstab Definition 对话框 , 这样用户能够在运行过程中修改 Crosstab 风格的数据窗口对象的定义 在使用数据窗口画笔创建Crosstab 风格的数据窗口对象时, 也使用了Crosstab Definition 对话框   语法:dwcontrol.CrossTabDialog ( )   参数:dwcontrol 数据窗口控件名   返回值:Integer 函数执行成功时返回 1, 出现错误时返回-1, 如果dwcontrol 的值为 NULL, 则CrosstabDialog()函数返回NULL   用法: CrosstabDialog()函数只对Crosstab 风格的数据窗口有效 ,如果数据窗口中的数据窗口对象不是这种风格 则CrosstabDialog()函数什么也不做   示例:下面的代码是命令按钮 cb_define 的一部分,用户单击该按钮后,应用程序显示 Crosstab Definition 对话框,这样用户就可以根据需要修改Crosstab 风格的数据窗口对象的定义了   dw_1.CrosstabDialog()

lovemoreh 2010-05-25
  • 打赏
  • 举报
回复
可能要重新执行一次dw_9.SetTransObject( sqlca)吧?
tomorrower 2010-05-25
  • 打赏
  • 举报
回复
执行dw_9.CrosstabDialog()后,该函数执行成功
跳出了crosstab define对话框

然后我改变了一下行列,OK按钮点击之后,就没有反应了
retrieve函数返回-1
If there is no DataWindow object assigned to the DataWindow control or DataStore, this method returns -1

难道无视语句:dw_9.DataObject = 'dw_jbss_tj'的存在?该语句肯定是其作用的

是不是执行dw_9.CrosstabDialog()了dw_9又没有DataObject了吗?
tomorrower 2010-05-25
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 xys_777 的回复:]
引用 2 楼 tomorrower 的回复:
引用 1 楼 xys_777 的回复:
只看retrieve函数返回不能看出具体错误描述,

你需要在查看sqlca.sqlerrtext

还有在dw的dberror事件上把那里的错误信息显示出来看看


我在dw的dberror事件中放入代码:
messagebox("(sqldbcode)+'|'+sqlerrtext+'|'……
[/Quote]


一个都没有:
IF Not IsNull(SQLDBCode) THEN

MessageBox("sqldbcode",String(SQLDBCode))
END IF

IF Not IsNull(SQLErrText) THEN

MessageBox("sqlerrtext",SQLErrText)
END IF


IF Not IsNull(sqlsyntax) THEN

MessageBox("sqlsyntax",sqlsyntax)
END IF

任何提示都没有
永生天地 2010-05-25
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 tomorrower 的回复:]
引用 1 楼 xys_777 的回复:
只看retrieve函数返回不能看出具体错误描述,

你需要在查看sqlca.sqlerrtext

还有在dw的dberror事件上把那里的错误信息显示出来看看


我在dw的dberror事件中放入代码:
messagebox("(sqldbcode)+'|'+sqlerrtext+'|'+sqlsyntax",string(sqldb……
[/Quote]
那应该是没有错误(sqlerrtext 是空了),sqlca.sqlerrtext呢
tomorrower 2010-05-25
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 xys_777 的回复:]
只看retrieve函数返回不能看出具体错误描述,

你需要在查看sqlca.sqlerrtext

还有在dw的dberror事件上把那里的错误信息显示出来看看
[/Quote]

我在dw的dberror事件中放入代码:
messagebox("(sqldbcode)+'|'+sqlerrtext+'|'+sqlsyntax",string(sqldbcode)+'|'+sqlerrtext+'|'+sqlsyntax)

执行时候这个语句没有反应
永生天地 2010-05-25
  • 打赏
  • 举报
回复
只看retrieve函数返回不能看出具体错误描述,

你需要在查看sqlca.sqlerrtext

还有在dw的dberror事件上把那里的错误信息显示出来看看
tomorrower 2010-05-25
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 lovemoreh 的回复:]
可能要重新执行一次dw_9.SetTransObject( sqlca)吧?
[/Quote]

经过测试,无效

611

社区成员

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

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