什么网店管理系统统是既管网店,又管商城的?

共有637位成员   人气指数 -   最新排名 -
【话题】如何操作广域网上的表,请高手赐招
13:33:53 来自:雨菲97 浏览数:121次
如何打开广域网上的表?已知IP或域名,除了用FTP上传下载,能不能直接打开进行操作?
dx6718069回复于12日13点49分 
用DBF,FTP方式应该算是最安全、出错可能性就小的方法了。
电眼美眉回复于12日14点06分 
有一点不明白,客户端建立连接,IP是应该设置服务器的局域网IP还是上网所获得的公网IP?还是动态DNS的域名?
我在服务器设置选择INTERNET连接时,选择了“无INTERNET连接”,然后在客户端设置的是服务器网卡指定的内网IP,拨入成功了,但在网上邻居中不能显示服务器的共享资源。而且我的客户机和服务器是在同一局域网内
sdfsdf回复于12日14点23分 
首先打开控制面板,再打管理工具,里面有一个路由和远程访问(晕,我的怎么找不到呀?不好意思,忘了告诉你要用server版的,呵呵!)
打开路由和远程访问对话框之后,会有一个”操作“,要想让Win2K计算机能接受客户机的VPN拨入,必须对VPN服务器进行配置点”,
点添加服务器,选“这台计算机”,如果你想配制别的机器的话,可以选第二项,“下列计算机”然后输入计算机的名字。
好了,如果你的计算机叫server的话,那么完成后,就会出理一个服务器状态,server(本地)。
&SERVER&(服务器名),在其上单击右键,选&配置并启用路由和远程访问”如果以前已经配置过这台服务器,
现在需要重新开始,则在 &SERVER&(服务器名)上单击右键,选&禁用路由和远程访问&,即可停止此服务,以便重新配置!
当进入配置向导之后,在&公共设置&中,点选中&虚拟专用网络(VPN)服务器&,
以便让用户能通过公共网络(比如Internet)来访问此服务器。
在&远程客户协议&的对话框中,一般来说,这里面至少应该已经有了TCP/IP协议,
则只需直接点选&是,所有可用的协议都在列表上&再&下一步&即可。
之后系统会要求你再选择一个此服务器所使用的Internet连接,
在其下的列表中选择所用的连接方式(比如已建立好的拨号连接或通过指定的网卡进行连接等)再&下一步&。
接着在回答&您想如何对远程客户机分配IP地址&的询问时,除非你已在服务器端安装好了DHCP服务器,
否则请在此处选&来自一个指定的IP地址范围&。然后根据提示输入你要分配给客户端使用的起始IP地址,
&添加&为&192.168.0.10~192.168.0.240&最后再选&不,我现在不想设置此服务器使用RADIUS&即可完成最后的设置。
此时屏幕上将自动出现一个正在开户&路由和远程访问服务&的小窗口,当它消失之后,
打开&管理工具&中的&服务&,即可以看到&Routing and Remote Access&(路由和远程访问)项&自动&处于&已启动&状态了!
& 现在服务器做好了,该动工作站了吧,好,进入Win98的计算机,它要想连接到VPN服务器,
则需要先安装&虚拟专用网络&服务。在控制面板的&网络&下,进入&通讯&即可找到此项并添加上去;
安装完成之后再根据提示重启动计算机重新启动之后,在控制面板的&网络&中就有了&Microsoft 虚拟私人网络适配器&,
即说明VPN服务已安装成功!是不是已经可以了,怎么还不能拨,别急嘛,还需要建立到VPN服务器的连接。
首先进入我的电脑的&拨号网络&中,双击&建立新连接&,然后在&请键入对方计算机的名称&输入连接名,
比如为&局域网内的VPN连接&,在&选择设备&下一定不要忘了选中&Microsoft VPN Adapter&项!再&下一步&。
接着出现&请输入VPN服务器的名称或IP地址&,在其下的文字框中输入Win2K服务器的名字或IP地址,
比如为&192.168.1.1&!然后就添上用户名和密码和拨163一样了,不用我说了吧。
这位兄弟你是不是已经急了,想开始了,夷!怎么还拨不上呢?拒绝访问?
呵呵还没有拨入权限呢,叫你不要急得嘛,唉,写到这真不想写了,这么好的东东要是让大家都学会了,
以后还怎么混呀,呵呵,别打我,我写。默认的,任何用户均被拒绝拨入到服务器上。
欲给一个用户赋予拨入到此服务器的权限,
需打开管理工具中的用户管理器(在&计算机管理&项或&Active Directory用户和计算机&中),
选中所需要的用户,在其上单击右键,选&属性&。在该用户属性窗口中选&拨入&项,
然后点击&允许访问&项,再&确定&即可完成赋予此用户拨入权限的工作。
完了,终于完了,好了打开拨号连接,输入用户名master密码123等一会儿,
“嘀、嘀、嘀、、、、”正在通过验证,又过一会儿,正在登陆网络,呵呵成功了,打开网上邻居,哇,里面居然有你的计算机了!
czb27252回复于12日14点38分 
还是用VPN吧 安全又方便, 我一直再用他
weiping回复于12日14点56分 
select table
燕子74回复于12日15点10分 
我是按上述进行操作的,可是在选择INTERNET连接时,有两个选项:“无INTERNET连接”和“本地连接”(我机器的一个网卡),选择“本地连接”时,提示“您已选择将最后一个可用连接作为INTERNET连接。一个VPN服务器要求有一个连接用来作为专用网络连接”,是不是还得用两块网卡上网啊?
Bolun回复于12日15点28分 
注意:当使用远程表中存储的数据时,事务命令只更新视图临时表的本地备份中的数据;对远程基表的更新不起作用。要对远程表启用人工事务,请使用SQLSETPROP(),然后用SQLCOMMIT()和SQLROLLBACK()控制事务处理。
一般来讲,除非采用TABLEUPDATE()包装调用,事务最好和记录缓冲一起使用,而不和表缓冲一起使用。如果您在事务中使用了TABLEUPDATE()命令,那么可以回滚失败的更新操作,找到失败的原因,然后重试TABLEUPDATE()命令而不丢失任何数据,这样,就确保了更新操作一定是所谓的“要么全都做,要么全不做”的原则。
尽管在正常的情况下,简单的事务处理能够提供安全的数据更新操作,但是它并不能提供对系统失败的完全保护。如果在处理END TRANSACTION命令期间断电或产生系统中断,则数据更新仍然将会失败。
请使用下列事务处理代码模板:
BEGIN TRANSACTION
IF lSuccess=.F. &&出错
ELSE &&执行修改
END TRANSACTION
3)使用事务
下列规则适用于事务:
a、一个事务起始于BEGIN TRANSACTION命令,以END TRANSACTION或ROLLBACK命令终止。只有END TRANSACTION语句,而没有BEGIN TRANSACTION与之相匹配将会出错。
b、ROLLBACK语句前没有BEGIN TRANSACTION将会出错。
c、除非应用程序中止(这将导致回滚操作),事务一旦开始,到遇到相应的END TRANSACTION语句(或回滚语句)这一期间,将保持有效,在跨程序、跨函数的情况下也是如此。
d、对于涉及事务数据的查询,VFP在使用磁盘数据前先使用在事务缓冲区内的缓冲数据,确保使用最近的数据。
e、如果在事务处理过程中应用程序中止,则所有操作回滚。
f、事务处理只在数据库容器中进行。
g、如果INDEX命令改写了一个已有的索引文件,或者任一索引文件已打开,则不能使用INDEX命令。
h、事务只在数据工作期中起作用。
事务处理完成了下列锁定动作:
a、当一个命令直接或间接调用事务时,VFP将强制锁定。任何系统或用户的直接或间接命令将被缓冲,直至ROLLBACK或BEGIN TRANSACTION命令结束事务的操作。
b、如果在事务处理中使用了锁定命令,如FLOCK()或RLOCK()、则END TRANSACTION语句将不会解锁。因此您必须明确地解除任何在事务处理中进行的明确锁定。应该使包含FLOCK()或RLOCK()命令的事务尽量简短;否则用户会长时间不能访问被锁定的记录。
4)嵌套事务处理
对于分隔在不同并发进程中的表,嵌套事务可以为表的更新操作提供逻辑组。事务处理命令BEGIN TRANSACTION…END TRANSACTION不需要在同一函数或过程中。下列规则适用与嵌套事务处理:
a、可以嵌套5层BEGIN TRANSACTION…END TRANSACTION。
b、直到最外层的END TRANSACTION被调用时,才执行嵌套事务中的更新。
c、在嵌套事务中,一个END TRANSACTION只对最近的BEGIN TRANSACTION所引起的事务进行操作。
d、在嵌套事务中,ROLLBACK语句只对最近的BEGIN TRANSACTION所引起的事务进行操作。
e、在嵌套事务中,对同一数据的更新操作,最内层的更新优先于嵌套事务处理块中的其他更新。
请注意下面的示例,因为在嵌套事务中所做的修改没有写入磁盘,而写入事务处理缓冲区,内层事务处理将改写外层事务处理对同一STATUS字段所做的修改。
BEGIN TRANSACTION &&事务1
UPDATE EMPLOYEE; &&第一次修改
SET STATUS=&Contrcet& WHERE EMPID BETWEEN 9001 AND 10000
BEGIN TRANSACTION &&事务2
UPDATE EMPLOYEE SET STATUS=&Exempt& WHERE HIREDATE&{1/1/93} &&改写
END TRANSACTION &&事务2
END TRANSACTION &&事务1
5)保护远程更新
在对远程表进行数据更新的过程中,事务可以避免系统造成的错误。
6)性能管理
如果有一个能够正常工作的多用户应用程序,可以采用下面的方法提高程序性能:
a、将临时文件放在本地驱动器上:VFP在默认文件夹下创建自己的临时文件。文本编辑工作期也临时地创建被编辑文件的备份(一个.BAK文件)。如果本地工作站的硬盘上有足够的剩余空间,将临时文件放在这个本地盘或RAM驱动器上可以提高程序性能。重定向这些文件到本地盘或RAM驱动器上,可以减少访问网络驱动器的次数,从而提高性能。也可以在配置文件CONFIG.FPW中使用EDITWORK、SORTWORK、PROGWORK及TMPFILES语句,为这些文件指定其他存放的位置。
b、在排序和索引文件之间选择:当一个表中的数据相对稳定时,处理没有设置索引顺序的表会提高性能,这并不意味着已经经过排序整理的表就不能或不应该利用索引文件,象SEEK命令就需要一个索引,而且在定位记录时速度相当快。但是,一旦用SEEK完成定位操作后,就应该关闭索引。
c、安排对文件的独占访问:对于在其他用户不访问数据时运行的命令,象夜间的更新操作,可以通过独占方式打开文件提高性能。当文件以独占方式打开时,由于VFP不需要测试记录或文件锁定的状态,因此性能得到提高。
d、控制锁定文件的时间:要减少用户对表或记录写操作的竞争,就必须减少锁定记录或锁定表的时间。可以通过在编辑完成之后的非编辑过程中锁定记录来做到这一点。开放式记录缓冲锁定时间最短。
3、使用视图管理更新
可以使用视图具有的更新冲突管理技术来管理多用户对数据的访问。使用WhereType属性,视图控制发送到基于视图的基表的内容。可以为本地和远程视图设置该属性。WhereType属性提供了四种设置:
DB-KEYANDUPDATABLE
DB-KEYANDMODIFIED(默认)
DB-KEYANDTIMESTAMP
通过选择四种设置之一,可以控制VFP如何生成发送到视图基表的SQL Update语句的WHERE子句。可以使用“视图设计器”的“更新条件”选项卡来选择需要的设置,或者使用DBSETPROP()函数设置一个视图定义的WhereType属性。要想更改一个活动视图临时表的WhereType属性,请使用CURSORSETPROP()。
1)只比较关键字段
使用DB-KEY设置对更新的限制最小。用来更新远程表的WHERE子句只包含用KeyField或KeyFieldList属性指定的主关键字段。如果基表中的主关键字段的值在检索记录之后没有被更改或删除,更新将正常进行。
2)比较视图中的主关键字段和已更改字段
默认的DB-KEYANDMODIFIED设置比DB-KEY多了一些限制。DB-KEYANDMODIFIED只将关键字段和在视图中更改的可更新字段与基表相应的字段进行比较。如果在视图中更改了一个字段,但该字段不是可更新字段,则字段不与基表中的数据比较。
用来更新基表的WHERE子句包含用KeyField属性指定的主关键字段和其他在视图中更改的任意字段。
3)比较关键字段和所有可更新字段
DB-KEYANDUPDATABLE设置将关键字段以及任何视图中的可更新字段(不管是否被修改)与基表相对应的的字段进行比较。如果字段是可更新的,即使在视图中并没有更改它,但如果其他人在基表中更改了这个字段,更新就会失败。
用来更新基表的WHERE子句包含用KeyField或KeyFieldList属性指定的主关键字段和其他任何可更新字段。
4)比较基表记录中所有字段的时间戳
DB-KEYANDTIMESTAMP设置是对更新的限制最多的,并且只有在基表中具有时间戳字段时才能使用该设置。VFP将基表记录中的当前时间戳与当数据被提取到视图中的时间戳进行比较。如果基表记录的任何字段被改变了,即使它不是视图更改的字段,甚至不是视图中的一个字段,更新也会失败。
为了能够在多表视图中使用DB-KEYANDTIMESTAMP设置成功地更新数据,必须在每个可更新表的视图中包含时间戳字段。例如,在视图中有三个表,但是却只想更新其中的两个,而且选择了DB-KEYANDTIMESTAMP设置,必须从两个可更新表中将时间戳字段带入到结果集合中。可以使用CompareMemo属性的逻辑值来确定在冲突检查中是否包含备注字段。
三、冲突管理
不管选择了缓冲、事务还是视图、都必须在更新过程中管理冲突。那么,如何具体管理冲突呢?
1、管理缓冲冲突
在一个多用户环境中,通过精心选择打开、缓冲并锁定数据的时间和方式,可以更高效地进行数据更新操作。应该减少访问记录或表时发生冲突的时间,同时必须预测到不可避免的的冲突将导致什么样的后果,并对这种冲突进行管理。冲突一般在一个用户试图锁定一个当前正被其他用户锁定的记录或表时发生,两个用户不能同时锁定同一个表或记录。
应用程序中应包含管理冲突的例程。如果没有冲突例程,系统将死锁。死锁通常在这种情况下发生:第一个用户已经锁定一个表或记录,现在试图去锁定已被第二个用户锁定的记录或表,而第二个用户又反过来试图锁定第一个用户锁定的记录或表。尽管这种情况很少发生,但记录或表锁定的时间越长,这种死锁的可能性就越大。
无论是设计一个多用户的应用程序还是为一个单用户系统添加网络支持服务,都要求找到错误并对其进行处理。使用VFP记录缓冲和表缓冲可以简化这种工作。
如果试图锁定一个已被其他用户锁定的记录或表,VFP将返回错误信息。可使用SET REPROCESS自动处理不成功的锁定操作。此命令可与ON ERROR例程和RETRY命令组合,继续或取消锁定操作。
2、检测并解决冲突
在数据更新操作过程中,特别是在共享环境下,您可能希望确定哪些字段已经被更改、确定已更改字段的原有值或当前值是什么。VFP的缓冲和GETFLDSTATE()、GETNEXTMODIFIED()、OLDVAL()及CURVAL()函数可以提供这些功能。通过它们来确定哪些字段已经被更改;查找已更改的数据;比较当前值、原有值及已编辑的值。这样,可以决定如何处理错误或冲突。
如果要检测字段中所做的更改,可在更新操作之后使用GETFLDSTATE()函数。GETFLDSTATE()可以对非缓冲数据进行操作,但在启用了记录缓冲的情况下,此函数更加有效。比如将GETFLDSTATE()用于一个表单的Skip按钮代码中。当您移动记录指针时,VFP将检查记录中所有字段的状态,如下例所示:
lModified=.F.
FOR nFieldNum=1 TO FCOUNT() &&检查所有的字段
IF GETFLDSTATE(nFieldNum)=2 &&已修改
lModified=.T.
EXIT &&可以在此处插入一个
若要检测并定位缓冲数据中已更改的记录,请使用GETNEXTMODIFIED()函数。GETNEXTMODIFIED()函数以0作为参数,查找第一个已修改的记录。如果其他用户对缓冲表进行了修改,则您的缓冲区中TABLEUPDATE()命令遇到任何修改都将导致冲突。可以用CURVAL()、OLDVAL()和MESSAGEBOX()计算冲突值并解决冲突,CURVAL()返回磁盘上记录的当前值,而OLDVAL()返回记录缓冲时的值。
若要确定缓冲字段的原有值,请使用OLDVAL()函数,OLDVAL()返回一个缓冲字段的值。
若要确定磁盘上一个缓冲字段的当前值,请使用CURVAL()函数,CURVAL()返回一个在编辑操作执行前磁盘缓冲字段的当前值。
在共享环境中,可以创建一个出错处理过程,比较当前值和原有值,并决定是接受当前的修改还是更早一点的修改。
1)使用备注字段检测冲突
使用CompareMemo属性来控制何时使用备注字段检查更新冲突。这个视图和临时表属性确定了在更新的WHERE子句中是否包含备注字段(备注或通用型)。默认设置是.T.,即在WHERE子句中包含备注字段。如果这个属性设置为.F.,不论UpdateType如何设置,在更新的WHERE子句中就不会包含备注字段。
当CompareMemo属性设置为假时,备注字段上的开放式冲突检查是不可用的。如果要用备注字段的冲突检查,请将CompareMemo属性设置为真。
2)管理冲突的规则
管理在多用户环境中的冲突需要有扩展和可重用的代码。一个完整的冲突管理例程进行如下操作:
a、检查冲突;
b、确定冲突的性质和位置;
c、提供足够的信息,用户可以有效地解决这些冲突;
有关冲突管理例程的示例,可以参阅位于VFP\SAMPLES\CLASSES的SAMPLES.VCX中的datachecker类。将该类添加到表单中,在将缓冲数据写入表的操作之前调用CheckConflicts方法程序,例如记录缓冲移动记录指针,关闭表,或者发出TABLEUPDATE()命令。
好迷茫回复于12日15点46分 
如果就用DBF表,在服务器上共享目录,并设置有写的权限以达到C/S方式。
你的另一个帖子也说了,就用USE \\IP\... 方式打开。
不过那要注意的地方就多了:
一、C/S的应用形式
在应用中,人们多把C/S的应用程序分成两部分:让客户程序驻留在网络的前端工作站(一台微机)上,服务
器处理程序则在网络的后台,其分布结构见图1。当客户(在工作站上)通过请求的方式提出了所需要的服务
时,服务器不必关心客户程序的功能,只需响应请求就行。
在这种结构中,服务器的硬件必须具有足够的处理能力,这样才能满足各客户的要求。
从概念上看,“服务器”的含义非常广泛,数据库服务器只是其中的一种。数据库服务器至少应提供对数据的
存取、加工、处理等服务,同时还要提供完善的安全保护及数据的完整性等处理,并允许多个客户同时访问同
一个数据库。因此,客户可以不用考虑对数据的安全、优化、完整性等基础处理,只需专心自己的工作。
客户应用程序除了向服务器提出请求外,还要分析从服务器返回的信息(包括数据和指令),并据此作一些再
处理(如向操作者显示相应的数据、要求补充输入一些数据等)。
中介(MiddleWare)是C/S系统中的一种系统软件,它负责链接客户与服务器。客户与服务器联接的最底层是
网络的硬件,但对应用级的程序员来说,关心的焦点还是它们在软件上的通信链接。因为C/S的环境复杂,而
且涉及多种规程及协议,所以还必须依靠中介软件才能有效地降低工作难度。中介软件能够把使用者与复杂的
通信规程、硬件平台及操作系统隔开,数据通过中介在客户与服务器间流动,客户与服务器通过中介软件进行
平稳互访,这种方式无疑大大降低了编程者的技术难度及工作量。
目前已出现了很多有关中介的标准及软件,我们在VisualFoxPro上见到的就是ODBC。它处在客户与服务器之
间,有效地隐蔽了C/S操作的复杂过程。
二、设计C/S系统的基本原则
这里只考虑客户与服务器分别在不同硬件平台上的C/S系统(即基于网络的C/S系统),它们在设计时应遵循
以下原则:
1.尽量让客户机完成针对特定用户的事务处理
因为服务器由多个客户机共享,如果把每个用户的特定处理都放在服务器上,就会增大服务器的工作量,因而降低其响应速度,延长客户申请
的等待时间,所以尽量让客户机完成针对特定用户的事务处理,目的是为了减轻服务器的负担,提高C/S系统的整体性能。
2.尽量让服务器管理全部的共享资源
可共享的资源包括数据、部分外设(如扫描仪、打印机等)及基础服务处理(如通信),这些都应由服务器来管理,以保证各用户都能享用。
对于共享数据,由服务器集中处理还有助于保证数据的完整性、一致性和安全性。
3.尽量减少客户与服务器间传送的数据量
在网络间传送数据,可能产生数据错误、丢失、延时、故障等问题。数据传递得越多,产生的问题、要求恢复的可能性也就越大。而且网络上
堆积了大量数据,必然会降低系统对其他客户机的反应速度,同时影响客户之间及客户与服务器间的通信(通信也是一种共享资源)。所以,
减少网络中数据的传递量,有助于保证C/S系统的整体性能。
4.坚持局部数据在局部存储和管理
这是为了减少网络上的数据传输量、减轻服务器的压力、增强服务器对请求的响应,提
高C/S系统的总体性能。
根据上述原则,在做基于数据库的C/S系统设计时,可以把接口表示部分(如输入、输出界面)放在客户机上,把数据的管理部分(如查询、
存储、更新、优化等)放在服务器上。对其他处理逻辑,则要根据具体情况进行分析,例如对于计算密集型的处理,可把计算部分放在客户机
上,而有关数据特性的一般约束处理(如完整性、安全性、一致性等)则可放在服务器上。
对于数据的分布,也应作妥善安排。对于提供给各客户共享的数据,应放在服务器上(作为远程数据来处理);而对于各自的独用数据,则应
放在自己的客户机上。
三、Visual FoxPro中建立C/S的机制
用Visual FoxPro构造C/S系统时,用ODBC作中介软件,由ODBC完成客户与服务器间的通信。这时各应用程序都通过各自的驱动程序与数据库相
联,ODBC通过自身的驱动程序管理器来管理ODBC与驱动程序间的交互,程序员则可以使用相同的程序调用来实现与不同数据源的通信。
B/S结构跟C/S结构的区别
  所谓B/S结构,就是只安装维护一个服务器(Server),而客户端采用浏览器(Browse)运行软件,即浏览器/服务器结构。
  B/S结构的优点是维护方便,能够降低总体拥有成本。客户端运行软件,就像我们平时上网浏览网页一样,有个浏览器(通常是IE5.0)就行
