让大家看看一些代码

coolyylu 2003-09-29 01:24:03
*- 数据库的操作以do开始
DEFINE CLASS DataCommand As Custom
FUNCTION Update(toDS As Record OF "DataSet.prg") As Boolean

ENDFUNC
FUNCTION Insert(toDS As Record) As Boolean

ENDFUNC

*- 删除记录
FUNCTION Delete(toDS As Record) As Boolean
ENDFUNC
FUNCTION Select(otbl As Table OF "dataset.prg") As Boolean

ENDFUNC
ENDDEFINE

DEFINE CLASS doProduct As DataCommand OF "dbcommand.prg"
ENDDEFINE



DEFINE CLASS Table As Collection
Table = ""
Caption = ""
Key = ""
*- 记录集合的类
DataRowClass = ""
Where = ""
RowCount = 0
FUNCTION BuildDataSet()

SELECT (This.Table)
GO TOP
LOCAL mi As Long
LOCAL oRow As Object
LOCAL cFD As String
LOCAL oFD As Field OF "dataset.prg"
LOCAL oDataRow As Record OF "dataset.prg"
This.RowCount = RECCOUNT(This.Table)
*- 形成记录对象
FOR mi=1 TO This.RowCount
SCATTER NAME oRow
oDataRow = NEWOBJECT(This.DataRowClass ,This.ClassLibrary)
oDataRow.RowIndex = RECNO()
FOR EACH oFD IN oDataRow.Controls
cFD = oFD.Name
oFD.Value = oRow.&cFD
NEXT
This.Add(oDataRow ,EVALUATE("oDataRow." + oDataRow.KEY + ".Value"))
SKIP 1
ENDFOR
GO TOP
ENDFUNC

FUNCTION ToCursor() As Boolean
ENDFUNC
FUNCTION ToXml() As Boolean
ENDFUNC
ENDDEFINE
*- 数据记录的类以rrd开头命名类
DEFINE CLASS Record As Custom
Table = ""
Caption = ""
Key = ""
RowIndex = 0

ENDDEFINE

*- 产品表
*- 用于描述产品的类型
DEFINE CLASS rrdProduct As Record
Table = "产品库"
Caption = "产品库"
Key = "编号"
ADD OBJECT 编号 As Field WITH Caption="编号" ,len=12 ,type="nchar" ,Default="" ,Primary=.T.
ADD OBJECT 型号 As Field WITH Caption="型号" ,len=30 ,type="nchar" ,Default=""
ADD OBJECT 别名 As Field WITH Caption="别名" ,len=20 ,type="nchar" ,Default=""
ADD OBJECT 价格 As Field WITH Caption="价格" ,len=6 ,Decimal = 2 ,type="numeric" ,Default=0.00
ADD OBJECT 数量 As Field WITH Caption="数量" ,len=10 ,type="int" ,Default= 0
ADD OBJECT 厂家 As Field WITH Caption="厂家" ,len=40 ,type="nchar" ,Default=""
ENDDEFINE

DEFINE CLASS Field As Custom
*- 字段类型
Type = ""
*- 字段长度
Len = 0
*- 小数点
Decimal = 0
*- 值
Value = ""
*- 标题
Caption = ""

*- 初始化值
Default = ""
*- 次字段不允许更新
noUpdate = .F.
*- 关键字段
Primary = .F.
*- 只读
ReadOnly = .F.

*- 是否是密码
Password=.F.
*- 是否被修改
lEdit = .F.
ENDDEFINE

...全文
38 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
coolyylu 2004-01-06
  • 打赏
  • 举报
回复
vfp的oo已经很强了。还是看理解。

你指的接口是只不使用继承而使用操作接口的方式?接口对于c++(也提供了接口) ,object pascal ,java来说只是更好的避免多重继承带来的麻烦 ,也避免继承泛滥带来的灾难。为什么要这三个语言在内部操作类的时候要使用接口?因为这三种语言都在实现oo的时候赋予了太多的oo辅助特性 ,为什么c++学习oo比较困难 ,如重载 、友元、虚拟函数等辅助实现方法。而这三种语言都是强类型的,所以必须使用重载这种方式避免 ,函数命名等麻烦
每一种语言发展过程中不会贸然出现无用的特性和附加特性。
vfp作为非强制性强类型语言 ,一个函数的输入参数可以是任何一种类型的 ,这一点上,就可以不需要重载了。
由于vfp实现oo三个特性的简单性 ,继承对于vfp实现oo来说,不会造成泛滥性的灾难。操作接口不是需要,当然vfp可以操作接口,不过是com接口,请看文档:)。
我个人认为ms的vfp开发小组不应该为vfp添加太多类似java,object pascal的oo辅助特性。
除了vfp.exe和vfp*.dll之外 ,vfp其他都是开放的(源代码)。如code reference ,各种向导 ,object browser ,class browser 等大多数工具都是提供源代码的。只是vfp.exe的开发性 ,局限于vfp在语言方便提供了函数,满足编写第三方vfp的开发工具,如vpm ,vpe ,wc ,afp等。看看aprocinfo ,editsource ,asel ,build project等函数指令就知道了。vfp最核心部分是vfp的编译器 ,估计就像object pascal的编译器,不会公布。
你说vfp的核心不开放 ,我认为还没有了。

