回 帖 发 新 帖 刷新版面

主题:[回答]单机程序如何升级到客户/服务器程序?和VFP程序如何运行于服务器?的老问题!

这个问题在本论坛讨论了尽两年还没结帖,还有人问,真是不可理解!所以发一新帖回答大家!

答:masachik 的问题

我来从ABC开始说起起吧...因为我有同样的经历..(曾经成功用VFP开发过80个网络工作站的商业运用系统)...

A:指定一台电脑SERVER做文件服务器,设定一盘符下的目录存放“数据库表”和“自由表”。并设成共享。
  (例如:D:\USER\USER\  下面的文件为 *.DBF *.CDX *.DBC 等等) 
B:另外几台USER1、USER2、USER3、USERx...电脑为工作站,并影射同盘符一路径到文件服务器的共享。
    (例如:F:---->  \\SERVER\USER 这样 USER1...x的F:盘就是F:\USER\ 下面的文件为 *.DBF *.CDX *.DBC 等等) 
C:将单机版程序中所有和数据库相关的路径都批量改为网络路径。
  (例如:F:\USER\)
D:如对库没有“追加”“修改”“物理删除”等操作的可修改设为“共享”打开即可,否则操作前必须增加锁库处理程序,或要设为“独占”打开。对记录“修改”的可只锁记录。
E:对多个工作站同时突发修改同一条记录时,由于“数据库表”和“自由表”不同于SQL,没有突发请求修改的自动缓冲列队存储功能,所以你只能设时间周期循环锁定记录才能实现“修改”等操作。
F:所有对库和记录的操作必须设定“状态”返回码以校验操作是否成功,处理好数据的一致性。并给或者告知用户相应的处理提示!
  如果你做到以上几点,那么恭喜你的单机版软件就已升级为网络版了。。。(另外你还没有用到SQL数据库 所以没有楼上那些说的那么难。。只要你去多试。。。)。。。你如要做得更好。。那你就多与我联系!。。。。

答:nhcherry 的问题(在数据库文件夹不共享的情况下能否指定服务器IP取存数据呢?)

  在数据库文件夹不共享的情况下,不能访问到数据文件,要设为共享才行,可以用IP地址影
射,(例如:F:---->  \\192.168.1.123\USER 这样 USER1...x的F:盘就是F:\USER\ 下面的文件为 *.DBF *.CDX *.DBC 等等)如果你一定要“不共享”又要存取及共用数据库的话,我也有一个办法,那就是“用Winsock控件在VFP中进行编程”给个“示范代码”你参考,如你感兴趣我可进一步。。。

实现代码  

1.客户端  

■表单的 Init 事件:  

public strData 
strData = "" 
thisform.tcpClient.RemoteHost = "192.168.1.123" 
thisform.tcpClient.RemotePort = 1001  

■“连接”按钮.Click 事件  

thisform.tcpClient.object.Connect("192.168.1.123",1001) 
this.Enabled = .f.  

■TcpClient.DataArrive 事件  

*** ActiveX Control Event *** 
LPARAMETERS bytestotal 
thisform.tcpClient.Object.GetData(@strData) 
thisform.txtOutput1.Value = strData  

■TxtSend1.InteractiveChange 事件  

thisform.tcpClient.Object.SendData(this.Value)  

2.服务端  

■表单的 Init 事件:  

public strData 
strData = "" 
thisform.tcpServer.Object.LocalPort = 1001 
thisform.tcpServer.Object.Listen  

■TcpServer.ConnectionRequest 事件  

*** ActiveX Control Event *** 
LPARAMETERS requestID 
If thisform.tcpServer.OBJECT.State <> 0 
thisform.tcpServer.OBJECT.Close 
endif 
thisform.tcpServer.OBJECT.Accept(requestID) 常数 值 说明  
sckClosed 0 关闭(默认)  
sckOpen 1 打开  
sckListening 2 侦听  
sckConnected 7 已连接  
sckError 9 发生了错误  
  

■TcpServer.DataArrive 事件  

*** ActiveX Control Event *** 
LPARAMETERS bytestotal 
thisform.tcpClient.Object.GetData(@strData) 
thisform.txtOutput1.Value = strData  

■TxtSendData.InteractiveChange 事件  

thisform.tcpServer.Object.SendData(this.Value)

回复列表 (共15个回复)

11 楼

两位都高手,对VFP如此深入真是难能,未知两位对于有用VFP写ERP/MRP程序见解如何?
我们公司的这一套软件大概供60人使用,众数据库总容量大概6G左右,用terminal 方式接入,一到高峰期可能要用上几分钟才能找开一个画面,在历经数年磨难,经该出版公司人员多次改版,恐怕已经进入过百万投资了,使用还是不尽如意.各位对此类情况又有何高见?

12 楼

nhcherry 是最早回我的话的,那我就先回她的话吧!(先给点基础你垫底,后面再跟你讲ERP/MRP程序问题!)

    记得上面您问我"用Winsock控件在VFP中进行编程"的吗?其实那只是一个基础的东西,我也不建议你去尝试,(因为还有很多代码要您去"研究"工作效率太低)除非您一心想"钻"下去。
  “一定要“不共享”又要用VFP存取共用数据库”也有一个现成的办法,那就是用VFPWeb,VfpWeb是一个VFP的Web接口系统(没有共享,只开了一个80口),他能完全解决上面的问题给段代码和运行
以及结果的截图给你看:
DBF数据库
[img]http://www.enhor.com/down_data/DBF数据库.jpg[/img]

PRG代码
[img]http://www.enhor.com/down_data/PRG代码.jpg[/img]

ASP代码
[img]http://www.enhor.com/down_data/ASP代码.jpg[/img]

提交页面
[img]http://www.enhor.com/down_data/提交页面.jpg[/img]

返回结果
[img]http://www.enhor.com/down_data/返回结果.jpg[/img]

  您看!反应都是毫秒级!这只是一个开头。。。您有兴趣再继续聊。。。。

13 楼

好麻烦,还是VFP+SQL SERVER舒服,保密性好,功能强大,安全

14 楼

回10楼 moz 问题!

    1、netbox 是代替iis提供WEB服务的。

  2、指定一目录比如 C:\Inetpub\wwwroot NETBOX会自动把底下的文件如*.asp *.html 等文件目录封装在一个EXE文件里,

       但要修改的数据文件目录不要包括进去(如 *.mdb *.dbf *.mdc等)。
  
  3、“不用按照netbox语法重新写”,如过你的asp没“调用过IIS内核”那就一点也不用改。

  4、只要有了IP地址开个口,便可以成功连接操作数据库,是这样子的。

  5、安全密码验证问题!登录时由连接数据库验证等!都是按原来用IIS时的asp方法来处理,一点也不用改!

你下一个试试就清楚了!

15 楼

[quote]好麻烦,还是VFP+SQL SERVER舒服,保密性好,功能强大,安全[/quote]

13楼的 lbscyb 您好!

     如果可能,我想请您讲讲您的看法.....

我来回复

您尚未登录,请登录后再回复。点此登录或注册