这个是我在2002年做的一个VFP程序中实现的方法, 现在看来功能和VFP8,9中的CursorAdapter非常相似, 因为属性设置有许多相同的地方,我甚至怀疑CA就是就是在这样的基础上再包装出来的类.

以下是程序:

与数据库的连接:

nConnectHandle = sqlstringconnect("DRIVER=SQL Server;SERVER=" + cDbServer + ;
  ";UID=" + cUserName + ;
  ";PWD=" + cPassword + ;
  ";DATABASE=" + cDatabaseName)
 if nConnectHandle > 0 && 与服务器连接成功

endif

表单的init中:

local cSQLcommand

this.lockscreen = .f.

cSQLcommand = "select department.bmdm, department.bmmc, company.dwmc, department.dwxtbh, department.xtbh " + ;
 "from department, company where department.dwxtbh = company.xtbh order by company.dwdm, department.bmdm"
do while sqlexec(nConnectHandle, cSQLcommand, 'department') = 0 && 远程操作
enddo
= cursorsetprop('SendUpdates', .t., 'department')
= cursorsetprop('Tables', 'dbo.department', 'department')
= cursorsetprop('UpdatableFieldList', 'bmdm, bmmc, dwxtbh', 'department')
= cursorsetprop('UpdateNameList', 'bmdm dbo.department.bmdm, bmmc dbo.department.bmmc, dwxtbh dbo.department.dwxtbh, xtbh dbo.department.xtbh', 'department')
= cursorsetprop('KeyFieldList', 'xtbh', 'department')
with this.grid1
 .columncount = -1
 .recordsource = 'department'
 .recordsourcetype = 1
 .columns(1).header1.caption = '部门代码'
 .columns(2).header1.caption = '部门名称'
 .columns(3).header1.caption = '单位名称'
 .columns(4).header1.caption = '单位系统编号'
 .columns(5).header1.caption = '系统编号'
 .SetAll("DynamicBackColor","IIF(MOD(RECNO('department'),2)=0,RGB(255,255,255),RGB(230,230,255))","Column") &&交替显示白色和蓝色的记录
endwith

this.lockscreen = .f.

添加click:

local lResult, cBmmc

insert into department(bmdm, bmmc, dwxtbh) values('', '', 0)
do form d_bmkp to lResult
select department
if lResult
 if tableupdate(.t., .f., 'department')
  cBmmc = department.bmmc
  wait '添加成功' window nowait
  thisform.opentable()
  select department
  locate all for bmmc = cBmmc
  thisform.grid1.refresh
 else
  = tablerevert(.t., 'department')
  wait '添加失败' window nowait
 endif
else
 = tablerevert(.t., 'department')
endif

编辑click:

local lResult, cBmmc

do form d_bmkp to lResult
select department
if lResult
 if tableupdate(.t., .f., 'department')
  cBmmc = department.bmmc
  wait '编辑成功' window nowait
  thisform.opentable()
  select department
  locate all for bmmc = cBmmc
  thisform.grid1.refresh
 else
  = tablerevert(.t., 'department')
  wait '编辑失败' window nowait
 endif
else
 = tablerevert(.t., 'department')
endif

删除click:

if messagebox('你确认要删除吗?', 4 + 32 + 256, '信息') = 6 && YES
 delete in department
 if tableupdate(.t., .f., 'department')
  thisform.grid1.refresh
  wait '删除成功' window nowait
 else
  = tablerevert(.t., 'department')
  wait '删除失败' window nowait
 endif
endif

