VFP是一个简单实用的编程工具,但数据库一般用其本身的DBF数据库,对于SQL可能每个人都用不同的看法,各位高手有什么好的方法、经验、建议全都拿出来,供大家分享,谢谢!
以下是我平时对SQL的使用点滴,欢迎各位指点!
**************************************************************
*-- vfpsql
*-- parameters :tcDatabase,tcServer,tcUserId,tcPassword
*-- Sql Connect
**************************************************************
FUNCTION VFPSql()
PARAMETERS tcDatabase,tcServer,tcUserId,tcPassword
SET MULTILOCKS ON
LOCAL lcSqlConnectStr
PUBLIC gcSqlConnectstr
IF TYPE("gcSqlConnectstr")<>"C"
gcSqlConnectstr = ""
ENDIF
lcSqlConnectStr =''
IF TYPE("_gnSqlConnectHandle") = "N" AND _gnSqlConnectHandle > 0
disVFPSql()
ENDIF
PUBLIC _gnSqlConnectHandle
_gnSqlConnectHandle =0
IF PARAMETERS()>=3 AND VARTYPE(tcDatabase)='C' AND VARTYPE(tcServer)='C' AND VARTYPE(tcUserId)='C'
IF EMPTY(tcPassword)
tcPassword = ''
ENDIF
lcSqlConnectStr ="driver={Sql Server};Database=&tcDatabase;server=&tcServer;uid=&tcUserId;pwd=&tcPassword"
_gnSqlConnectHandle = SQLSTRINGCONNECT(lcSqlConnectStr)
ELSE
IF gcSqlConnectstr <> ""
lcSqlConnectStr = gcSqlConnectstr
_gnSqlConnectHandle = SQLSTRINGCONNECT(lcSqlConnectStr)
ENDIF
ENDIF
gcSqlConnectstr = lcSqlConnectStr
LOCAL iLoopCount
iLoopCount = 1
DO WHILE _gnSqlConnectHandle <= 0 AND iLoopCount <=3
DO prgDataConnect
iLoopCount = iLoopCount + 1
ENDDO
RETURN _gnSqlConnectHandle>0
*- VFPSQL END
************************************************
*-- disVFPSql()
*-- Sql Disconnect
************************************************
FUNCTION disVFPSql()
IF TYPE("_gnSqlConnectHandle")<>'N' OR _gnSqlConnectHandle<=0
Return
ENDIF
SQLDISCONNECT(_gnSqlConnectHandle)
RELEASE _gnSqlConnectHandle
RETURN
*- DisVFPSql END
***************************************
*-- SqlDo()
*-- PARAMETERS tcSqlString: 查询语句
*-- tcCurName : 结果集存放表
*- 功能: 执行查询
**************************************
FUNCTION SqlDo
LPARAMETERS tcSqlString,tcCurName
LOCAL lnReturn
*-- 检查连接
IF TYPE("_gnSqlConnectHandle")<>"N" or _gnSqlConnectHandle<=0
IF !vfpsql()
*-- 连接失败,返回 0
RETURN 0
ENDIF
ENDIF
IF TYPE('tcSqlString')<>'C' OR EMPTY(tcSqlString)
RETURN 0
ENDIF
IF EMPTY(tcCurName) OR TYPE("tcCurName") <>'C'
lnReturn = SQLEXEC(_gnSqlConnectHandle,tcSqlString)
ELSE
lnReturn = SQLEXEC(_gnSqlConnectHandle,tcSqlString,tcCurName)
ENDIF
RETURN lnReturn
*- SqlDo END
*-- Opendb
********************************************************
*-- OpenDB
*
*- 功能:打开table Or View
*
*-参数说明 tcCurName : 临时表名
*- tcSqlTblName: Sql数据表名(默认tcCurName)
* tcFldsList : 字段列表(默认为全部 *)
**********************************************************
FUNCTION OpenDB
LPARAMETERS tcCurName,tcSqlTblName,tcFldsList
IF VARTYPE(tcCurName)<>"C"
MESSAGEBOX("参数错误,不能打开数据表或视图!",48,"错误")
RETURN .F.
ENDIF
IF EMPTY(tcSqlTblName)
tcSqlTblName = tcCurName
ENDIF
IF EMPTY(tcFldsList)
tcFldsList = "*"
ENDIF
*-- 执行查询
lnReturn = Sqldo("select &tcFldsList From &tcSqlTblName ","&tcCurName.")
*-- 打开开放式表缓冲
IF lnReturn > 0
cursorsetprop("buffering",5, "&tcCurName.")
ENDIF
VFP+SQL编程方法讨论与经验分享
最新推荐文章于 2024-04-13 17:09:55 发布
本文探讨了如何使用Visual FoxPro(VFP)进行SQL编程,包括VFP与SQL Server的连接方法、SQL连接字符串的构建、SQLDo()函数的使用以及数据的保存和更新操作。作者分享了通过VFP执行SQL查询、打开和关闭数据表、处理事务的方法,并讨论了VFP中的游标适配器(CursorAdapter)和远程视图技术。文章还包含了论坛成员关于优化大规模SQL数据库查询的讨论。
摘要由CSDN通过智能技术生成