了,不用安装其它软件。而且通过电话线也可以运行软件。B/S结构的软件所有的维护、升级工作都只在服务器上进行,而客户端就能获得最新
版本的软件。
  相对于C/S结构,尽管C/S结构相对于更早的文件服务器来说,有了很大的进步,但与B/S相比,缺点和不足是很明显的。
  首先,B/S比C/S的维护工作量大大减少了。C/S结构的每一个客户端都必须安装和配置软件。假如一个企业共有50个客户站点使用一套C/S结
构的软件,则当这套软件进行了哪怕很微小的改动后(比如增加某个功能),系统维护员都必须进行这样的维护;将服务器更新到最新版本;
将客户端原有的软件卸载,再安装新的版本,然后进行设置,最为可怕的是客户端的维护工作必须不折不扣的进行50次。若其中有部分客户端
是在另外一个地方,则系统维护员还必须跑到该地方再进行卸载、安装、设置的工作。 若某个客户端,忘记进行这样的维护,则该客户端将会
碰到版本不一致的问题而无法工作。 而B/S结构,客户端不必安装及维护。如果我们将前面企业的C/S结构的软件换成B/S结构的,我们看看软件
升级后,系统维护员如何维护: 系统维护员只要将服务器的软件升级到最新版本就行了。其他客户端,只要重新登录系统,使用的就已经是最
新版本的软件了。
  其次,B/S相对C/S能够降低总体拥有成本, C/S软件一般是采用两层结构的。而b/s采用的是三层结构。
