样的。
比如ALLTRIM()是VFP的, SQL SERVER里是LTRIM()和RTRIM()
VFP日期以{}分界,但SQL SERVER里不认,必须用单引号.
如果SQL命令里用到VFP程序里的变量,变量前必须加问号“?”
比如,更新一个表的字段
lcLName="Zhang"
lcFName="San"
lnReturn=SQLEXEC(连接句柄,“Update Emp Set cLName=?lcName, cFName=?lcFName Where cEmpNo='733000'")
如果返回值lnReturn>0,就更新成功了
插入记录,或者逐条修改记录时,只能每次操作一条记录。
比如要把临时表TmpEmp里的记录加到SQL SERVER的EMP表里,就得用循环
Select TmpEmp
Scan
lnReturn=SQLEXEC(连接句柄,"Insert Into Emp (cEmpNo,cLName,cFName) values (?TmpEmp.cEmpNo,?cTmpEmp.cLName,?cTmpEmp.cFName)"
EndScan
*** 要得到SQL SERVER上某个表的结构,有两种办法,
一是运行SQL SERVER自带的系统存储过程。
一是运行一个SELECT命令。
比如要从SQL SERVER得到EMP表的结构
lnReturn=SQLEXEC(连接句柄,"Select Top 0 * From Emp","TmpEmp")
返回的结果都是临时表,是只读的,要想变成可读写的,需要做点小变化:
Select 0
Use DBF("TmpEmp") Again Alias Emp
Use In TmpEmp
现在得到的EMP临时表就是可读写的了。
*注 "Select Top 0 From Emp" 命令在VFP里是错误命令,但SQL SERVER里可以执行.
SPT和使用视图相比,优点是每一步你都清楚自己在做什么,知道为什么命令会出错。缺点是你需要多写命令,多了解SQL SERVER的语法。
***************
从VFP控制SQL SERVER事务处理和加锁
**建立与SQL SERVER的连接
lnHandle=SQLConnect("ODBC数据源","用户名","密码")
If lnHandle>0
&;&; 设置成手工
事务处理模式,由代码来控制
= SQLSETPROP(lnSQL_Hand, 'Transactions', 2)
**下面的命令从EMPPAY里选取记录,并给该表加上独占锁(TABLELOCKX),一直到该事务结束(HOLDLOCK)
ln1=SQLEXEC(lnHandle, "SELECT * FROM Emppay WITH (TABLOCKX, HOLDLOCK)","Emppay")
**执行其它命令,比如更新数据
ln2=SQLEXEC(lnHandle,"Update PayTotal Set ......")
...
...
**如果所有命令都正确执行了,则
=SQLCOMMIT(lnHandle)
***如果要放弃整个事务处理,用
=SQLROLLBACK(lnHandle)
***关闭连接,事务自动结束,锁也解开
=SQLDISCONNECT(lnHandle)
Else
****连接失败
EndIf
*** SQLSETPROP()函数
这个VFP函数是用来设置当前连接的属性的。 比如上边的手工事务处理。
还有一个比较
常用的属性是DISPLOGIN,该属性控制是否显示SQL SERVER的登录表单
第3个参数: 1 - 显示登录表单,如果登录信息(用户名,密码)不完全 2 - 总显示登录表单 3 - 不显示登录表单
例如:
=SQLSETPROP(lnHandle, "DISPLOGIN",1)
当使用SPT技术时,为节约连接数减少服务器负担,需要经常连接和断开SQL SERVER,有时候你并不希望每次连接都让用户登录,当用户首次登录后,可以把名字和密码存起来,以后的连接可以自动登录了。
***************
SQL SERVER的索引
作为VFP程序员,我们深知索引对表的重要性,好的索引可以大大缩短程序读取数据的时间。
索引对于SQL SERVER数据表来说,同样是很重要的。你可以做个简单的测试。
1. 索引测试
从SQL SERVER程序组里或者ENTERPRISE MANAGER的TOOLS菜单上打开QUERY ANALYZER工具. 连接到你的SERVER后, 选择QUERY菜单上的CURRENT CONNECTION OPTIONS(当前连接选项),
把SHOW STATS TIME 和SHOW STATS I/O两个选项打勾,然后点OK. 这两个选项将会告诉你命令的运行时间和读写次数. 如果你的SQL命令里用到多个表,还可以选上QUERY菜单上的SHOW EXECUTION PLAN, 它会告诉你的命令在各各表上所花费的时间. 选一个没有索引的大小适当的表,然后执行一条SELECT命令,你会看到运行时间. 比如我用了表CHQ,有将近40万条记录, 执行下面的命