hur.cn - 华软网

 热门搜索

关于传递多个参数的动态SQL

  作者:未知    来源:网络    更新时间:2018/6/13
gs_sum="sum(sj01+sj02+sj03)"
lssql="select ? from tjbb where zmlh=? and tjbb.bm='cb2' and tjbb.rq <= ? and tjbb.rq >= ? group by zmlh using dbsr;"
prepare sqlsa from :lssql using dbsr;
describe sqlsa into sqlda;
declare c2 dynamic cursor for sqlsa;
sqlda.setdynamicparm(1,gs_sum)
sqlda.setdynamicparm(2,zmlh[i])
sqlda.setdynamicparm(3,sydrq1)
sqlda.setdynamicparm(4,ncrq1)
open dynamic c2 using descriptor sqlda;
fetch c2 into :sya;
取不出数值,请问哪里出错了?
------华软网友回答------
1.用messagebox("test",sqlca.sqlerrtext)看看出错信息
2.如果没有错,检查一下是否有符合条件的数据
------华软网友回复------
the error is "cursor is not open"
what can i do?
------华软网友回复------
lssql="select ? from tjbb where zmlh=? and tjbb.bm='cb2' and tjbb.rq <= ? and tjbb.rq >= ? group by zmlh using dbsr;"
改為
lssql="select ? from tjbb where zmlh=? and tjbb.bm='cb2' and tjbb.rq <= ? and tjbb.rq >= ? group by"

using是pb的寫法,在oracle中是不能用的,而且也不要";"號.

------华软网友回复------
谢谢vnsoft,可我用的是pb不是oracle.
------华软网友回复------
谢谢各位,是我没有关闭游标的缘故.

------华软网友回复------
解决了吗?
------华软网友回复------
我建议你使用另外一种方式实现你要的功能
以下代码是dw.create的帮助,只要把DW换成DATASTORE就可以通过DATASTORE取出数据根本不需要那么复杂的动态SQL,另外,你可以把以下代码封装以下,变成f_GetSqlData(datastore,trans,sql) return rowcount 日后只要需要动态SQL的地方就声明一个datastore,然后用这个函数装datastore就好了,非常方便。

string error_syntaxfromSQL, error_create

string new_sql, new_syntax

new_sql = 'SELECT emp_data.emp_id, ' &

        + 'emp_data.emp_name ' &

        + 'from emp_data ' &

        + 'WHERE emp_data.emp_salary>45000'

new_syntax = SQLCA.SyntaxFromSQL(new_sql, &

        'Style(Type=Form)', error_syntaxfromSQL)

IF Len(error_syntaxfromSQL) > 0 THEN

        // Display errors

        mle_sfs.Text = error_syntaxfromSQL

ELSE

        // Generate new DataWindow

        dw_new.Create(new_syntax, error_create)

        IF Len(error_create) > 0 THEN

            mle_create.Text = error_create

        END IF

END IF

dw_new.SetTransObject(SQLCA)

dw_new.Retrieve()      
华软声明:本内容来自网络,如有侵犯您版权请来信指出,本站立即删除。