两层结构中,客户端接受用户的请求,客户端向数据库服务提出请求,数据库服务将数据提交给客户端,客户端将数据进行计算(可能涉及到
运算、汇总、统计等等)并将结果呈现给用户。
  在三层结构中,客户端接受用户的请求,客户端向应用服务提出请求,应用服务从数据库服务中获得数据,应用服务将数据进行计算并将
结果提交给客户端,客户端将结果呈现给用户。
  这两种结构的不同点是,两层结构中客户端参与运算,而三层结构中客户端并不参与运算,只是简单的接收用户的请求,显示最后的结果。
由于三层结构中的客户端并不需要参与计算,所以对客户端的计处算机电脑配置要求是比较低的。
  另外,由于从应用服务到客户端只传递最终的结果,数据量较少,使用电话线也能够信任。而采用C/S两层结构,使用电话线作为传输线路
可能因为速度太慢而不能够接受。 采用三层结构的b/s的配置可以是提高服务器的配置,降低客户端的配置。这样增加的只是一台服务器(应用
服务和数据库服务可以放在同一台计算机电脑中)的价格,而降低的却是几十台客户端机器的价格。起到了降低总体拥有成本的作用。
ke_ke_yu回复于12日16点01分 
单位也能够使用 VPN 连接来为地理位置分开的办公室建立路由连接,或者在保持安全通讯的同时通过公共网络,例如 Internet,连接到其他单位。通过 Internet 被路由的 VPN 连接逻辑上作为专用的 WAN 链接来操作。
通过远程访问和路由连接,组织可以使用 VPN 连接将长途拨号或租用线路换成本地拨号或者到 Internet 服务提供者(ISP)的租用线路。
在 Windows 2000 中有两种类型的 VPN 技术:
1.点对点隧道协议 (PPTP)
对于数据加密,PPTP 使用用户级的点到点协议 (PPP) 身份验证方法及 Microsoft 点到点加密 (MPPE)。
2.带有 IP 协议安全 (IPSec) 的第二层隧道协议 (L2TP)
L2TP 使用用户级 PPP 身份验证方法和带有 IPSec 数据加密的机器级证书。
我们现在要配置的实例是一个远程客户端(Windows 2000 Pro)与一个公司总部VPN server(Windows 2000 Pro)之间的连接.需要三个步骤:
1.配置VPN服务器,使之能够接受VPN接入;
2.配置客户端的拨号网络,使之能够访问
3.配置客户端的VPN连接.
一.VPN服务器的配置
服务器的地址为202.100.100.100(此地址为虚构地址).注意服务器的地址可以是公网的真实地址也可以是专网的地址,只要客户机拨入网络后能够访问到此服务器即可。
配置过程如下:
1.打开&路由和远程访问&.
2.右击要配置的服务器-&&配置并启用路由和远程访问&.
3.跳过欢迎页面,在&路由和远程访问服务器安装向导&页面中选择&虚拟专用网络(VPN)服务器&.下一步.
4.在&远程客户协议&页面根据需要选择合适的协议,这儿选择&TCP/ip&,下一步.
5.在&internet连接&页面,选择一个用来让远程计算机连接的internet连接,这儿我们选择地址为202.100.100.100的连接,下一步.
6.在&IP地址指定&页面,选择合适的地址分配方案,为灵活起见选择DHCP好一些.如果仅是几个地址的话可以指定一个地址范围.下一步.
7.在&管理多个远程访问服务器&页面,选择&不,我现在不想设置此服务器使用RADIUS&.下一步.
二.用户的配置
用户的配置比较简单,给予用户拨入的权限.
三.远程访问策略的配置
远程访问策略可以灵活的对远程访问进行配置,如需要建议进行配置.
客户端的配置:
一.建立新的拨号连接
(注意如果是VPN服务器与此客户机都在同一局域网内,那么就不必建立拨号连接,直接使用当前的连接就是)
1、选择“开始”-&“设置”-&“网络和拨号连接”,单击“新建连接”,启动网络连接向导。
2、跳过欢迎屏幕,在第二页网络连接类型中选择“拨号到Internet”,下一步。
3、在跳出的Internet连接向导对话框第一页中,选择“手动设置Internet连接或通过局域网(LAN)连接”,下一步。
4、在第2步设置您的Internet连接页面,选择“通过电话线和调制解调器连接”,下一步。
5、在第3步Internet账户连接的信息第1步页面,不选择“使用区号和拨号规则”,在电话号码框内添加“163”,下一步。
6、在第3步Internet账户连接的信息第2步页面,填写上拨号上网所用的用户名和密码,下一步。
7、在第3步Internet账户连接的信息第3步页面配置您的计算机中,将连接名改为“163”,默认也可,下一步。
8、在第4步设置Internet mail账户页面选“否”,下一步完成连接向导。
9、测试刚建立的这个拨号连接,直至正常。
二.建立VPN连接
1、选择“开始”-&“设置”-&“网络和拨号连接”,单击“新建连接”,启动网络连接向导。
2、跳过欢迎屏幕,在第二页网络连接类型中选择“通过Internet连接到虚拟专用网络”,下一步。
3.在&公用网络&页面,如果你是在局域网中与服务器已经通过网卡建立了连接,那么可以选择&不拨初始连接&,如果不是这样,那么可以选择下面的&自动拨此初始连接&,这里应该选择我们刚才建立的连接&163&.下一步.。
4.在&目标地址&页面,填写上你的VPN服务器的主机名或IP地址,我们这儿就要填写&202.100.100.100&.下一步.
5.在&可用连接&页面,根据需要选择让所有用户都使用此连接或只有自己使用此连接.为简化起见,我们选择&只是我自己使用此连接&.下一步.
6.最后输入合适的连接名称如&到公司的VPN连接&,完成.
在网络和拨号连接中,单击&到公司的VPN连接&,即可进行连接.
风高浪急回复于12日16点17分 
你服务器端用什么操作系统?
好山好水回复于12日16点37分 
需指定地址、端口号和网络库
& & &Driver={SQL Server};Server=130.120.110.001;Address=130.120.110.001,1052;Network=Database=Uid=Pwd=&
注:Address参数:必须为 IP 地址,而且必须包含: 端口号
金灵风回复于12日16点54分 
呵呵,在广域网上,一般用SQL SERVER、MYSQL等等这些服务型数据库,MDB、DBF是文件型数据库,
要访问,都要设置目录共享才能访问
月夕凌回复于12日17点11分 
WIN2000SERVER,通过单网卡与16口交换机连接,路由器连接网通光纤上网,路由器上带动态DNS,使用的花生壳
凯撒大帝回复于12日17点25分 
数据共享程序设计
如果创建的应用程序在网络环境中的多台计算机上运行,或者一个表单的多个实例对相同的数据进行访问,这时就需要进行共享访问程序设计。共享访问不仅能为用户使用数据和数据共享提供更有效的方法,而且可以在必要时对访问进行限制。
VFP支持如下功能:对数据的共享或独占访问;锁定选项;数据工作期;记录缓冲和表缓冲以及事务处理。尽管这些功能主要应用在共享环境里,但在单用户环境下也可以使用。
一、控制对数据的访问
因为访问数据是在文件里进行,所以有效的数据管理首先从控制这些文件开始。您需要选择访问数据的方式,还要选择在什么时间、如何限制对数据的访问。
1、访问数据
在共享环境中,可以用两种方式访问数据:从独占文件中访问或从共享文件中访问。若打开一个共享访问的表,其他用户也可以对该文件进行访问;若打开一个独占访问的表,其他用户就不能对该表进行读写。独占访问不具备在网络环境中共享数据的许多优点,所以应该避免使用。
1)以独占方式使用表
打开一个文件最严格的限制方式就是独占方式。通过界面打开一个表时,默认情况下是独占使用的,也可以利用VFP命令明确地以独占方式打开一个表。
如果要打开一个独占使用的表,可以在命令窗口中输入如下命令:
SET EXCLUSIVE ON
USE cMyTable
或者在命令窗口中输入:
USE cMyTable EXCLUSIVE
下列命令要求以独占方式打开一个表:
·ALTER TABLE
·INDEX:当创建、添加或删除一个复合索引标志时。
·INSERT [BLANK]
·MODIFY STRUCTURE:如果要以此命令更改一个表结构,必须以独占方式打开该表。但是,当以共享方式打开这个表时,只能在只读方式下使用此命令。
在一个共享表中执行上述命令,VFP将返回出错信息:“文件必须以独占方式打开”。
可以使用FLOCK()函数限制对表的访问。如果使用FLOCK()锁定表,则其它用户不能对该表进行写操作,但可以读该表。
2)以共享访问方式使用表
以共享方式打开一个表时,多个工作站可以同时访问该表。通过界面打开表时,可以不理会SET EXCLUSIVE默认的ON设置,而明确地用VFP命令打开一个表供共享使用。
若要打开一个共享使用的表,可以在命令窗口中输入下列命令:
SET EXCLUSIVE OFF
USE cMyTable
USE cMyTable SHARED
当在一个共享表中添加或更改数据时,必须首先锁定要更改的记录或整个表。对一个以共享方式打开的表或记录,可通过下列方式进行锁定:
·使用命令来自动锁定记录或表。
·用记录和表锁定函数,人工锁定一个或多个记录。
·用CURSORSETPROP()函数设置缓冲。
与共享表相关的备注和索引文件也是以共享方式打开的。如果应用程序所使用的表只用于查找数据,而该应用程序的所有用户都要访问它,那么将该表标记为只读可以提高性能。
2、锁定数据
如果要共享访问文件,必须通过锁定表和记录来对这种访问进行管理。锁定不同于访问允许权限,它既可以对数据进行长期控制,也可以短期控制。VFP提供自动和人工锁定方式。
1)选择记录或表锁定
无论是哪一种锁定方式,目的都是为了防止两个用户同时写一个记录。表锁定用来防止其他用户向表中写入,但允许读整个表。由于表锁定阻止其他用户更新表中的记录,因而很少使用。
2)人工或自动锁定
除了选择记录锁定还是表锁定,还可以选择自动锁定或人工锁定,许多VFP命令在执行之前都会自动锁定一个记录或一个表,如果成功锁定了记录或表,则继续执行该命令,然后再解锁。下面列出了自动锁表和记录的命令:
命令 锁定范围
——————————————————————————
ALTER TABLE 整个表
APPEND 整个表
APPEND BLANK 表头
APPEND FROM 整个表
APPEND FROM ARRAY 表头
APPEND MEMO 当前记录
BLANK 当前记录
BROWSE、CHANGE和EDIT 一旦开始编辑字段,锁定对象为当前记录和相关表中别名字段的所有记录
CURSORSETPROP() 取决于参数
DELETE 当前记录
DELETE NEXT 1 当前记录
DELETE RECORD n 记录n
DELETE 删除多个记录 整个表
DELETE-SQL 当前记录
GATHER 当前记录
INSERT 整个表
INSERT-SQL 表头
MODIFY MEMO 编辑开始时,锁定当前记录
READ 当前记录和别名字段的所有记录
RECALL 当前记录
RECALL NEXT 1 当前记录
RECALL RECORD n 记录n
RECALL 恢复多个记录 整个表
REPLACE 当前记录和别名字段的所有记录
REPLACE NEXT 1 当前记录和别名字段的所有记录
REPLACE RECORD n 记录n
REPLACE 替换多个记录 整个表和别名字段的所有记录
SHOW GETS 当前记录和别名字段引用的所有记录
TABLEUPDATE() 取决于缓冲
UPDATE 整个表
UPDATE-SQL 整个表
3)记录锁定的特点
锁定记录的命令比锁定表的命令破坏性要小。锁定一个记录时,其他用户仍然可以添加或删除其他记录。如果记录或表已经被其他用户锁定,或者表已经被其他用户用独占方式打开,则锁定记录或表的操作失败。如果不能锁定记录,则尝试锁定当前记录的命令将返回出错信息“其他用户正在使用记录”。
BROWSE、CHANGE、EDIT和MODIFY MEMO命令只有在编辑时才锁定记录。如果您正在编辑来自相关表记录中的字段,那么该相关记录可能会被锁定。如果当前记录或相关记录已被其他用户锁定,则锁定失败。如果锁定成功,则可以编辑该记录;在移到另一个记录或激活其他窗口时,记录解锁。
4)表头和表锁定的特点
一些VFP命令锁定整个表,而有些命令则只锁定表头。表锁定命令比表头锁定命令更加严厉。锁定表头时,其他用户不能添加或删除记录,但可以修改字段内的数据。
当发出APPEND BLANK命令时,用户可以共享表而不发生冲突,但是当其他用户也向该表追加一个空白记录时,就会出错。出错信息是:“其他用户正在使用文件”。这个信息表明有两个或两个以上的用户在同时执行APPEND BLANK命令。如果无法锁定一个表,则锁定整个表的命令将返回一个错误信息:“其他用户正在使用文件”。要取消正在进行的锁定操作,可按[ESC]键。
5)自动锁定示例
在下面的示例中,即使customer表是以共享方式打开的,用户为了从其他表追加记录也将自动锁定整个表。
SET EXCLUSIVE OFF
USE customer
APPEND FORM oldcust FOR state=&OPEN&
6)人工锁定
您可以用锁定函数人工锁定一个记录或一个表。这些函数有:
RLOCK() LOCK() FLOCK()
RLOCK()函数等同于LOCK()函数,都可以锁定一个或多个记录;FLOCK()锁定一个文件。LOCK()和RLOCK()函数可以用户锁定表头,如果把0作为记录编号提供给LOCK()或RLOCK(),而且测试表明表头没有锁定,则该函数将锁定表头并返回.T.。
如果锁定一个记录或一个表,那么一定要尽快解锁,以便其他用户访问。解锁可使用UNLOCK命令。
这些人工锁定函数可以完成如下操作:
*测试记录或表的锁定状态。
*如果测试表明该记录没有锁定,则将该记录锁定并返回.T.。
*如果该记录或表不能锁定,则根据SET REPROCESS的当前设置,再次进行锁定。
*返回.T.或.F.,表明锁定尝试是否成功。
注意:如果不想锁定记录,而测试该记录的锁定状态,请使用ISRLOCKED()或ISFLOCKED()函数。
如果锁定记录或表的操作失败,SET REPROCESS命令和您当前的错误处理例程将确定是否再次尝试锁定。SET REPROCESS会影响不成功的锁定结果,因此可以利用SET REPROCESS来控制锁定尝试的次数和时间。
下面的示例以共享方式打开customer表,并用FLOCK()函数锁定该表。如果该表锁定成功,则REPLACE ALL将更新该表中的所有记录,UNLOCK对该文件解锁;如果其它用户已经锁定该文件或文件中的记录,现在还不能锁定该表,则显示一条信息。
SET EXCLUSIVE OFF
SET REPROCESS TO 0
USE customer &&打开共享表
IF FLOCK()
REPLACE ALL &&替换并解锁
WITH UPPER(contact)
ELSE &&输出信息
WAIT &文件正被其他用户使用&
3、解锁数据
在共享环境下锁定记录或文件并完成了相应的数据操作后,要及时解锁。解锁的方法有很多种,在某些情况下,只需简单的移动到下一个记录就能解锁,有些情况则需要明确的解锁命令。
要解锁被自动锁定的记录,只需移动记录指针,甚至在设置了MULTILOCKS ON的情况下也是如此。而对于人工锁定的记录,则必须对记录明确地解锁。
下面列出了对人工和自动的锁定记录和表进行解锁的各种命令:
——————————————————————————————————
UNLOCK 解锁当前工作区内的记录和文件
UNLOCK ALL 对所有工作区的记录和文件解锁
SET MULTILOCKS OFF 建立新锁定的同时自动解锁当前锁定
FLOCK() 在锁定文件之前解锁文件中所有记录
CLEAR ALL、CLOSE ALL、USE、QUIT 对所有文件和记录解锁
END TRANSACTION 对所有的自动锁定项解锁
TABLEUPDATE() 在更新表之前解锁所有锁定项
注意:如果记录在UDF中被自动锁定,那么当移开记录指针然后又移回该记录时,锁定将会被解除。可以使用表缓冲解决这个问题。
4、使用数据工作期
为确保共享环境中的每个用户都具有安全的、正确的环境,确保表单的多个实例能独立操作,VFP提供了数据工作期。
数据工作期是对当前动态工作环境的描述。可以将数据工作期看成是一个小型数据环境,这个数据环境是在一台机器上运行一个开发的VFP工作期。每个数据工作期包括:
* 表单的数据环境中的各项备份
* 表示打开的表、索引和关系的临时表
请考虑当在多用户应用程序的各自工作站同时打开相同的表单时,会发生什么,这样可以很容易理解数据工作期的概念。这种情况下,每个工作站运行一个独立的VFP工作期,因此有自己的工作区设置以及自己表示打开的表、索引和关系的临时表。
但是,如果您在一个机器上,同一个VFP工作期,打开单个项目中的同一个表单的多个实例,则这些表单共享默认的数据工作期,它代表了单个的动态工作环境。在同一个VFP工作期中打开的表单的每一个实例使用相同的工作区设置,并且在一个表单实例中移动工作区中的记录指针会自动影响相同表单的其他实例。
1)使用私有数据工作期
如果想更多的控制表单的多个实例,可以使用私有数据工作期。当表单使用私有数据工作期时,VFP为应用程序创建的表单、表单集或工具栏中的每个实例创建一个新的数据工作期。每个私有数据工作期包括:
* 表单的数据环境中每个表、索引和关系的独立备份。
* 数目不限的工作区。
* 独立于表单基表的每个备份表的记录指针。
可用数据工作期数目只受系统内存和磁盘空间的限制。
通过设置表单的DataSession属性可实现私有数据工作期,DataSession属性有如下两个设置:
* 1-默认的数据工作期(默认设置)
* 2-私有数据工作期
如果要使用私有数据工作期,请选择下列选项之一:
* 在“表单设计器”中,将表单的DataSession属性设置为“2-私有数据工作期”。
* 在代码中将DataSession属性设置为2。例如,可输入:
frmMyForm.DataSession=2
注意:只能在设计时设置DataSession属性。运行时DataSession为只读属性。
当表单使用的是私有数据工作期时,在单个机器上,单个的VFP工作期中打开表单的每个实例使用自己的数据环境。使用私有数据工作期类似于在不同的工作站上同时运行同一个表单。
2)识别数据工作期
每个私有数据工作期是单独识别的。可以在“数据工作期”窗口中查看每个数据工作期的内容。也可以通过Load事件代码中的命令改变数据工作期的说明。
使用DataSessionID的运行时属性,可以查看每个数据工作期的识别号。下面的示例显示名为frmMyForm的表单的DataSessionID属性。
DO FORM frmMyForm
?frmMyForm.DataSessionID
如果使用NAME子句激活表单,可使用该表单的名称访问DataSessionID属性,如下面的代码所示:
DO FORM frmMyForm NAME one
?one.DataSessionID
DataSessionID属性只是用来识别特殊的数据工作期。不要更改一个表单实例的DataSessionID属性,当更改DataSessionID属性时,与数据绑定的控件会丢失它们的数据源。
3)使用多个表单实例更新数据
私有数据工作期生成各自独立的工作区,工作区包含了表单的表、索引和关系的独立备份,表单的每个备份引用了相同的基表和索引文件。当用户从表单的一个实例中更新记录时,更新该表单引用的基表。当定位到更改的记录时,就可以看到表单的另一个实例所做的更改。
如果在一个私有数据工作期对记录或表进行了锁定,其他私有数据工作期就不能再进行锁定。例如,数据工作期1的用户锁定了一个记录,数据工作期2的用户就不能锁定这个记录了。如果数据工作期1的用户以独占方式打开了一个表,数据工作期2的用户就不能打开这个表了。通过遵守其他数据工作期所做的锁定,VFP可以保护基表更新的完整性。
4)定制数据工作期的环境
由于数据工作期控制着某些SET命令的范围,可以在单一的VFP工作期中使用私有数据工作期建立自定义的SET命令设置。
例如,SET EXACT命令,控制比较不同长度字符串时使用的规则,作用于当前数据工作期。SET EXACT命令的设置为ON时,规定直到表达式末尾每个字符必须都完全匹配时,两个表达式才算相等。通过在默认的数据工作期中将SET EXACT命令设置为OFF,可以使用“模糊”搜索或相似查找;但是应用程序可能包含特殊的表单,它需要精确匹配。可以将需要精确匹配的表单的DataSession属性设置为2,使用私有数据工作期,然后将SET EXACT命令设置为ON。由于仅在使用私有数据工作期的表单使用一个SET命令,则当为一个特定的表单启用自定义工作期设置时,您可以保留整个的VFP工作期设置。
5)使自动数据工作期的设置无效
当使用表单的私有数据工作期时,在一个表单中对数据所做的更改不会自动地体现到相同表单的其他实例中。如果想让表单的所有的实例都访问相同的数据,并立即反应对公共数据做的改动,可以忽略自动数据工作期的设置。
若要使自动数据工作期设置无效,请使用命令SET DATASESSION TO 1或SET DATASESSION TO。这两个命令都将启用命令窗口以及项目管理器所控制的默认数据工作期。
5、缓冲访问数据
如果希望在更新时保护数据,可以使用缓冲技术。在多用户环境下,VFP的记录缓冲和表缓冲技术可以保护对单个记录或多个记录所做的数据更新以及数据维护操作。缓冲区可以自动测试、锁定以及解锁记录或表。
借助缓冲技术,可以很容易地检测并解决数据更新操作过程中所遇到的冲突:当前记录被复制到一个由VFP进行管理的内存区域或磁盘区域,其他用户仍然可以同时访问原来的记录。当离开该记录或以编程方式更新记录时,VFP将准备锁定该记录,确认其他用户没有做修改,然后写入编辑结果。在试图更新数据时,还必须解决冲突,若有冲突则应防止编辑结果写入原来的表。
1)选择缓冲的方法
在启用缓冲之前,应对数据环境进行评估,根据应用程序、记录以及表的类型和大小,信息的使用与更新方式以及其他因素,选择缓冲方法和锁定选项。一旦启用了缓冲,则在它被废止或关闭表之前一直保持有效。
VFP提供两种缓冲:记录缓冲和表缓冲:
* 若一次只对一个记录进行访问、修改或写操作,那么请选择记录缓冲。在一个多用户环境中,记录缓冲能够提供适当的有效性检查机制,对其他用户所做的数据更新操作影响最小。
* 如要对多个记录的更新使用缓冲,请选择表缓冲。如果想在一个表中处理多个记录或在一对多的关系中处理子表的记录,表缓冲提供了最佳的工作方式。
如果要对已有数据提供最大程度的保护,请使用VFP事务。可以单独使用事务,但是如果将事务和记录缓冲命令或表缓冲命令一起使用将会获得更好的效果。
2)选择锁定方式
VFP以两种锁定方式提供缓冲:保守式和开放式。这两种方式决定了一个或多个记录何时被锁定、优势何时、怎样被解锁。
a、保守式缓冲
在多用户环境下,保守式缓冲能防止其他用户在对某一特定记录或表进行修改时访问它。
保守式缓冲为单个记录的修改提供最安全的工作环境,但是会降低用户的操作速度。这种缓冲方式非常象FoxPro以前版本的标准锁定机制。此外,它还带有内在数据缓冲等更多的好处。
b、开放式缓冲
开放式缓冲是更新记录的有效方法,因为锁定只在写记录时生效,这样在多用户环境中使单个用户独占系统的时间最少。
当在一个远程表上使用记录或表缓冲时,VFP将强制使用开放式锁定。由函数CURSORSETPROP()设置的Buffering属性值决定了缓冲和锁定的方法。
下面列出了Buffering属性的有效值:
小卫士回复于12日17点42分 
VPN的端口是多少?我映射了80、21、、1723,
远端可以拨入,是拨我的真实的公网IP,但什么也看不到,郁闷!
先结贴,重开VPN的贴子
马弘历回复于12日17点56分 
jack_wang0823
你是怎么配置VPN的?是用的WIN自带的VPN服务器还是专门的VPN软件?我找了个遥志,但没有用,不知道为什么
yhxv001回复于12日18点12分 
若要启用 请使用此缓冲值
————————————————————————————————————
无缓冲,默认值 1
保守式记录锁定。它锁定当前记录,在记录指针移动或 2
发出TABLEUPDATE()命令后更新
开放式记录锁定。它一直等到记录指针移动,然后锁定 3
保守式表锁定。它锁定当前记录,在发出TALBEUPDATE() 4
命令后更新。
开放式表锁定。它一直等到发出TABLEUPDATE()命令,然后 5
锁定并更新已编辑的记录。
对于表,Buffering的默认值为1;对于视图,默认值为5。如果您使用缓冲访问远程数据,则Buffering属性可以是3(开放式记录缓冲)或5(开放式表缓冲)。此外,对除1以外的缓冲方式,设置MULTILOCKS为ON。
3)启用记录缓冲
可用CURSORSETPROP()函数启用记录缓冲。
若要在当前数据区启用保守式记录锁定,请使用如下函数和参数:
CURSORSETPROP(&Buffering&,2)
VFP在指针位置锁定记录。如果锁定成功,VFP将该记录放入缓冲区并允许编辑。当移动记录指针或发出TABLEUPDATE()命令时,VFP将把缓冲记录写入原来的表。
若要在当前数据区启用开放式记录锁定,请使用如下函数和参数:
CURSORSETPROP(&Buffering&,3)
VFP将指针位置的记录放入缓冲区并允许编辑。当移动记录指针或发出TABLEUPDATE()命令时,VFP将对该记录进行锁定。若锁定成功,VFP将对磁盘上的记录的当前值与原来的缓冲区值进行比较。如果两值相同,则编辑结果写入原来的表;否则将发出错误信息。
4)启用表缓冲
可用CURSORSETPROP()函数启用表缓冲。
若要在当前数据区对多个记录启用保守式锁定,请使用如下函数和参数:
CURSORSETPROP(&Buffering&,4)
VFP在指针位置锁定记录。如果锁定成功,VFP将该记录放入缓冲区并允许编辑。使用TABLEUPDATE()命令把缓冲记录写入原来的表。
若要在当前数据区对多个记录启用开放式锁定,请使用如下函数和参数:
CURSORSETPROP(&Buffering&,5)
在发出TABLEUPDATE()命令之前,VFP把记录写入缓冲区并允许编辑,然后VFP对缓冲区内的每一个记录执行下列操作:
* 对每一个已编辑记录锁定。
* 一旦锁定成功,即对磁盘上的每一个记录的当前值与原来的缓冲区值进行比较。
* 如果两值相等,将编辑结果写入原来的表。
* 如果两值不相等,给出错误信息。
在启用表缓冲之后,VFP只在TABLEUPDATE()命令之后更新。
5)在表缓冲区中追加和删除记录
可以在启用表缓冲之后追加和删除记录。追加的记录将添加到缓冲区的末尾。要访问缓冲区中所有的记录,请使用RECNO()函数,RECNO()函数根据追加到表缓冲区中的记录情况返回序列负值。比如,如果您启用了表缓冲,编辑记录7、8、9,然后追加三个记录,则此时缓冲区将包含RECNO()的值为7、8、9、-1、-2和-3。
只能使用TABLEREVERT()命令从缓冲区中删除追加记录。对于任何追加的记录,当维护序列时,TABLEUPDATE()和TABLEREVERT()都删除RECNO()为负值的记录。
在使用表缓冲时,您可以用带负RECNO()值的GO 命令来访问指定的追加记录。比如,对于前面的示例,可以输入:
GO 7 &&转到第一个缓冲记录
GO -3 &&转到第六个缓冲记录(第三个追加记录)
若要追加记录到表缓冲区,可在启用表缓冲后使用APPEND或APPEND BLANK命令。追加的记录具有序列递增的负RECNO()值。
若要从表缓冲区中移去追加的记录,可以:
a、使用带负值的GO命令将记录指针定位到要删除的记录。
b、使用DELETE命令将该记录加上删除标记。
c、使用TABLEREVERT()函数将该记录从缓冲区中移去。
注意:TABLEREVERT()函数也影响到被删除和更改的行的状态。
若要从表缓冲区中移去所有追加的记录,可使用带(.T.)值的TABLEREVERT()函数。TABLEREVERT()函数把追加的记录从表缓冲区中移去,而不将这些记录写入表。TABLEUPDATE()命令将所有当前的记录写入一个表,包括已经打上删除标记的记录。
二、更新数据
可以使用缓冲、事务或视图更新数据。
1、使用缓冲进行更新
在选择缓冲方法和锁定类型之后,就可以启用记录或表缓冲。若要启动缓冲,请选择下列选项之一:
* 在“表单设计器”中,设置表单数据环境中的临时表的BufferModeOverride属性。
* 在代码中设置Buffering属性。
例如,将下面的代码放进表单的init过程中,可以启用保守式记录缓冲:
CURSORSETPROR(&Buffering&,2)
然后将进行更新操作的代码放在控件的适当方法程序代码中。
要把编辑结果写入原来的表,可以使用TABLEUPDATE()。由于规则限制,造成对表的更新操作失败之后,要取消编辑结果,可以使用TABLEREVERT()命令。TABLEREVERT()即使在没有明确启用表缓冲的情况也都有效。
下面的示例说明在启用保守式记录缓冲的情况下,如何更新记录:
OPEN DATABASE testdata 在表单的init代码中,打开表单启用保守式记录缓冲。
USE customers
=CURSORSETPROP(&Buffering&,2)
lModified=.F.
FOR nFieldNum=1 to FCOUNT() 遍历字段,检查是否有字段进行了修改。注意:此段
IF GETFLDSTATE(nFieldNum)=2 代码可以写在“更新”或“保存”按钮的click事件中。
lModified=.T.
IF lModified 定位下一个已修改的记录。
nResult=MESSAGEBOX;
(&记录已经被修改,是否保存?&),;
4+32+256,&数据更新&)
IF nResult=7 提交当前值并为用户提供选择,询问是否还原对当前
=TABLEREVERT(.F.) 字段所做的修改。
SKIP SKIP确保最后一个修改内容也已写入。
=MESSAGEBOX(&已经到最后&)
THISFORM.refresh
2、事务管理更新
即便使用缓冲,事情有时也会出错。如果希望保护更新操作,并从一整段代码中还原回来,可以使用事务。
在应用程序中添加事务所提供的保护机制,超过了记录缓冲和表缓冲提供的保护功能,它将整段代码作为一个受保护的、可恢复的单元。可以嵌套使用事务,并用它保护已操作的缓冲更新。VFP事务只能用于数据库中的表和视图。
1)包装代码段
事务类似一层外包装,用来缓冲对内存或磁盘的数据更新操作,而不直接对数据库进行更新。实际的数据库更新在事务结束后进行。如果由于某种原因,系统不能执行对数据库的更新操作,就可以回滚整个事务,而不执行任何更新。
注意:在同一数据工作期的事务中,忽略事务外面的缓冲更新操作。
2)控制事务处理的命令
VFP提供了三个命令和一个函数控制事务处理:
若要 请使用此命令
——————————————————————————————————
初始化一个事务 BEGIN TRANSACTION
确定当前事务的等级 TXNLEVEL()
取消最近一条BEGIN TRANSACTION语句 ROLLBACK
以来所做的全部修改
锁定记录,将最近一条BEGIN TRANSACTION END TRANSACTION
语句以来对数据库中表所做的全部修改
写入磁盘,然后解锁记录
您可以使用事务缓冲对以下文件进行修改:表、结构化的.CDX文件以及数据库表相关的备注文件。涉及内存变量和其他对象的操作不属于事务,因此不能回滚这些操作。
hsxsmz回复于12日18点29分 
你需要在路由器上影射VPN的端口
走过初夏回复于12日18点44分 
十豆三 大大 说的很清楚了.....
meimei100918回复于12日18点58分 
感觉不如用SQL SERVER方便。
另外你在另一个帖中说了如何加密码访问。
应该可以这样:在服务器上设置登录或访问用户及密码。
如果没有用户及密码是不能登录到共享目录的,这个可以在局域网中模拟。即联网方式设置“访问本机要填用户名和密码”,参考组策略。
然后每次启动软件,在程序中这外用户及密码登录服务器(可用MyFll.Fll或API),登录后就有权限访问共享目录了,再用USE \\IP ..方式打开,操作。
VFP的其他话题...
热门脚本语言:

我要回帖

更多关于 网店综合管理系统 的文章

 

随机推荐