当前位置: 代码迷 >> PB >> 关于webserive的DW Create成功但无数据?解决方案
  详细解决方案

关于webserive的DW Create成功但无数据?解决方案

热度:19   发布时间:2016-04-29 05:56:38.0
关于webserive的DW Create成功但无数据?
以下服务器端,如果从客户端生成DW的syntax,传到webserive以下的方法中,得到的数据始终为0,如果我用SQL代码动态生成DW的SYNTAX得到的数据是正确的,如以下//的内容。我也有测试,如果按传统的C/S结构,用Describe("DataWindow.Syntax")再用ds_1.Create(as_syntax,as_errtext) ,是成功的。但不知道为什么,经过webserive的传输后,得到的数据就不对?
这是为什么呢?困扰了好长段时间了??


//String ls_sql
//ls_sql = 'select * from it_port'
//String error_syntaxfromSQL,ls_data
//String new_sql, new_syntax
//new_syntax = SQLCA.SyntaxFromSQL(ls_sql, 'Style(Type=Form)', error_syntaxfromSQL)
/*
string as_syntax:从客户端生成DW的syntax
*/

IF ds_1.Create(as_syntax,as_errtext) <> 1 THEN
as_errtext = '生成数据窗口出错'+as_errtext
DISCONNECT Using SQLCA;
RETURN ''
END IF

IF ds_1.SetTransObject(SQLCA) <> 1 THEN
as_errtext = '设置事务出错'+is_err_a
DISCONNECT Using SQLCA;
RETURN ''
END IF

ds_1.Retrieve()

IF ds_1.RowCount() = 0 THEN
as_errtext = '0'
END IF

ls_xmldata = ds_1.Describe("datawindow.data")

------解决方案--------------------
//====================================================================
// 事件: n_webservice.of_getdata_sql()
//--------------------------------------------------------------------
// 描述:利用as_sql创建datastore,压缩后返回as_blob
//--------------------------------------------------------------------
// 参数:
//  value     string as_sql[]     
//reference long al_long[]
//  reference blob   as_blob[]
//--------------------------------------------------------------------
// 返回:  integer
//--------------------------------------------------------------------
// 作者: fjw 日期: 2009年03月31日
//--------------------------------------------------------------------
//
//--------------------------------------------------------------------
// 修改历史:
//
//====================================================================
string ls_errors,ls_presentation_str,ls_dwsyntax_str
long li_count,i
datastore ds[]
blob lb_blob[],lb_temp
long li_ret=1
string ls_tempstr
if ib_connect=false then
return -11
end if

li_count=UpperBound(as_sql)
ls_presentation_str="style(type=grid)"
for i=1 to li_count
ls_dwsyntax_str=sqlca.SyntaxFromSQL(trim(as_sql[i]),ls_presentation_str,ls_errors)
ds[i]=create datastore
li_ret=ds[i].Create( ls_dwsyntax_str, ls_errors)
if li_ret=-1 or isnull(li_ret) then
li_ret=-12
exit
end if
ds[i].settransobject(sqlca)
ds[i].retrieve()
ls_tempstr=ds[i].Describe("datawindow.data")
lb_blob[i]=blob(ls_tempstr)
al_long[i]=len(lb_blob[i])
lb_temp=lb_temp+lb_blob[i]
next

if li_ret>=0 then
//没取到数据
if isnull(lb_temp) or len(lb_temp)=0 then
of_disconnect()
for i=1 to li_count
if isvalid(ds[i]) then
destroy ds[i]
end if
next
return  1000
end if
//判断是否超过预订长度,超过者压缩
if len(lb_temp)>il_max then
if n_zlib1.of_compress(lb_temp,as_blob)=false then
li_ret=-3
end if
li_ret=200
else
as_blob=lb_temp
li_ret=100
end if
end if

for i=1 to li_count
if isvalid(ds[i]) then
destroy ds[i]
end if
next

of_disconnect()
return li_ret
  相关解决方案