一个SQL语句里面的 where 后的条件是动态变化的(比如有可能是“金额大于1”,也有可能是“数量小于10),想通过代码执行该SQL,并获取该结果(该结果有可能是一行,也有可能是多行数据)
------解决方案--------------------
用数据存储
- C/C++ code
datastore ldsstring ls_sqlstring error_syntaxfromSQL, error_createstring ls_syntaxlong ils_sql = "select col1, col2 from t_table where je > 0"lds = create datastorels_syntax = sqlca.SyntaxFromSQL(ls_sql, 'Style(Type=Grid)', error_syntaxfromSQL)IF Len(error_syntaxfromSQL) > 0 THEN messagebox("",'生成数据存储语法发生错误!~r~n错误原因:' + error_syntaxfromSQL) destroy lds return -1ELSE lds.Create(ls_syntax, error_create) IF Len(error_create) > 0 THEN f_message( '建立数据存储时发生错误!~r~n错误原因:' + error_create) destroy lds return -1 END IFEND IF//此时lds中存储的就是通过ls_sql获得的数据,可能是1行也可能是多行,行数对应lds.rowcount()//for i = 1 to lds.rowcount() //第i行的col1的值 lds.object.col1[i] //第i行的col2的值 lds.object.col2[i]nextdestroy lds
------解决方案--------------------
- C/C++ code
string ls_sqlstring ls_syn,ls_errls_sql = " SELECT aa,bb cc FROM tab_1 WHERE aa='01' " //这里的字符串可以动态构造//生成数据窗口语法ls_syn = SQLCA.SyntaxFromSQL(ls_sql,'Style(Type=Grid),ls_err)if len(ls_err)>0 then MessageBox("提示","生成语法失败") returnend ifdw_1.Create(ls_syn,ls_err)if len(ls_err)>0 then MessageBox("提示","创建数据窗口失败") returnelse dw_1.SetTransObject(SQLCA) dw_1.Retrieve() commit; //检索数据完成,可以进行操作 ...end if