当前位置: 代码迷 >> VFP >> 使用spt与表缓冲方式更新数据的效率有关问题
  详细解决方案

使用spt与表缓冲方式更新数据的效率有关问题

热度:7051   发布时间:2013-02-26 00:00:00.0
使用spt与表缓冲方式更新数据的效率问题
各位大侠,我最近正尝试用vfp 9 + sql 做一个系统,以前从来就是使用本了数据库,从来没有做过vfp + sql的系统,现在有个问题想请教大家:

比如我要插入或修改5000条记录,我现在的水平只知道两种方式:

一、用循环的方式更新或插入本地数据到sql
scan
  cSQL_CommandStr = "UPDATE …………" 或 cSQL_CommandStr = "INSERT INTO …………"
  SQLEXEC(nHandle,cSQL_CommandStr)
endscan

二、用游标更新sql
……
TableUpdate(.T.,.F.) && 提交修改到缓冲表
……

请问:这两种方式哪种效率更高一些?我发现用第一种方式插入5000条记录的话是比较耗时的,第二种方式我暂时没有成功。
或者还有没有更好的方法更批量更新或插入多条记录?请大家指教。

说明一下:并不是我懒,不想自己测试后比较,实在是我用第二种方式没有成功,无法比较。

------解决方案--------------------------------------------------------
vfp中连接远程数据库有几种方式:

spt、远程视图、CursorAdapter、Ado等,
每一种都可以独立完成这个工作。
当然也可以混用,不过混用增加系统复杂度,不推荐。


by:dkfdtf
更新远程数据可以使用方式现在有:远程视图,spt,ca 三种;
其中,
远程视图最简单,但也是功能最弱的;
ca 比较容易使用,功能也可以满足要求;
spt 最繁,但也是最灵活的。
最后,更新数据要用到的都是 tableupdate 这个函数。
------解决方案--------------------------------------------------------
在一台最差的服务器上做测试: AMD 1800+, 2G, SQL SERVER 2000
随便新建一个表,包含一个自增量 id 字段及 5 个 char(10) 字段
用 spt - insert into 插入 5000 条记录,用时 40.12 秒
用 ca - tableupdate 插入 5000 条记录,用时 45.36 秒

结论:没有太大差别,用时在同一个数量级上。ca 多出的时间可能消耗在冲突检查等方面,而测试中的 spt 方案没做这方面的检查
  相关解决方案