vfp/(asp/vfpdll/Sql)
以下是发在梅子论坛的贴子,转发过来,希望给用得着的狐友参考。
我的程序以前一直是用花生壳绑定IP实现的远程,由于客户服务器和客户端都是通过宽带上网,一般的操作(开进货单、销售单等)速度也还不错,但是在远程客户端修改商品资料(10000多条记录)、查询一段时期的进销存流水(一周5000条以上)等涉及到取记录量大的操作时非常慢。
前段时间参考ZXS4785版主及其它狐友的代码后,对服务器环境及程序进行vfp/(asp/vfpdll/Sql)模式改造。由于加入myfll.fll进行数据压缩,远程操作速度较以前大为改善。趁这两天有时间,特将实现方法及相关代码介绍如下,为初接触者提供参考,老手自可一笑而过咯,呵呵。在此,谢过ZXS4785与木瓜先!
一.服务器设置
1.花生壳:绑定IP之用,如果服务有固定IP除外。
2.IIS:我用的是5.1,Win系统是XP SP2。安装后IIS后,建议设置TCP端口为80之外的其它端口譬如8080,因为有些地区的电信封80端口(这就是本机能访问网页,而远程不能访问的一大原因)。
3.设定默认网站的主目录,后面提到的sqlexec.asp及twcom.dll都要放在主目录中,以提供给客户端调用。
4.将myfll.fll复制到WINDOWS系统文件夹,这一点非常重要,否则执行asp将提示找不到API库错误。mfll.fll在这里的作用是调用cursortostr函数将查询得到的视图压缩成二进制字符串,这个也是必须的,大量记录不经压缩而传输到客户端,会等晕死的。
二.程序
1.SQLExec.asp:一个asp文件,它的作用是接收客户端的SQL指令,再传输到twcom.dll执行,得到结果后可由其response对象读取。以下是代码,可以在VFP环境用modi Comm SQLExec.asp的命令或用记事本编写。
<%
'取客户端IE表单上cSqlstring变量的值,即sql语句'
p1=Request.QueryString("cSqlstring")
'以下两句是将p1中的%、+转换为半角'
strsql =Replace(p1,"%","%")
strsql =Replace(strsql,"+","+")
'将sql语句传输到twcom中执行,并得到压缩后的二进制字符'
Set oVFP=Server.Createobject("twcom.w_select")
response.BinaryWrite(oVFP.W_exec(strsql))
Set oVFP=nothing
%>
2.twcom.Dll:用VFP9编写(7、8应该也可以),建一project,主文件twcom.prg,代码很简单,连编成dll即可。twcom.prg代码如下
*****************************************
Define Class W_SELECT As Session OlePublic &&定义类
Function W_exec(cSql As String) As Byte &&
相关文档:
通常情况下,SQL Server里面的生成SQL脚本,只会包含数据库及表的字段结构,而不会包含表的数据,也就是SQL脚本里面只有Create database,Create table 这样的语句,没有insert into。
因为SQL Server并不包含这个功能,只能靠第三方的代码了。
以下存储过程可以实现:
CREATE PROCEDURE dbo.UspOutputData
@tablenam ......
先开启服务器配置选项:
EXEC sp_configure 'show advanced options', 1
RECONFIGURE
EXEC sp_configure 'xp_cmdshell', 1
RECONFIGURE
/** 导出文本文件
EXEC master..xp_cmdshell 'bcp dbname..tablename out c:\DT.txt -c -S servername -U sa -P password'
或
EXEC master..xp_cmdshell ' ......
for i=0,i++,i<@num
select dateadd(DAY,GETDATE(),I)
请问上面的语句怎么改写才正确???
Transact-SQL 参考
WHILE
设置重复执行 SQL 语句或语句块的条件。只要指定的条件为真,就重复执行语句。可以使用 BREAK 和 CONTINUE 关键字在循环内部控制 WHILE 循环中语句的执行。
语法
WHILE Boolean_expression
{ s ......