hur.cn - 华软网

 热门搜索

请教 datawindow 传递参数的问题 急急急!!!!!在线等

  作者:未知    来源:网络    更新时间:2018/1/1
SELECT buaa.tdb073.single_code,   
         buaa.tdb073.in_loca,   
         buaa.tdb073.real_quan,   
         buaa.tdb001.sto_quanti  
    FROM buaa.tdb001,   
         buaa.tdb073  
   WHERE ( buaa.tdb001.single_code = buaa.tdb073.single_code )
     and ( buaa.tdb073.proc_dist = '0')
     and ( buaa.tdb073.plan_decider in ('4','7','8','9'))
     and ( buaa.tdb073.in_loca in (:loca_code))

这个 loca_code 可以 传进来吗???怎么个传法 我已经试验了很多次了
------华软网友回答------
你这个是在哪里写的?
------华软网友回复------
当然可以,但loca_code也必须是一个数组类型
------华软网友回复------
写在 数据窗里面的 sql 

我要 传的是 "0001","0002","0003"
------华软网友回复------
数组?????
------华软网友回复------
是可以的!
------华软网友回复------
那怎么 写法????
------华软网友回复------
string loca_code

loca_code = "0001" + "," + "0002" + "," + "0003"
dw_1.retrieve(loca_code)

这样 肯定是提不出数据的
------华软网友回复------
string loca_code

loca_code = '"' + '0001' + '","' + "0002" + "","" + "0003" + '"'
loca_code = mid(loca_code,2,len(loca_code) - 2)
dw_1.retrieve(loca_code)

这样 也不可以  能不能 告诉我怎么写法
------华软网友回复------
loca_code = mid(loca_code,2,len(loca_code) - 2)

那你将上面的去掉呢?
------华软网友回复------
不行的 这样 会多出引号的 我试过了
------华软网友回复------
:loca_code 定义参数时用stringarry
string loca_code[]

loca_code[1] ='0001' 
loca_code[2] ='0002' 
loca_code[3] ='0003' 

dw_1.retrieve(loca_code)

------华软网友回复------
用like,我用过多次了

SELECT buaa.tdb073.single_code,   
         buaa.tdb073.in_loca,   
         buaa.tdb073.real_quan,   
         buaa.tdb001.sto_quanti  
    FROM buaa.tdb001,   
         buaa.tdb073  
   WHERE ( buaa.tdb001.single_code = buaa.tdb073.single_code )
     and ( buaa.tdb073.proc_dist = '0')
     and ( buaa.tdb073.plan_decider in ('4','7','8','9'))
     and ( '"'+buaa.tdb073.in_loca+'"' like (:loca_code))

------华软网友回复------
学习
  and ( buaa.tdb073.in_loca in (:loca_code))是什么意思啊?有这种写法么?
有了buaa.tdb073.in_loca为什么还有:loca_code啊,直接把:loca_code的值存到buaa.tdb073.in_loca里不行么?
------华软网友回复------
arch_zhh(风过无痕) 
 可以的

哪能不能 再问问  这种情况 发生在存储过程里面 怎么 处理  谢谢啦
------华软网友回复------
将变量loca_code设置成数组类型,记得将窗口的实参也设置为数组类型!!!1
------华软网友回复------
这种情况 发生在存储过程里面 :
方法一:
参数使用string @parms,
'000100020003'
然后在存储过程中使用临时表(#t (parms char(4))

)将字符串循环分割
.....
 and ( buaa.tdb073.in_loca in (select parm from #t))

方法二:
------华软网友回复------
参数使用string @parms
'0001,0002,0003'

然后在存储过程中sql语句
.....
 and ( @parm like '%'+buaa.tdb073.in_loca +'%')

也许提供的方法不是最科学的,最好的,不过应该可以使用
------华软网友回复------
很难

我也遇到过这样的问题 

in在选多者之一的时候 很好用 但是数据窗口对此支持不是很好

所以我改用like

公式如下:

a in b = b like "%a%"



@_@




秋枫点评 品质保证
------华软网友回复------
先编写一个函数f_myretrieve()
代码如下:
global type f_myretrieve from function_object
end type

forward prototypes
global function integer f_myretrieve (datawindow adw_dw, string as_string)
end prototypes

global function integer f_myretrieve (datawindow adw_dw, string as_string);string ls_oldsql,ls_newsql,ls_temp
int li_pos1,li_pos2,ls_posw
ls_oldsql = adw_dw.GetSqlSelect()
ls_newsql = Lower(ls_oldsql)
li_pos1 = pos(ls_newsql,"group by ")
li_pos2 = pos(ls_newsql,"order by ")
li_pos1 = Min(li_pos1,li_pos2)
If li_pos1 >0 Then
ls_temp = Mid(ls_newsql,li_pos1)
ls_newsql = Mid(ls_newsql,1,li_pos1 - 1)
End If
li_pos2 = Pos(ls_newsql," where ")
If li_pos2 > 0 Then 
ls_newsql = ls_newsql + " And " + as_string + " " + ls_temp
Else
ls_newsql = ls_newsql + " Where " + as_string + " " + ls_temp
End If

If adw_dw.SetSqlSelect(ls_newsql) = 1 Then
adw_dw.Retrieve()
Else
Return -1
End If
adw_dw.SetSqlSelect(ls_oldsql)
Return 1
end function


//然后open事件调用该函数:
String ls_code //你的数据窗口要把最后and 的检索参数去掉
ls_code = "buaa.tdb073.in_loca in '0001','0002','0003'" //in后面也可以用select 语
//句:"in_local in select code from 表名 where 条件"
f_myretireve(dw_1,ls_code)

------华软网友回复------
你 把整个where条件全部做成变量形式,然后把最后的内容做成数组,试试
------华软网友回复------
哎呀 不好意思 分给错了
------华软网友回复------
arch_zhh(风过无痕)  

到时 给你散分 :)
------华软网友回复------
arch_zhh(风过无痕)  
能 交个 朋友  我的msn是 linjie5460@hotmail.com      
华软声明:本内容来自网络,如有侵犯您版权请来信指出,本站立即删除。