专栏首页加菲猫的VFP只会用SQLEXEC你就OUT了?小张把它对象化,节省一天时间看小丽

只会用SQLEXEC你就OUT了?小张把它对象化,节省一天时间看小丽

书读的越多而不加思考,你就会觉得你知道得很多;而当你读书而思考得越多的时候,你就会越清楚地看到,你知道得很少。——伏尔泰

小丽今天请假了,小张今天看不到小丽了,甚是惆怅,于是又开始向吃瓜群众分享VFP开发技术咯。

很多狐友会用SQLEXEC就以为掌握了真正的CS开发了,每次操作数据库就是创句柄,SQLEXEC ,嫌麻烦,弄了一个公共变量存放句柄,也不对句柄的状态进行管理,也不对暗线错误处理去处理,而是抄别人的一个错误处理程序,也不求甚解。久而久之,网络中断,程序出错,抄来的错误处理程序,不断地弹窗弹窗弹窗,弹弹弹,弹走鱼尾纹。

MSSQLhelper 是执行SQL命令的封装类,,封装了常用的数据库操作。

特点是:无需管连接,可以获取执行失败的错误信息。

很多狐友写程序喜欢用SQLEXEC,执行失败就笼统提示执行失败,而不会去跟踪和处理错误,这是要不得的。

以下的示例所使用的数据表来自于MSSQL的NorthWind数据库

01

进行账套管理配置好连接参数

02

打开命令窗口执行如下命令

1 数据查询 SQLQuery方法

参数:SQL语句,游标名

返回表:返回查询的游标

返回值:>=0 返回查询记录数, <0 表示查询出错

错误信息:存放于类的errmsg属性

*-- 查询雇员表
oDBSQLhelper=NEWOBJECT("MSSQLHelper","MSSQLHelper.prg")
nRow=oDBSQLhelper.SQLQuery("select * from Employees","Employees")
if nRow<0
 ?oDBSQLhelper.errmsg
endif
BROWSE

2 数据查询 GetSingle 返回单个值

参数:SQL语句

返回值:返回数据的第一行第一列数据,null 且 errmsg不为空说明查询出错。

*-- 查询雇员表记录数
oDBSQLhelper=NEWOBJECT("MSSQLHelper","MSSQLHelper.prg")
?oDBSQLhelper.GetSingle("select count(*) from Employees")

3 执行非查询SQL命令 ExecuteSQL方法

参数:SQL语句

返回值:>=0 返回影响记录数, <0 表示查询出错

*--插入或修改记录
*--返回影响的记录数
oDBSQLhelper=NEWOBJECT("MSSQLHelper","MSSQLHelper.prg")
?oDBSQLhelper.ExecuteSQL("update Employees set LastName='123' where EmployeeID=1")

4 得到字段列的最大值GetMaxID方法 (MYSQL等其它数据库未测试)

参数: 字段名,表名

oDBSQLhelper=NEWOBJECT("MSSQLHelper","MSSQLHelper.prg")
?oDBSQLhelper.GetMaxID("EmployeeID","Employees")

5 判断某个字段是否存在 ColumnExists方法(MYSQL等其它数据库未测试)

参数: 字段名,表名

返回值:逻辑值

oDBSQLhelper=NEWOBJECT("MSSQLHelper","MSSQLHelper.prg")
?oDBSQLhelper.ColumnExists("EmployeeID","Employees")

6 执行多个语句

需打开程序PRG或表单中进行测试

TEXT TO lcSQLCmd NOSHOW TEXTMERGE
UPDATE LSNBBM SET LSNBBM_DQNM=LSNBBM_DQNM+1 WHERE LSNBBM_NMBH = 'XSFPLS'
SELECT LSNBBM_DQNM FROM LSNBBM WHERE LSNBBM_NMBH = 'XSFPLS'
ENDTEXT
oDBSQLhelper=NEWOBJECT("MSSQLHelper","MSSQLHelper.prg")
lclsh=oDBSQLHelper.GetSingle(lcSQLCmd)

03

参数传递的三种方式

