VFP+SQL编程方法讨论与经验分享

本文探讨了如何使用Visual FoxPro(VFP)进行SQL编程,包括VFP与SQL Server的连接方法、SQL连接字符串的构建、SQLDo()函数的使用以及数据的保存和更新操作。作者分享了通过VFP执行SQL查询、打开和关闭数据表、处理事务的方法,并讨论了VFP中的游标适配器(CursorAdapter)和远程视图技术。文章还包含了论坛成员关于优化大规模SQL数据库查询的讨论。
摘要由CSDN通过智能技术生成

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    

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值