作者:中河
用VFP习惯了控件拖拉即用,篮茑和VFP一样也具备这种特点,所以很快就掌握了,在开发一些APP的时候,数据的增、查、删是通过附带的一个mssql中间件来完成的,但该中间件有一个bug,有时查询数据时会出错,困惑了很久。后来接触到猫框,前端用篮茑来画出界面,数据交互用中间层webapi来解决,完美解决了上述困惑已久的问题。
我们知道webapi是通过get和post来发送网络请求,我们可以用vfp来建立,其代码如下:
代码语言:javascript复制Define Class myzzj As Session
**表查询
Procedure myselect
Local cPostData
sqlcmd=httpqueryparams("sqlcmd",This.iconnid)
oDBSQLhelper=Newobject("MSSQLHelper","MSSQLHelper.prg")
lcSQLCmd11 =sqlcmd
If oDBSQLhelper.SQLQuery(lcsqlcmd11 ,"biacx")<0
Error oDBSQLhelper.errmsg
Else
Return cursortojson("biacx")
Endif
Endproc
*get方式
Procedure Get
cResult=httpqueryparams("fnumber",This.iconnid)
m_tj="fnumber like'%&cResult%'"
TEXT TO lcSQLCmd textmerge noshow
SELECT * FROM CPXX
ENDTEXT
oDBSQLhelper=Newobject("MSSQLHelper","MSSQLHelper.prg")
If !Empty(m_tj)
lcSQLCmd = lcSQLCmd " Where " m_tj
Endif
If oDBSQLhelper.SQLQuery(lcSQLCmd,"cpxx")<0
Error oDBSQLhelper.errmsg
Endif
Return cursortojson("cpxx")
*post方式
Procedure post
cResult=httpqueryparams("fnumber",This.iconnid)
m_tj="fnumber like'%&cResult%'"
TEXT TO lcSQLCmd textmerge noshow
SELECT * FROM CPXX
ENDTEXT
oDBSQLhelper=Newobject("MSSQLHelper","MSSQLHelper.prg")
If !Empty(m_tj)
lcSQLCmd = lcSQLCmd " Where " m_tj
Endif
If oDBSQLhelper.SQLQuery(lcSQLCmd,"cpxx")<0
Error oDBSQLhelper.errmsg
Endif
Return cursortojson("cpxx")
Enddefine
前端篮鸟代码如下:
代码语言:javascript复制事件 按钮1.被单击()
取内容到编辑框 = 假
变量 m_spbm 为 文本型 =编辑框1.取内容()
if(m_spbm == "" ){
alert("查询内容不能为空!","提示信息");
return
}
对话框1.显示等待框("正在发送请求")
'网络操作1.置附加请求头({"Content-Type":"application/x-www-form-urlencoded;charset=utf-8","Cookie":"Name=admin;Pass=abc"})
网络操作1.发送网络请求("http://127.0.0.1:801/myzzj.fsp&proc=post",_
"post",_
"json",_
"fnumber=" m_spbm,_
5000)
结束 事件
事件 按钮2.被单击()
取内容到编辑框 = 假
变量 m_spbm 为 文本型 =编辑框1.取内容()
if(m_spbm == "" ){
alert("查询内容不能为空!","提示信息");
return
}
对话框1.显示等待框("正在发送请求")
'网络操作1.置附加请求头({"Content-Type":"application/json;charset=utf-8"})
网络操作1.发送网络请求("http://127.0.0.1:801/myzzj.fsp&proc=get",_
"get",_
"json",_
"fnumber=" m_spbm,_
5000)
结束 事件
事件 网络操作1.发送完毕(发送结果 为 逻辑型,返回信息 为 文本型)
对话框1.关闭等待框()
如果 发送结果 == 真 则
变量 jsonA 为 对象 = eval(返回信息)
普通表格1.清空表项()
普通表格1.添加表项("#FF8040",["编号","名称"])
普通表格1.置表项标记(普通表格1.取表项总数()-1,"标记" 普通表格1.取表项总数())
枚举循环首 jsonA.rows
普通表格1.添加表项("", [成员.fnumber,成员.fname])
普通表格1.置表项标记(普通表格1.取表项总数()-1,"标记" 普通表格1.取表项总数())
枚举循环尾
请
否则
对话框1.信息框("结果","发送失败,错误信息:" 返回信息)
结束 如果
结束 事件
事件 按钮3.被单击()
取内容到编辑框 = 假
变量 m_spbm 为 文本型 =编辑框1.取内容()
if(m_spbm == "" ){
alert("查询命令不能为空!","提示信息");
编辑框1.置内容("select * from cpxx")
return
}
对话框1.显示等待框("正在发送请求")
'网络操作1.置附加请求头({"Content-Type":"application/x-www-form-urlencoded;charset=utf-8","Cookie":"Name=admin;Pass=abc"})
网络操作1.发送网络请求("http://127.0.0.1:801/myzzj.fsp&proc=myselect",_
"post",_
"json",_
"sqlcmd=" m_spbm,_
5000)
结束 事件
通过该示例我们可以很快的掌握篮鸟与VFP webapI的数据交互,这个比较偏门,猫老师还是提倡我们用要么用 h5 。。要么用 flutter来设计,毕竟用篮鸟的人不多,不然掉坑里没人拉得回来。