至于vfp.net估计可能是vfp10或者以后的版本 。vfp7的alpha版本就在vs.net里面,不过没有成形。对于vfp来说,现在的vfp8的编辑器很好用了,轻量级型的编辑器。我个人来说不是很喜欢vs.net的ide环境。就像我喜欢eclipse ,而不喜欢jbuilder一样。
westbulls 2004-01-05
  • 打赏
  • 举报
回复
vfp在oo方面还应该加强,缺少了一些比较好的部分,比如接口,期待MS可以将vfp写的更强健一点,最好可以给用户多开放一些核心的部分,最好用.net framework将其重新改写,期待vfp.net出世.
coolyylu 2004-01-05
  • 打赏
  • 举报
回复
to :summerlove1(陈勇)
让大家看看vfp在oo的某一方面的表现:)。你需要了解oo的基本概念,有一些oops的经验以后才可能看懂。
summerlove1 2004-01-04
  • 打赏
  • 举报
回复
楼主,我一点都看不懂也,不知怎样才学好呢,我是才学VFP的
YYMMVV 2003-12-05
  • 打赏
  • 举报
回复
Good
yangfanatcsdn 2003-12-05
  • 打赏
  • 举报
回复
根据xxxx权威定义:
类 = 数据 + 其上的操作
一只小飞鱼 2003-12-04
  • 打赏
  • 举报
回复
楼主 我一点也看不懂 我该怎么学习啊 尤其是对FUNCTION 我很不清楚 我想从学习C开始
我的起点对吗 对类的定义我也是很不清楚,我该怎么办啊!神啊救救我吧!
fbilo 2003-11-10
  • 打赏
  • 举报
回复
FUNCTION Update(toDS As Record OF "DataSet.prg") As Boolean 这是一个典型的COM部件中函数的写法,默认情况下,VFP做成的COM部件,其函数返回的值在COM看来都是Variant类型的,而用这样的as Boolean写法可以让COM识别出这个返回值是一个逻辑型的值。

AS Record OF "DataSet.prg"的写法是VFP7时新增的一个功能,可以让你在建立类的时候直接指定类库所在。
Iamclq 2003-11-03
  • 打赏
  • 举报
回复
请问这句话如何解释:

FUNCTION Update(toDS As Record OF "DataSet.prg") As Boolean

是否是声明返回值为逻辑型的函数,括号中是何含义,请赐教!
yangsm 2003-10-31
  • 打赏
  • 举报
回复
我也来学习!
wwle 2003-10-31
  • 打赏
  • 举报
回复
呵呵。
我落伍了。
我还在vfp6徘徊。
try catch....endtry 那个动动是不是也出来了。我喜欢她
coolyylu 2003-10-27
  • 打赏
  • 举报
回复
collection是vfp8的新类。
HsyPrg 2003-10-25
  • 打赏
  • 举报
回复
不知楼主,collection是一个什么类,在VFP7中好像没有此基类啊,
望不啬指教!
mgan 2003-10-01
  • 打赏
  • 举报
回复
GOOD
coolyylu 2003-09-30
  • 打赏
  • 举报
回复
scatter name可以建立对象,这种对象就只有字段名称和值,欠缺其他的用途。上面的代码是模拟vb.net编写多层系统的方式。
net_steven 2003-09-30
  • 打赏
  • 举报
回复
coolyylu (将来是我) 好!

有些新意.vfp里catter name将记录与对象建立了转化关系,如果能有功能将
cursor与collection对象建立转化关系就不用这么繁琐了.
zhongyj 2003-09-30
  • 打赏
  • 举报
回复
關于面向對象編程
heavenmusic 2003-09-29
  • 打赏
  • 举报
回复
楼主,,说一下,有关什么???

2,722

社区成员

发帖
与我相关
我的任务
社区描述
VFP,是Microsoft公司推出的数据库开发软件,用它来开发数据库,既简单又方便。
社区管理员
  • VFP社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