vfp如何用vfp40代码大全新建远程视图

共有 1406 人关注过本帖
标题:远程视图插入新数据后, 作为主键的标识列的值只能requery()才能得到刷新吗?
等 级:论坛游民
帖 子:69
专家分:61
结帖率:25%
&&已结贴√
&&问题点数:20&&回复次数:5&&&
远程视图插入新数据后, 作为主键的标识列的值只能requery()才能得到刷新吗?
在SQLSERVER中做了个测试表, 表中有一个自增量标识列ID设置为主键,
在VFP中做了个远程视图, 设置ID为主键, 更新条件中ID设置不更新
然后做了个表单, 数据环境添加了这个远程视图, 表单中用一个Grid操作这个视图
现在就象在操作本地表的感觉了,
增加一条新记录, ID值不处理, 随便弄几个数据进其它字段
再增加新记录, ID值仍然不处理, 只是保证其它字段不全为空
增加若干新记录, 会看到ID值本应当自增量, 结果全部保持为空.
现在转到SQL里面直接查看, ID值正常自动增量
回到VFP中requrey(), Grid刷新, 得到正常的ID值
现在进一步试验, 把所有的ID乱改值, 结果如猜想的一样, 没有任何不良影响(这个好理解, 更新条件已经设置为不更新了嘛)
但有一点搞不明白的是:
1.主键是ID, 现在本地视图主键看起来已经失效了, 系统是如何保证远程更新的主键对比的呢?
2.假设视图其实控制着另一个表, 主键与SQLSERVER同步, 没有理由让视图显示无效的ID值啊, 完全可以让ID同步体现SQLSERVER里的值啊,
&&这样某种情况下如果主键能用上的话, 就不必requery()了, 能节约网络和服务器开销
3.以上情况是不是说明, 当在视图设计时, 把主键设置为不更新后, 随后对视图的所有操作都可以忽略主键(不需要做任何维护)呢?
搜索更多相关主题的帖子:
等 级:贵宾
威 望:304
帖 子:25793
专家分:48814
&&得分:20&
远程视图既不是离线视图,也不是完全连线视图,是处于离散连接状态下的视图,需要程序员自己保障数据同步。你创建的远程视图,是从远程数据源中提取数据建立临时表得到的,这个表在本地,归VFP自己管理,而你已经设定id不更新,它按照你的指示是不做了,但你在追加记录的时候,这种操作因为不是完全离线,所以会反馈到远程数据源中,在那边会加记录,但在那边加记录的动作是归SQL Server管理的,在那里数据库设定了id要自动增加,它就会自动增加。这样,数据不一致是必然的。由于远程视图不会对任何动作都自动同步数据,正如你所说,这正是因为节省连接资源,所以,只能是你自己在适当时机指示同步,时机归你掌握。每一次自动更新,其实等于自动执行requery(),不会比你手动执行更省网络开销的。
其实,要最节省网络开销,最好就是使用离线视图。但离线视图下,不要在代码中使用新增记录的自动步进主键的具体值,因为这批新记录在实际进入远程数据源的时候,是会改变的(你并不知道在本地操作的时间内别的用户可能已经使用了那些id值),只有连线刷新后重新取回来的主键,才是真实可用的。
不过,说老实话,我对自动步进的主键并不看好,很少使用的,但很多人用,这个见仁见智吧。
[ 本帖最后由 TonyDeng 于
13:20 编辑 ]
授人以渔,不授人以鱼。
等 级:论坛游民
帖 子:69
专家分:61
你讲的我觉得很有道理, 感觉你对SQL研究也很深入, 而我快有十年没动手编程了, 这一次因为一个特殊的现场管理系统, 我的应用需求讲给程序员太费事才自己操刀.
我主要想确认我构建的系统, 不会因为我对远程视图的错误理解而在今后布置应用时才发现有根本性的错误.
其中最需要了解的是:
1. 如果把远程视图当作本地表一样来操作, 把所有的后台更新全部交给系统, 这种作法可不可靠呢?
&&& 这个问题是我在反复测试视图更新服务器的机制时所一直顾虑的, 因为当我brow远程视图时后乱改表中数据测试时, 有时会有更新冲突的提示, 而我一直找不到什么规律
2. 如果对远程视图的操作有某种规则限制, 那么什么地方可以有文档参考?我这几天差不多把联机帮助通读了一回, 尤其是关于SPT和视图的部分,但是没有找到非常明确的说明.
&&& 或者这个规则其实很简单的话, Tony版主能指导一下
3. 虽然不是本贴的主题, 但是顺便回一下关于自动步进的主键的问题, 这个主要是想尽可能减少编程时要考虑的因素, 如果因为这个造成不确定因素, 确实反而不如另用一种主键生成机制. 我一想到30台机在同一秒向表中添加数据(这是我现在做的系统的一个基本要求), 如何确保主键维一就头大 :), 如果交给系统可靠的话, 还是交给它吧.
等 级:贵宾
威 望:304
帖 子:25793
专家分:48814
视图(cursor),本质上是一份源表的副本(也是表),是从SELECT指令临时生成的,因为SELECT结果可能包含数据源中没有的字段、或是几个表拼揍而成,是临时创造表结构的产物,与数据源是两个实体,故此必然存在同步问题。当数据源只供应一份远程视图的时候,基本上等于一个程序操控两份数据,要同步还不算困难,此时一般不会有冲突。但问题是数据源向多用户提供视图的时候,是各个不同的程序分别操控自己的两份数据,这样冲突的机会就多了。冲突发生在同时对同一处数据进行写操作的时候,当有30台机在1秒内向服务器数据库添加数据的时候,数据库的反应速度和网络的传输速度是主要的制约因素,1秒内通常处理不来如此大量的数据,冲突就很常见了。对这种情况,可以考虑减少每次传输的数据量,只传送确实有更新的数据,而不是把没有更新的数据也打包跑在网路上,这当然又增加了编程的判断代码。
处理共享冲突的手段,无非是排队,或者异步操作。这又跟你系统的需求有关,对实时性要求强的系统,恐怕不能接受,那样只能考虑多服务器分摊了。总之,没有简单有效的处理办法,只能根据实际情况自己衡量取舍了。
授人以渔,不授人以鱼。
等 级:论坛游民
帖 子:69
专家分:61
Tony, 我实在是想不出来有什么办法可以有效地控制视图的动作, 所以你说的下面这一段:对这种情况,可以考虑减少每次传输的数据量,只传送确实有更新的数据,而不是把没有更新的数据也打包跑在网路上,这当然又增加了编程的判断代码。当使用远程视图时, 我最伤脑筋的就是这一点, 我不确定视图到底有没有能力作到比较优化.
但视图确实就编程来说非常方便, 我很想采用它.
从联机帮助来看, 或者从视图设计器的更新条件来看, 视图在底层应当是会作一个数据是否有变更的比较动作,
就是只更新被设置为可更新和确实有数据改变的记录和字段.
而 &是否更新& 的判断机制, 我不是很确定, 猜想除了视图本身这个cursor之外,
本机上应当还有一份源表的映射cursor,
这样的话,其实有三个层次
第一层是远程视图的显表, 我们可以看到它的数据, 对它进行修改, 增加或者删除记录,
第二层是远程视图的隐表, 它的内容最初应当是视图抓取服务器的数据,
&&& 然后如果有本地更新到服务器, 它会自动requery()一下, 这样就可以不至于丢失主键
第三层是服务器上的源表.
为了描述方便, 我把第一层称为表1, 第二层称为表2, 第三层称为表3
则这三层表之间的关系其实是比较复杂的,
尤其是表3和表2也有可能不同步, 因为网络环境下其它用户也有可能修改到表3数据而表2不可能也不应当即时同步它.
如果我的猜想成立, 则我现在测试远程视图时所遇到的各种现象就解释得通了,
但是我的系统架构就不可靠了,
我就得用SPT写比远程视图多出几十倍的代码来实现应用功能了.
全部用SPT手动维护数据环境的话, 想想就令人头皮发麻啊...
我另发一贴专门跟大家讨论吧
等 级:贵宾
威 望:304
帖 子:25793
专家分:48814
具体情况具体分析,如何设计,视项目实际情况而定。
授人以渔,不授人以鱼。
版权所有,并保留所有权利。
Powered by , Processed in 0.026457 second(s), 8 queries.
Copyright&, BCCN.NET, All Rights ReservedVFP访问外部数据源的几种方法
Visual FoxPro(以下简称VFP)是微软公司Visual系列开发工具中的一种。在VFP 6.0中,与外部数据源进行数据交换的方式有导入导出数据、远程视图、SQL Pass
Through以及数据升迁等几种方式。其中,导入导出数据是完成对静态数据(或文本)的数据转换,而对动态数据源的访问则主要是使用Windows中的ODBC技术。本文介绍在设计客户/ 服务器体系结构的应用程序时,如何使用VFP来实现与外部数据源的数据交换。
导入导出数据
导入导出数据是指利用VFP的内部转换机制由一个静态文件生成一个指定的新文件的过程。可以被转换的文件类型主要有:Excel文件、Paradox数据库文件、Lotus电子表格中的数据以及其他形式的文本文件。
导入数据是指将一个外部文本转换成一个新的DBF文件。例如:将A盘上的一个abc.xls文件转换成Example数据库下的CBA.DBF表,可用如下命令完成:
import from a:\abc.xls Database Example Name cba Type xls
导出数据是指将一个打开的VFP数据表(DBF)文件转换成一个其他形式的外部文件,同时还可以使用范围或条件子句对被复制的数据进行过滤。例如:
copy to abc for fieldl=“aaaaa”,type xls
上述代码将CBA.DBF文件中满足条件“fieldl=,“aaaaa””的记录转换为Excel文件abc.xls。
远程视图以视图的方式通过ODBC与外部数据源建立连接,从而达到访问或更新外部数据源的目的。它是客户/服务器体系结构中经常运用的一种访问外部数据源的方法。在VFP中建立远程视图的方式主要有两种:采用VFP中的视图向导和程序方式。在使用程序方式时,一般需要两个步骤:
● 通过ODBC与外部数据源建立一个命名连接;
● 定义视图。
建立一个远程视图后,用户就可以像调用一个自由表一样来使用它。在使用远程视图的过程中,应当注意以下几个问题:
远程视图只能对后台数据库进行查询、插入、更新和删除等操作,不能进行数据定义。它的事务处理只限于对本地数据库的操作,而无权管理后台数据库。
● 尽量不要使用远程视图对后台数据库进行多表插入的操作,以免产生非法NULL值或引起数据不一致。
● 尽量使用SQL语句完成对后台数据库的操作,以免在执行时产生二义性。
例如,我们要访问一个远程SQL
Server上的my-db库中的my-tab表,可由如下的语句来完成(假定sql为已在ODBC中建立的与SQL
Server 服务器的my-db数据库相连的数据源):
create connection example datasource sql userid usr-1 password
create sql view my-r-view remote connection example as select *
from my -tab
use my-r-view
SQL Pass Through技术
SQL Pass Through(以下简称SPT)技术能使用户直接访问ODBC函数,并把SQL语句发送给服务器执行。与远程视图相比,它能够更直接地控制后台服务器上的数据库:
● 可以使用服务器的特有功能,如存储过程和基于服务器的内部函数等;
● 可使用服务器所支持的SQL扩展功能,而且可进行数据定义、服务器管理和安全性管理等;
● 对后台数据库的更新、删除和插入等操作拥有更多控制权,对远程事务也拥有更多控制权。
该方法的缺点在于不能使用图形化的设计器,而且必须在命令窗口或程序中直接输入SQL命令。
在SPT中经常使用的函数主要有:连接管理函数(如SQLCONNECT、SQLSTRINGCONNECT、SQLDISCONNECT等)、SQL语句的执行和控制函数(如SQLEXEC、SQLMORERESULTS、SQLCOMMIT、SQLROLLBACK等)。下面给出一个应用实例来说明这些函数的使用及其参数的设定:
Store sqlstringconnect(“dsn= uid=usr-1; pwd=sqlpass”)to
gnconnhandlc
Messagebox(“建立连接失败”,16,“SQL Connect
Sqlexec(gnconnhandlc,“select*from my-tab”)
Sqlcancle(gnconnhandlc)
Sqldisconnct(gnconnhandlc)
数据库升迁
利用VFP的数据库升迁向导,可以实现将本地数据库转换为远程数据库的功能。借助这一功能,我们可以很方便地将使用VFP建立的数据库、表和视图等从本地系统迁移到另一个远程服务器上。虽然在VFP中,该方法只限于对SQL Server和Oracle Server的访问,但通过使用SQL Pass Through函数在服务器上创建远程表,然后再用VFP建立远程视图访问这些服务器上的表,我们就可以为任何远程ODBC数据源建立客户/服务器模式的应用程序。
有了这一功能,可以极大地方便客户/服务器应用程序的开发工作。用户可先在单机上开发应用程序,待基本功能模块设计调试成功后,再运用数据库升迁的方法将本地数据库、表转换到远程服务器上,并把本地视图升迁为远程视图,继而将开发调试工作的重点转移到客户机与服务器间的数据通信以及数据库服务器的管理等方面。
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。编程入门网-vfp如何使用spt
您的位置:
vfp如何使用spt
spt的全称为sql pass through,它是和远程视图构成了vfp处理远程数据的利器。和远程视图比较,它的主要好处在于灵活,可以直接连接远程数据库,并在服务器上执行代码代码, 当然它也可以和远程视图一样,通过一个光标cursor来更新远程数据,缺点主要是非图形化,代码量大。实际上远程视图是SPT的一个子集。
1、建立连接,或者连接句柄
如连接服务器为aa,用户名为bb,密码为cc,数据库为dd
nhandle=sqlstringconnect(&driver=server=uid=pwd=database=dd&)
if nhandle&0
messagebox(&数据库连接成功!&,0,&提示&)
messagebox(&数据库连接成功!&,0,&提示&)
2、如何向服务器取数据
如向服务器表employees查询性别为男的人员
在第一步建立和服务器数据库的连接,并取得连接句柄nhandle后
sqlexec(nhandle,&select * from employees where sex='男'&,&employees&)
select employees
也可以调用系统上的存储过程来取得数据.
如在服务器建立存储过程
create proc getmanofworkes
select * from employees where sex='男'
然后在vfp里调用
sqlexec(nhandle,&exec getmanofworkes&,employees)
select employees
当然也可以想存储过程传递参数查询
仍然以刚才的例子,查询不同性别的员工
在服务器上建立create proc getemployees
@sex char(2)='男'
select * from employees where sex=@sex
查询男员工
sqlexec(nhandle,&exec getemployees ?sex&,'employees')
select employees
查询女员工
sqlexec(nhandle,&exec getemployees ?sex&,'employees')
select employees
设置本地表可更新服务器表
sqlexec(jb,&select id,bh,hyzhm,fzdw,rghsj,ghzrsj,xm,xb,gs_bm from rsda where lcbj=0 order by gbbh&,&gh&)
***设置gh可更新rsda表
cursorsetprop(&tables&,&rsda&,&gh&) &&设置临时表的更新目标表
cursorsetprop(&keyfieldlist&,'id',&gh&) &&设置临时表的关键字
cursorsetprop(&updatablefieldlist&,&id,fzdw,rghsj,ghzrsj,hyzhm&,&gh&)&&设置临时表的更新字段
cursorsetprop(&updatenamelist&,&id rsda.id,hyzhm rsda.hyzhm,rghsj rsda.rghsj,ghzrsj rsda.ghzrsj,fzdw rsda.fzdw&,&gh&) &&&用gh中的相应字段更新rsda表
cursorsetprop(&sendupdates&,.t.,&gh&)&&设置为可更新
cursorsetprop(&wheretype&,2)
cursorsetprop(&buffering&,5)&&设置表缓冲
顺便提一下,表缓冲必须有明确的tableupdate命令才能更新。
上面的功能都是通过本地的cursor来处理远程数据。spt还可以直接处理远程数据。
如将远程服务器上的表rsda中,性别为男的,都改成女的。
sqlexec(nhandle,&update rsda set xb='女' where xb='男'&)&&由于这句是更新命令,不需要返回一个记录集,所以,第三个参数,光标名可以省略不写。
由此也就可以举一反三的明白,如何调用远程存储过程来更新数据了。
如将上面的更新语句写成存储过程
在服务器上
create proc updatesex
update rsda set xb='女' where xb='男'
sqlexec(jb,&exec updatesex&)&&调用存储过程,不需要返回光标,取消第三个参数
如何开始一个远程事务
事务它包含一个可回滚的操作段。在sql server上在事务中的数据,并没有实际的写入数据库,而是将更新临时存储在缓冲中,只有明确的发出了commit或者rollback tran才结束这个事务,将操作取消或者将操作实际写入。
每个事务以begin tran开始,以commit tran或者rollback tran结束。倘若在遗漏了commit tran或者rollback tran,在sql server就很容易的表现为等待状态,即死锁状态,在等待该事务的释放。
开始一个事务:
sqlexec(nhandle,&begin tran&)&&开始一个事务,事实上sqlexec()中的第二个参数中的操作都是被发送到sql server执行的。这样也就可以理解存储过程的一个优点,因为存储过程只要发送一个调用语句给服务器,而如果将这些语句全部写在VFP端,则带来的网络传送量必然很多,客户端越多,造成网络阻塞的可能就越大。回到事务上来。
sqlexec(nhandle,&insert into tablename value s()&)
sqlexec(nhandle,&if @@error&&0&)
sqlexec(nhandle,&begin&)
sqlexec(nhandle,&rollback tran&)
sqlexec(nhandle,&return&)
sqlexec(nhandle,&end&)
sqlexec(nhandle,&delete from tablename where &)
sqlexec(nhandle,&if @@error&&0&)
sqlexec(nhandle,&rollback tran&)
sqlexec(nhandle,&else&)
sqlexec(nhandle,&commit tran&)
当然在vfp8中可以写成text endtext的形式更加直观
不过我个人感觉,有事务处理的处理还是最好写成过程。例在服务器上建立过程
create proc procname
begin tran
insert into tablename value s()
if @@error&&0
rollback tran
delete from tablename where
if @@error&&0
rollback tran
commit tran
在vfp端sqlexec(nhandle,&exec procname&)
Copyright&
Powered by 编程入门网 All Rights Reserved. |共有637位成员   人气指数 -   最新排名 -
【话题】将VFP数据库表升迁为SQL Server数据库表后,以SQL远程视图为数据源,运行VFP表单时遇到的问题如何解决?
16:10:34 来自:风雪一剪梅 浏览数:172次
& & 我用VFP8.0为商店设计了商品进销存运行软件,但在实际操作中,经常会出现由于突然停电或死机等原因而造成表损坏,有的表损坏后很难修复,因此决定将原VFP数据库表升迁为SQL Server数据库表,再以SQL Server数据库表为数据源在VFP中建立远程视图,再运行VFP表单。但在运行VFP表单时遇到了以下问题:
& & 1、dbf表升迁为SQL表后,原日期型字段被转变为日期时间型(datetime),如何在SQL表中仍然设置为日期型?
& & 2、在VFP8.0中可以为所运行的dbf表设置数据工作期(vue文件),但却不能为以SQL数据库表为数据源的远程视图设计数据工作期(vue文件),是否可以在VFP8.0中设置以SQL远程视图为数据源的数据工作期?
& & 3、在以SQL远程视图为数据源运行VFP表单时,可以阅读数据,也可以对远程视图表中的原有数据进行修改、删除行操作,但对远程视图表增添空白行记录或删除所增添的空白行记录时却不能操作,出现了出错提示:“更新冲突”或“不能从视图中插入一个空行到其基表”。(说明:已在SQL表中将所有字段设置为允许null值,并增设了一个递增值为1的“序号”标识列,并在远程视图的“更新条件”中将该列设置为关键字段。)如何在以SQL远程视图为数据源运行VFP表单时正确进行增添行、删除行操作?
& & 敬请电脑专家帮助解决以上问题,不胜感激!
大豆妈回复于12日16点28分 
不是有信心,是用的少,SQL Server 目前没有碰到,ORACEL&SYBASE&MYSQL 不才,不常用,所以更没机会碰到。
还是那句,用 SQL Server 会大大改善坏表问题,不是100%解决,谁的数据库也不敢说100%解决
liubei回复于12日16点48分 
1、dbf表升迁为SQL表后,原日期型字段被转变为日期时间型(datetime),如何在SQL表中仍然设置为日期型?
根据习惯,一般用日期型好一些,也有人喜欢用字符型
& & 2、在VFP8.0中可以为所运行的dbf表设置数据工作期(vue文件),
但却不能为以SQL数据库表为数据源的远程视图设计数据工作期(vue文件),是否可以在VFP8.0中设置以SQL远程视图为数据源的数据工作期?
为什么要这样设计?直接用远程视图不行?
& & 3、在以SQL远程视图为数据源运行VFP表单时,可以阅读数据,也可以对远程视图表中的原有数据进行修改、删除行操作,但对远程视图表增添空白行记录或删除所增添的空白行记录时却不能操作,出现了出错提示:“更新冲突”或“不能从视图中插入一个空行到其基表”。(说明:已在SQL表中将所有字段设置为允许null值,并增设了一个递增值为1的“序号”标识列,并在远程视图的“更新条件”中将该列设置为关键字段。)如何在以SQL远程视图为数据源运行 VFP表单时正确进行增添行、删除行操作?
SQLSERVER表要有主键,即将自增字段设为主键
最早在回复于12日17点03分 
更新到后台后,由SQLSERVER处理,生成自增、默认值、检验字段的
有效性、主键、外键等等,如没有问题,则生成数据,否则提示
原来的飞翔之鼠回复于12日17点20分 
apple_8180十豆三专家:
十分感谢您的热心指导!
我还有一个问题,在以SQL表为数据源的视图显示的表单表格中,应如何设置,可以使SQL表中日期时间型字段在表单表格中只显示日期而不显示时间?
XFGCHN回复于12日17点33分 
CONVERT ( char(10), ytd_sale, 120)
bjyy2008回复于12日17点50分 
测试了一下,确实是这样,感觉是VFP将数据从SQLSERVER中取出,
当作CURSOR操作,因为不是本地的物理表,有一些属性不支持,
如默认值、自增等等,待存入SQLSERVER表后,SQLSERVER表
自动生成默认值、自增等等,这里VFP再取出数据就OK了。
慕容潇柔回复于12日18点06分 
1、改为字符型或取出临时表后再Ttod(日期时间型字段)。
http://topic.csdn.net/u//357912ac-3a16-42f9-8fd0-030c2a148ec0.html?seed=
love博博回复于12日18点18分 
1、用 SQL Server 肯定要比用 DBF 安全的多,你说的坏表现象也会大大改善(不是100%解决,但我目前没有发现 SQL Server 因为掉电、异常退出等坏掉,但 DBF 是碰到过)
呵呵,看来apple_8180对SQLSERVER有信心啊,从稳定上看,
ORACEL&SYBASE&MYSQL&SQLSERVER,SQLSERVER表在掉电情况下,发生
坏表、掉记录的现象是有的,从理论上讲,没有哪种数据库能够在掉电情况避免
坏表、掉记录,所以服务器+UPS是首选。
dantong回复于12日18点38分 
因为你用了自增字段,所以增加后(APPE BLAN),必须Requery()
才能得到新的自增字段值以及有默认值的字段的值。
删除、编辑:不知道字段是否有有效性设置,如果没有且没有涉及到主键,可以执行Requery()命令一次性刷新视图,如果有,只有删除、编辑一条记录都必须立即用Requery()。
wyq715回复于12日18点52分 
在VFP8.0远程视图上,当增添一行空白记录时,有关字段不能显示默认值而只显示空值:
应该是VFP将数据在本地操作,而不是对SQLSERVER表进行操作,只有更新后,将数据才存入SQLSERVER表中。
will9718回复于12日19点06分 
在VFP8.0远程视图上,当增添一行空白记录时,有关字段不能显示默认值而只显示空值:
在GRID中还是程序中?
guohui1104回复于12日19点22分 
apple_8180十豆三专家:
十分感谢您的指导!
引用您的话:“一般这样,更新(增加、修改、删除)前不执行 Requery() ,如果更新失败后或更新成功再 Requery() 来刷新本地视图”
而我遇到的问题是:对远程视图表增添1条以上的记录时或删除所增添的记录时,会立即出现出错提示:“更新冲突”或“不能从视图中插入一个空行到其基表”,而一旦出现“更新冲突”出错提示后,就不能再执行Requery() 命令,因此必须要先用Requery()命令刷新视图后再执行增加、删除命令,如果每增加一行记录或删除一条记录都要执行一次Requery()命令,这会不会影响运行速度? 有没有更好的方法?敬请您指导。
庞淇尹回复于12日19点37分 
你在VFP添加一行,更新后,SQL端自动生成标识,然后你再重新取回数据(或叫刷新视图 Requery(&视图名&))才能看到。
王心怡回复于12日19点54分 
测试了一下:
在VFP中APPE BLAN-&存入SQLSERVER-&VFP Requery()-&取出记录,
如果是自增,可以用SELECT @@IDENTITY取得最新插入的ID,对
字段修改-&再存入SQLSERVER
crossea回复于12日20点07分 
apple_8180十豆三专家:
十分感谢您的指导!
用表缓冲CursorSetProp(&Buffering&,5,&视图名&)设置后,对远程视图表增添多条记录时或删除所增添的记录时,不会出现出错提示,但关闭视图前如果不执行Requery()命令刷新视图,则关闭后再次打开该视图后发现所增添的记录没有被保存;但如果在关闭视图前执行Requery()命令时,又发现出错提示:“表缓冲区含有不能予以实现的修改”,因而不能执行Requery()命令刷新视图。敬请指导如何解决这一问题?
liuyi8663回复于12日20点22分 
apple_8180十豆三专家:
在商品销售表单中:
1、在表单LOAD事件代码编写:
USE 商品进销存SQL数据库!表商品销售 IN 0
CursorSetProp(&Buffering&,5,&表商品销售&)
2、在表单中的“增添销售记录”命令框的CLICK事件代码编写:
select表商品销售
APPEND BLANK
REPLACE 编号 with bh+1
3、在表单中的“删除销售记录”命令框的CLICK事件代码编写:
select 表商品销售
SET FILTER TO !DELETED()
4、在表单中的“确认记录”命令框的CLICK事件代码编写:
Requery(&表商品销售&)
5、在表单中的“关闭”命令框的CLICK事件中代码编写:
select 表商品销售
在实际运行表单时,产生以下问题:
1、在对表单表格中通过增添、删除、编辑记录后,再按确认记录按钮(执行Requery()命令)时,出现:“表缓冲区含有不能予以实现的修改”出错提示不能执行命令。
2、如不按确认记录按钮,直接按“关闭”按钮关闭表单后,再次打开表单时,发现所输入的数据没有被保存,已全部丢失。
敬请指导如何解决?
kennynihao回复于12日20点35分 
在21楼给出的例子中 有相关视图设置代码,例如这样:
ThisView=&你的视图名&
DBSetProp(ThisView+&.日期型字段&,&Field&,&DataType&,&D&)
DBSetProp(ThisView+&.日期型字段&,&Field&,&UpdateName&,&dbo.SQL表.日期时间型字段&)
DBSetProp(ThisView+&.日期型字段&,&Field&,&KeyField&,.F.)
DBSetProp(ThisView+&.日期型字段&,&Field&,&Updatable&,.T.)
在SQL Server中我一直都用字符型来存储日期,不用 Datetime 或 SmallDatetime
咩咩~~~回复于12日20点49分 
你到底是用的SQL Server数据库,还是VFP的DBC+DBF?
zxczxczxc回复于12日21点05分 
在你发出增添后,更新SQLSERVER表,再Requery,修改记录内容;bh是自增?
清平乐回复于12日21点19分 
这个问题就是这样
只有增加记录时,除了这个标识字段外,都写入数据,然后更新到后台,最后再Requery()取回数据,并将记录行定位到新增的记录上。
VFP的其他话题...
热门脚本语言:

我要回帖

更多关于 vfp中的视图 的文章

 

随机推荐