1 private 声明变量,即可以用?传递参数

private myvar
myvar = "张三"
lcSQLCmd="select * from username where username=?myvar"
oDBSQLhelper=NEWOBJECT("MSSQLHelper","MSSQLHelper.prg")
nRow=oDBSQLhelper.SQLQuery(lcSQLCmd,"Employees")
if nRow<0
 ?oDBSQLhelper.errmsg
endif
BROWSE

2 利用Text to 拼接参数,支持多变量

myvar = "张三"
TEXT TO lcSQLCmd NOSHOW ADDITIVE TEXTMERGE PRETEXT 1+2
select * from username where username="<<myvar>>"
ENDTEXT
oDBSQLhelper=NEWOBJECT("MSSQLHelper","MSSQLHelper.prg")
nRow=oDBSQLhelper.SQLQuery(lcSQLCmd,"Employees")
if nRow<0
 ?oDBSQLhelper.errmsg
endif
BROWSE

3 利用StringFormat拼接参数,支持多变量

lcwhere=StringFormat("name='{2}' And 单位名称='{1}'","北京","张三")
lcSQLCmd="select * from username where "+lcwhere
oDBSQLhelper=NEWOBJECT("MSSQLHelper","MSSQLHelper.prg")
nRow=oDBSQLhelper.SQLQuery(lcSQLCmd,"Employees")
if nRow<0
 ?oDBSQLhelper.errmsg
endif
BROWSE

04

传递自定义连接句柄复用句柄

1 多账套通过账套名选择创建连接

ocon=Newobject("qiyu_connection","qiyu超类","","jcbg")  &&第四个参数为账套名
ncon=ocon.createcon()  &&根据指定账套创建连接句柄
oDBSQLhelper=NEWOBJECT("MSSQLHelper","MSSQLHelper.prg","",nCon)
*--执行SQL
oDBSQLhelper.SQLQuery(lcSQLCmd,"Employees")

2 自行创建的句柄

nCon=您自己创建的数据库连接句柄
oDBSQLhelper=NEWOBJECT("MSSQLHelper","MSSQLHelper.prg","",nCon)
*--执行SQL
oDBSQLhelper.SQLQuery(lcSQLCmd,"Employees")