在VFP6中模拟CursorAdapter的功能的更多相关文章

  1. 实现CheckBox的三种选中状态(全选、半选、不选)在GridView中模拟树形的功能

    度娘了很多帖子,只说三种状态要用图片替换来做,但没找到有用的例子,被逼自己写了一个 三方控件肯定是很多的,如jstree,可以直接用 由于公司的UDS限制,不能上传图片,只能文字说明了. 就是要在gr ...

  2. 编写函数模拟strcpy()函数功能

    strcpy(字符数组1,字符串2) strcpy( )用于将字符串2复制到字符数组1中 /* strcpy(字符数组1,字符串2) strcpy( )用于将字符串2复制到字符数组1中 模拟strcp ...

  3. 【转】MySQL中增加sequence管理功能(模拟创建sequence)

    1.oracel可以直接支持sequence,但是mysql不支持sequence,因此我们要通过模拟sequence的方法在mysql中创建sequence.模拟sequence的方法:项目场景:项 ...

  4. Windows 10 版本 1507 中的新 AppLocker 功能

    要查看 Windows 10 版本信息,使用[运行]> dxdiag  回车 下表包含 Windows 10 的初始版本(版本 1507)中包括的一些新的和更新的功能以及对版本 1511 的 W ...

  5. js模拟实现继承功能

    <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...

  6. 在SoapUI中模拟用户操作

    SoapUI作为一款接口测试工具,具有极大的灵活性和拓展性.它可以通过安装插件,拓展其功能.Selenium作为一款Web自动化测试插件可以很好的与SoapUI进行集成.如果要在SoapUI中模拟用户 ...

  7. C#7.2——编写安全高效的C#代码 c# 中模拟一个模式匹配及匹配值抽取 走进 LINQ 的世界 移除Excel工作表密码保护小工具含C#源代码 腾讯QQ会员中心g_tk32算法【C#版】

    C#7.2——编写安全高效的C#代码 2018-11-07 18:59 by 沉睡的木木夕, 123 阅读, 0 评论, 收藏, 编辑 原文地址:https://docs.microsoft.com/ ...

  8. C# 中一些类关系的判定方法 C#中关于增强类功能的几种方式 Asp.Net Core 轻松学-多线程之取消令牌

    1.  IsAssignableFrom实例方法 判断一个类或者接口是否继承自另一个指定的类或者接口. public interface IAnimal { } public interface ID ...

  9. ListView模拟微信好友功能

    ListView模拟微信好友功能 效果图: 分析: 1.创建listView 2.创建数据 3.创建适配器 将数据放到呈现数据的容器里面. 将这个容器(带数据)连接适配器. 其实是直接在我们自己写的a ...

随机推荐

  1. c语言之【#ifdef】

    电脑程序语句,我们可以用它区隔一些与特定头文件.程序库和其他文件版本有关的代码. 1 2 3 #ifdef 语句1     // 程序2 #endif 可翻译为:如果宏定义了语句1则程序2. 作用:我 ...

  2. JS正则表达式进阶

    贪婪量词   惰性量词    支配量词                      描述--------------------------------------------------------- ...

  3. 数据存储单位的换算关系(TB、PB、EB、ZB、YB)

  4. HTML5之API

    HTML5就是牛,可以直接播放音视频,还可以作图: 一.HTML5中播放视频和音频: 加载时直接播放音频的方式:new Audio("BY2.mp3").play(); <d ...

  5. mac下 tomcat8+jdk1.8+servlet+Spring环境搭建中的问题

    1,jdk1.8里面自带了servlet-api.jar tomcat里面也有这个,会导致冲突发生.出现这个问题会在控制台输出一大堆警告和错误,我一个一个去查(有的错误是表象不是核心)最后在stack ...

  6. 跳转到某个Activity

    跳转 Activity之间的跳转 可以依靠Intent 简单粗暴的办法是 Intent intent= new Intent(*.this, MainActivity.class); startAct ...

  7. Spinner

    资源的方式添加 安卓中的下拉框 Spinner可以通过xml string中配置 <string-array name="spingarr"> <item> ...

  8. 【bzoj1059】 ZJOI2007—矩阵游戏

    http://www.lydsy.com/JudgeOnline/problem.php?id=1059 (题目链接) 题意 一个01矩阵,可以任意交换两行或两列,问能否经过若干次交换后使主对角线全为 ...

  9. Java多线程干货系列—(一)Java多线程基础

    前言 多线程并发编程是Java编程中重要的一块内容,也是面试重点覆盖区域,所以学好多线程并发编程对我们来说极其重要,下面跟我一起开启本次的学习之旅吧. 正文 线程与进程 1 线程:进程中负责程序执行的 ...

  10. centos 7 安装 python-dev包提示No package python-dev available

    centos安装 python-dev包提示No package python-dev available: 出现此问题的原因是python-dev的包在centos的yum中不叫python-dev ...