本文分享自微信公众号 - 加菲猫的VFP(VFPPLUS),作者:加菲猫的VFP

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2021-09-07

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 隐秘历史:那场国产金融技术的“核武器试爆”

    浅友们大家好~我是史中,我的日常生活是开撩五湖四海的科技大牛,我会尝试各种姿势,把他们的无边脑洞和温情故事讲给你听。如果你特别想听到谁的故事,不妨加微信(微信号...

    浅黑科技
  • 借助TensorFlow.js,手把手教你把会动的蒙娜丽莎带回家!

    据说,当你在卢浮宫博物馆踱步游览的时候,你会感到油画中的蒙娜丽莎视线随你而动。这就是《蒙娜丽莎》这幅画的神奇之处。出于好玩,TensorFlow软件工程师Emi...

    大数据文摘
  • 后端:Hutool Java 工具类库导出 Excel,超级简单!

    以前用过POI、easyexcel等工具的导入导出功能,但总感觉太麻烦了,代码特别多,感觉并不是很好用。

    IT技术分享社区
  • 腾讯与云南的故事

    ? ? 2018年国庆假期刚过,腾讯宣布进军产业互联网后的第8天。 马化腾赶至云南,体验筹备了一年的“一部手机游云南”项目,并感谢云南给腾讯产业互联网提供“靶...

    腾讯文旅
  • 腾讯云数据库昆明大放异彩,助你一部手机游天下!

    点击上方蓝字每天学习数据库 今天,要说风吹得最大的城市莫过于春城昆明了,腾讯全球数字生态大会在彩云之南华丽开幕。 俗话说把猪放在风口上,猪也能上天。时下,数字...

    腾讯云数据库 TencentDB
  • 阮成发:云南义无反顾开展“旅游革命” 推动旅游业涅槃重生

    ? 阮成发回答中外记者提问时表示——云南义无反顾开展“旅游革命” 推动旅游业涅槃重生。 ? ? ? 3月7日上午,省长阮成发在云南省代表团媒体开放日回答中外记...

    腾讯文旅
  • 新文创新文旅 云南与腾讯发布首个省级文旅IP形象“云南云”

    ? 9月29日下午,云南与腾讯在昆明长水国际机场发布全国首个省级文旅IP形象“云南云”,率先开展省一级文旅形象的IP化建设及推广探索。 “云南云”作为云南省文...

    腾讯文旅
  • "我们做的微博数据挖掘"

    作者:数控小V http://www.36dsj.com/archives/48650 新浪微博在2012年-2013年红得发紫,也是移动互联网快速成长的年...

    机器学习AI算法工程
  • 人民日报:云南力推旅游产业转型升级

    ? 前几年,“不合理低价游”带来的种种乱象,将云南旅游一次次推到舆论的风口浪尖。寄生于“低价游、高价购”模式上的既得利益者,织成一张盘根错节、纵横交织的“网”...

    腾讯文旅
  • 深度学习中训练参数的调节技巧

    1、学习率 步长的选择:你走的距离长短,越短当然不会错过,但是耗时间。步长的选择比较麻烦。步长越小,越容易得到局部最优化(到了比较大的山谷,就出不去了),而大了...

    机器学习AI算法工程
  • 太阳底下无隐私:那些年我们做的微博数据挖掘

    新浪微博在2012年-2013年红得发紫,也是移动互联网快速成长的年代。主页君当时就读于北京邮电大学,在实验室老师的指导下,从4G研发转战数据挖掘。从此我们项目...

    华章科技
  • 数读双11,你们就这样花光了2135亿

    双11的第十年在你们一年更比一年强的剁手力中,以2135亿元的成交额画上句号。在第十年这个重要节点,DT君将用数据告诉你,这场24小时不间断的购物狂欢,在全国上...

    CDA数据分析师
  • 版本控制入门插图教程

    但是,我平时只是业余写一些小程序,感觉特地装一个VCS太麻烦,所以一直没有用。最近,因为想认真做一个中等规模的项目,所以决心好好学一下怎么用。

    ruanyf
  • WIN2000的输入法入侵

    这是一种入侵简单,但造成用户损失后果最严重的一种入侵方法,严禁入侵国内主机!请慎用之!!!

    习惯说一说
  • 文旅融合案例 | 走完这条非遗线路 你也能成为老外眼里的李子柒

    ? 喜洲遛娃,灰爸的41个vlog 白沙古镇遛娃,灰爸的第42个vlog 这个月初,李子柒被央视爸爸安排上了。 ? 原因嘛,她刷屏刷到国外去了,刷进了歪果仁的...

    腾讯文旅
  • 深度:女版“乔布斯”覆灭记!硅谷美女CEO被曝百亿美元大骗局

    你有没有想过,如果在 2019 年,你可以心想事成,那你的人生巅峰最好可以混成什么样子?

    量子位
  • 马化腾亲自抓,腾讯为什么举全公司之力帮助云南打造文旅IP

    ? 作者/悠然 5月21日在昆明举办的云南国际智慧旅游大会上,云南省省长阮成发花了30多分钟对一部手机游云南项目里的“游云南”APP进行了介绍,并建议大家下...

    腾讯文旅
  • “游云南”数字博物馆上线,“黑科技” 让文物活起来

    ? 5月18日国际博物馆日  文末揭晓13项博物馆“黑科技”哟~  ↓ 随着《国家宝藏》的热播 以及故宫文化资源走进平常人家 高冷的博物馆“热”起来 大英博物...

    腾讯文旅
  • 旅游“加速度” 云南为何走在了文旅融合的前列?

    ? 今年,云南旅游又一次成为了国庆黄金周的爆款,从苍山洱海到玉龙雪山,从白天的丽江到夜晚的西双版纳,云南文旅经历了一次次的升级换代,迎来了一波又一波的游客,其...

    腾讯文旅

扫码关注云+社区

领取腾讯云代金券