FOXPRO表中有三列数据,分别存储着 A: 地区,B:销售量,C:销售月份 的数据 想实现的查询表格如下:
地区销售量销售月份上海10001上海20002北京30002请问在foxpro中如何通过查询语句实现。不要意思,问题的描述有问题,重新描述如下:数据表结构如下:地区销售量...
地区 销售量 销售月份
上海 1000 1
上海 2000 2
北京 3000 2
请问在foxpro中如何通过查询语句实现。
不要意思,问题的描述有问题,重新描述如下:
数据表结构如下:
地区 销售量 销售月份
上海 100 1
上海 200 1
上海 200 2
北京 300 2
北京 500 2
北京 500 1
想要的查询结果是:
1 2
上海 300 200
北京 500 800 展开
上海 1000 1
上海 2000 2
北京 3000 2
请问在foxpro中如何通过查询语句实现。
不要意思,问题的描述有问题,重新描述如下:
数据表结构如下:
地区 销售量 销售月份
上海 100 1
上海 200 1
上海 200 2
北京 300 2
北京 500 2
北京 500 1
想要的查询结果是:
1 2
上海 300 200
北京 500 800 展开
2个回答
展开全部
1.3 Visual FoxPro编程基础
--------------------------------------------------------------------------------
VFP是由FoxPro发展而来,并且根据“可视化编程”的需要,增加了一些新的操作。它的语句、函数和语法规则与Xbase(如dBASE、FoxBase、FoxPro)语言基本上是兼容的,而且功能更加强大。
一、数据和数据类型
1.数据的分类
数据是计算机程序处理的对象,也是运算产生的结果。
按数据的类型分类:数值型数据、字符型数据、逻辑型数据等。
按数据的处理层次分类:常量、变量、函数和表达式。
2.数据的类型
数据类型是数据的基本属性。对数据进行操作的时候,只有同类型的数据才能进行操作,若对不同类型的数据进行操作,将被系统判为语法出错。
(1)字符型(Character):由字母(汉字)、数字、空格等任意ASCII码字符组成。
字符数据的长度为0~254,每个字符占1个字节。
(2)货币型(Currency):在使用货币值时,可以使用货币型来代替数值型。
货币型数据取值的范围是:
-922337203685477.5807~922337203685477.5807
小数位数超过4位时,系统将进行四舍五入的处理。每个货币型数据占8个字节。
(3)日期型(Date):用以保存不带时间的日期值。
日期型数据的存储格式为“yyyymmdd”其中yyyy为年,占4位,mm为月,占2位,dd为日,占2位。
日期型数据的表示有多种格式,最常用的格式为mm/dd/yyyy。
日期型数据取值的范围是:公元0001年1月1日一公元9999年12月31日。
(4)日期时间型(DateTime):用以保存日期和时间值。日期时间型数据的存储格式为 “yyyymmddhhmmss”其中yyyy为年,占4位,mm为月,占2位,dd为日,占2位,hh为时间中的小时,占2位,mm为时间中的分钟,占2位,ss为时间中的秒,占2位。
日期时间型数据中可以只包含一个日期或者只包含一个时间值,缺省日期值时,系统自动加上1999年12月31日,省略时间值时,则自动加上午夜零点。
(5)逻辑型(Logical):用于存储只有两个值的数据。存入的值只有真(.T.)和假(.F.)两种状态,占1个字节。
(6)数值型(Numeric):用来表示数量,它由数字0~9、一个符号(+或-)和一个小数点(.)组成。数值型数据的长度为1~20,每个数据占8个字节。
数值型数据取值的范围是:
-0.9999999999E+19~0.9999999999E+20
以下数据类型只能被用于数据表中的字段:
(7)双精度型(Double):用于取代数值型,以便能提供更高的数值精度。双精度型只能用于数据表中字段的定义,它采用固定存储长度的浮点数形式。与数值型不同,双精度型数据的小数点的位置是由输入的数据值来决定的。每个双精度型数据占8个字节。
(8)浮点型(Float):只能用于数据表中字段的定义,包含此类型是为了提供兼容性,浮点型在功能上与数值型等价。
(9)通用型(General):用于存储OLE对象,只能用于数据表中字段的定义。该字段包含了对OLE对象的引用,而OLE对象的具体内容可以是一个电子表格、一个字处理器的文本、图片等,是由其他应用软件建立的。
(10)整型(Integer):用于存储无小数部分的数值,只能用于数据表中字段的定义。在数据表中,整型字段占用4个字节,取值范围是:
-2147483647~2147483647
整型以二进制形式存储,不像数值型那样需要转换成ASCII字符存储。
(11)备注型(Memo);备注型用于字符型数据块的存储,只能用于数据表中字段的定义。在数据表中,备注型字段占用10个字节,并用这10个字节来引用备注的实际内容。实际备注内容的多少只受内存可用空间的限制。
备注型字段的实际内容变化很大,不能直接将备注内容存在数据表(.DBF)文件中。
系统将备注内容存放在一个相对独立的文件中,该文件的扩展名为.DBT。
由于没有备注型的变量,所以对备注型字段的处理,需转换成字符型变量,然后使用字符型函数进行处理。
二、常量与变量
在程序的运行过程中,把需要处理的数据存放在内存储器中,称始终保持不变的数据为“常量”,称存放可变数据的存储器单元为“变量”,其中的数据称为变量的值。
1.常量
常量是一个命名的数据项,在整个操作过程中其值保持不变。如PI值,即3.1415926535是数值型常量。 VFP定义了如下类型的常量:
数值型常量,如:20,16,100,1
字符型常量,用单引号或双引号括起来的字符串,如:"ABCD"
逻辑型常量,只有两种:.T.和.F.
日期型常量和日期时间型常量,如:{^1999-04-22},{^1999-04-24 10:00am}
2.变量
VFP有3种形式的变量:
内存变量——存放单个数据的内存单元
数组变量——存放多个数据的内存单元组
字段变量——存放在数据表中的数据项
每个变量都有一个名称,叫做变量名,VFP通过相应的变量名来使用变量。变量名的命名规则是:
(1)以字母、数字及下划线组成,中文VFP可以使用汉字作变量名。
(2)以字母或下划线开始,中文VFP可以汉字开始。
(3)长度为1~128个字符,每个汉字占2个字符。
(4)不能使用VFP的保留字。
变量的作用域包括定义它的过程以及该过程所调用的子过程范围。
三、运算符与表达式
运算是对数据进行加工的过程,描述各种不同运算的符号称为运算符,而参与运算的数据称为操作数。表达式用来表示某个求值规则,它由运算符和配对的圆括号将常量、变量、函数、对象等操作数以合理的形式组合而成。
表达式可用来执行运算、操作字符或测试数据,每个表达式都产生唯一的值。表达式的类型由运算符的类型决定。在VFP中有5类运算符和表达式:
算术运算符和算术表达式
字符串运算符和字符串表达式
日期运算符和日期表达式
关系运算符和关系表达式
逻辑运算符和逻辑表达式
1.算术运算符与算术表达式
算术表达式也称数值型表达式,由算术运算符、数值型常量、变量、函数和圆括号组成,其运算结果为一数值。例如:50*2+(70—6)/8的运算结果为108.00。算术表达式的格式为:
<数值1><算术运算符1><数值2>[<算术运算符2><数值3>…]
(1)算术运算符。
VFP提供的算术运算符如表1。1所示。在这6个算术运算符中,除取负“-”是单目运算符外,其他均为双目运算符。它们运算的含义与数学中基本相同。
表1.1 算术运算符
运算符 名称 说 明
+ 加 同数学中的加法
- 减 同数学中的减法
* 乘 同数学中的乘法
/ 除 同数学中的除法
^或** 乘方 同数学中的乘方,如4^3表示43
% 求余 12%5表示12除以5所得的余数2
算术运算符的优先权依次为:
( ) → ^、** → *、/ → % → +、-
(2)表达式的书写规则。
算术表达式与数学中的表达式写法有所区别,在书写表达式时应当特别注意:
每个符号占1格,所有符号都必须一个一个并排写在同一横线上,不能在右上角或右下角写方次或下标。例如:23要写成2^3,Xl十X2要写成X1+X2。
原来在数学表达式中省略的内容必须重新写上。例如:2X要写成2*X。
所有括号都用小括号(),且括号必须配对。例如:3[x+2(y+z)]必须写成3*(x+2*(y+z))。
要把数学表达式中的有些符号,改成VFP中可以表示的符号。例如:要把2πr改为2*pi*r。
2.字符串运算符与字符串表达式
一个字符串表达式由字符串常量、字符串变量、字符串函数和字符串运算符组成。它可以是一个简单的字符串常量,也可以是若干个字符串常量或字符串变量的组合。VFP提供的字符运算符有两个(其运算级别相同),如表1-2所示。
表1-2 字符运算符
运算符 名称 说明
+ 连接 将字符型数据进行连接
- 空格移位连接 将前一数据尾部的空格移到后面数据的尾部
字符串表达式的格式为
<字符串1><字符串运算符1><字符串2>
[<字符串运算符2><字符串3>…]
例如:
"ABCl23"+"666xyz"连接后结果为:"ABCl23666xyz"
"计算机"+"世界" 连接后结果为:"计算机世界"
"ABC "-"DEFG" 连接后结果为:"ABCDEFG "
"ABC "+"DEFG" 连接后结果为:"ABC DEFG "
字符串表达式的值为字符串。
在字符串中嵌入引号,只需将字符串用另一种引号括起来即可。例如:
QM="'"
S=S+QM+ALLTRIM(THIS.Edit1.Value)+QM+","
3.日期时间运算符与日期时间表达式
日期型表达式由算术运算符“+、-”、算术表达式、日期型常量、日期型变量和函数组成。日期型数据是一种特殊的数值型数据,它们之间只能进行加“+”、减“-”运算。有下面3种情况:
两个日期型数据可以相减,结果是一个数值型数据(两个日期相差的天数)。例如:
{^1999/12/19}-{^1999/11/16}结果为数值型数据:33
一个表示天数的数值型数据可加到日期型数据中,其结果仍然为一日期型数据(向后推算的日期)。例如:{^1999/11/16}+33结果为日期型数据:{^1999/12/19}
一个表示天数的数值型数据可从日期型数据中减掉它,其结果仍然为一日期型数据(向前推算的日期)。例如:{^1999/12/19}-33 ,结果为日期型数据:{^1999/11/16}
VFP将无效的日期处理成空日期。
4.类与对象运算符
类与对象运算符专门用于实现面向对象的程序设计。有以下两种:
.——点运算符,确定对象与类的关系,以及属性、事件和方法与其对象的从属关系。
::——作用域运算符,用于在子类中调用父类的方法。
5.名表达式
在VFP中,许多命令和函数需要提供一个名。可在VFP中使用的名有:
表/.DBF文件名 、 表/.DBF别名 、 表/.DBF字段名 、 索引文件名、文件名、 内存变量和数组名、窗口名、 菜单名、表单名、 对象名、 属性名、 …
在VFP中定义一个名时,需要遵循以下原则:
名中只能使用字母或下划线开始。
名中只能使用字母、数字和下划线字符。
不能使用VFP的保留字。
名的长度可以为1—128个字符,但自由表中的字段名、索引标记名最多为10个字符。文件名按操作系统的规定。
名不是变量或字段,但是可以定义一个名表达式,以代替同名的变量或字段的值。
名表达式为VFP的命令和函数提供了灵活性。将名存放到变量或数组元素中,就可以在命令或函数中用变量来代替该名,只要将存放一个名的变量或数组元素用一对括号括起来。如:
STORE "CITY" TO a
REPLACE (a) WITH "Beijing"
字段名CITY被存放在变量a中,在使用REPLACE命令时,名表达式(a)将用字段名代替变量。这种方法称为间接引用。
四、函数
对于用户来说,程序设计语言中的函数与数学上的函数没有什么区别,使用函数要有参数(自变量),可以从函数得到一个返回的值(因变量)。而从程序设计的角度来看,函数是子程序的一种,它能完成一种特定的运算。
1.函数的分类
VFP的函数有两种,一种是用户自定义的函数,一种是系统函数。自定义函数由用户根据需要自行编写 , 系统函数则是由VFP提供的内部函数,用户可以随时调用。
VFP提供的系统函数大约有380多个,主要分为:数值函数、字符处理函数、表和数据库函数、日期时间函数、类型转换函数、测试函数、菜单函数、窗口函数、数组函数、SQL查询函数、位运算函数、对象特征函数、文件管理函数以及系统调用函数等14类。
2.常用函数
VFP提供了大量的系统函数供编程人员使用,下面列出常用的一些函数。
(1)数学函数
函数格式 说 明
ABS(N) 求N的绝对值
COS(N) 求N的余弦函数
EXP(N) 求N的e指数函数
INT(N) 取N的整数,对负数取较小的整数
LOG(N) 求N的自然对数
MAX(N1,N2) 求N1、N2中的最大者
MIN(N1,N2) 求N1、N2中的最小者
MOD(N1,N2) 求N1除以N2的余数
PI() 求圆周率
RAND(N) 产生0—1之间的随机数
ROUND(N1,N2) 按N2指定的小数位数求N1四舍五入后的值
SIGN(N) 求N的正负符号
SIN(N) 求N的正弦函数
SQRT(N) 求N的平方根
TAN(N) 求N的正切函数
(2)字符串函数
函数格式
说 明
ALLTRIM(C) 去掉C的前导空格和尾随空格
ASC(C) 求C中最左边一个字符的ASCII码值
AT(C1,C2) 返回C1在C2中出现的开始位置(整数值)
LEFT(C,n) 从字符串C的左边取长度为n的子串
LEN(C) 求字符串C长度
RIGHT(C,n) 从字符串C的右边取长度为n的子串
L0WER(C) 将字符串C中的大写字母转换为小写字母
SPACE(n) 返回n个空格字符组成的字符串
SUBSTR(C,n[,m]) 从字符串C中提取从n开始的m个字符的子串,若省略m则取n开始的所有字符
UPPER(C) 将字符串表达式中的小写字母转换为大写字母
(3)日期函数
函数格式 说 明
DATE() 系统当前日期
TIME() 系统当前时间
DATETIME() 系统当前日期和时间
DOW(D) 取日期表达式D的星期号(1为星期天)
YEAR(D) 取日期D的年份值
MONTH(D) 取日期D的月份值
DAY(D) 取日期D在月份中的天数值
HOUR(D) 取时间D中的小时数
MINUTE(D) 取时间D中的分钟数
SEC(D) 取时间D中的秒数
(4)类型转换函数
函数格式
说 明
CHR(ASCII码) 返回与ASCII码相应的字符
CTOD(C) 转换C表达式为对应的日期值
CTOT(C) 转换C表达式为对应的日期时间值
DTOC(D) 转换日期表达式D为字符串
STR(N,n,m) 转换数值表达式N为数字字符串
TTOC(D) 转换日期时间表达式D为字符串
VAL(C) 返回数字字符串C对应的数值
五、对象的属性、事件与方法
对象(object)在现实生活中是很常见的,如:一个人是一个对象,一台PC机是一个对象。如果将一台PC机拆开来看便有“显示器、机箱、软盘驱动器、硬盘、键盘、鼠标器…”,每一个又都是一个对象,即PC机对象是由多个“子”对象组成的。此时PC机又称为一个包容器(Container)对象。在可视化编程中,对象是应用程序的基本元素,常见的对象有表单、文本框、列表框等。
从可视化编程的角度来看,对象是一个具有属性(数据)和方法(行为方式)的实体。一个对象建立以后,其操作就通过与该对象有关的属性、事件和方法来描述。
1、对象的属性
属性(Propeny)是指对象的一项描述内容,用来描述对象的一个特性,不同的对象有不同的属性,而每个对象又都由若干属性来描述。在可视化编程中,常见的属性有标题(Caption)、名称(Name)、背景色(Backcolor)、字体大小(FontSize)、是否可见(Visible)等。通过修改或设置某些属性便能有效地控制对象的外观和操作。
属性值的设置或修改可以通过属性窗口来进行,也可以通过编程的方法在程序运行的时候来改变对象的属性。在程序中设置属性的一般格式是:
表单名.对象名.属性名=属性值
2.对象的事件
所谓事件(Event),是由VFP预先定义好的、能够被对象识别的动作,如单击(Click)事件、双击(DblClick)事件、装入(Load)事件、移动鼠标(MouseMove)事件等,不同的对象能识别的事件不全相同。对象的事件是固定的,用户不能建立新的事件。为此,VFP提供了丰富的内部事件,这些事件足以应付Windows中的绝大部分操作需要。
事件过程(Event Procudure)是为处理特定事件而编写的一段程序。当事件由用户触发(如C1ick)或由系统触发(如Load)时,对象就会对该事件作出响应(Respond)。响应某个事件后所执行的程序代码就是事件过程。
3.对象的方法
方法(Method)是与对象相关联的过程,但又不同于一般的Visual FoxPro过程。方法程序紧密地和对象连接在一起,并且与一般Visual FoxPro过程的调用方式也有所不同。
与事件过程类似,VFP的方法属于对象的内部函数,只是方法用于完成某种特定的功能而不一定响应某一事件,如添加对象(Addobject)方法、绘制矩形(Box)方法、释放表单(Release)方法等。方法也被“封装”在对象中,不同的对象具有不同的内部方法。VFP提供了百余个内部方法供不同的对象调用。与事件过程不同的是,根据需要可由用户自行建立新方法。
4.事件与方法的程序调用
事件过程由事件的激发而调用其代码,也可以在运行中由程序调用其代码,而方法的代码只能在运行中由程序调用。
在程序中调用事件代码的格式是:
表单名.对象名.事件名
在程序中调用对象方法的格式是
[[<变量名>]=]表单名.对象名.方法名
六、控件与对象
Visual FoxPro编程的最大特点,就是在可视的环境下以最快的速度和效率开发具有良好用户界面的应用程序,其实质就是利用VFP所提供的图形构件快速构造应用程序的输入输出屏幕界面。控件(Control)是某种图形构件的统称,如“标签控件”、“文本框控件”、“列表框控件”等,利用控件创建对象则是构造应用程序界面的具体方法。
1.常用控件和内部对象
常用控件由VFP的基类提供,共21个,每个控件用“表单控件”按钮表示,如表1-7所示(P17)。
2.表单对象
表单(Form)是应用程序的用户界面,也是进行程序设计的基础。各种图形、图像、数据等都是通过表单或表单中的对象显示出来,因此表单是一个容器对象。
在FoxPro的早期版本中表单被称为屏幕(Screen),在Visual Basic中则称为窗体。
(1)表单的结构。
VFP的表单具有和Windows应用程序的窗口界面相同的结构特征。一个典型的表单有图标、标题、极小化按钮、极大化按钮、关闭按钮、移动栏、表单体及其周围的边框。其中除了表单体之外的所有特征都可以部分或全部从表单中被删除。
(2)表单属性
在VFP中,表单的属性就是表单的结构特征。通过修改表单的属性可以改变表单的内常用的表单属性如表1—8所示。
属性名 作 用
AutoCenter 用于控制表单初始化时是否总是位于VFP窗口或其父表单的中央
BackColor 用于确定表单的背景颜色
BorderStyle 用于控制表单是否有边框:系统(可调)、单线、双线
Caption 表单的标题
Closable 用于控制表单的标题栏中的关闭按钮是否能用
ControlBox 用于控制表单的标题栏中是否有控制按钮
MaxButton 用于控制表单的标题栏中是否有极大化按钮
MinButton 用于控制表单的标题栏中是否有极小化按钮
Movable 用于控制表单是否可移动
TitleBar 用于控制表单是否有标题栏
WindowState 用于控制表单是极小化、极大化还是正常状态
WindowType 若表单是模式表单,则用户在访问windows屏幕中其他任何对象前必须关闭该表单
(3)表单的事件与方法。
就像属性那样,只有部分的表单事件与方法经常被使用,很多事件与方法很少被使用,除非你在编写一个非常复杂的应用程序。可以在代码窗口的“过程”下拉列表框中看到所有表单事件与方法的列表,也可以在“属性”窗口的“方法程序”选项卡中看到所有表单事件与方法的列表。
下面只列举那些最常用的事件与方法。
常用的表单事件:
Load事件——当表单被装入内存时发生;
Init事件——当表单被初始化时发生;
Activate事件——当表单被激活时发生。
上述事件被激发的顺序为Load、Init、Activate。
Destroy事件——当表单被释放时发生;
Unload事件——当表单被关闭时发生。
上述事件被激发顺序为Unload、Destroy。
Resize事件——当用户或程序去改变表单的大小时
发生。
常用的表单方法:
Hide方法——隐藏表单;
Show方法——显示表单;
Release方法——释放表单;
Refresh方法——刷新表单。
3.对象的引用
(1)对象的包容层次。
VFP中的对象根据它们所基于的类的性质可分为两类:容器类对象和控件类对象。
容器类对象可以包含其他对象,并且允许访问这些对象,例如表单集、表单、表格等控件类对象只能包含在容器对象之中,而不能够包含其他对象,例如命令按钮、复选框等。表1-9(P20)列出了每种容器类对象所能包含的对象。
(2)对象的引用。
作为应用程序的用户界面,表单上可以包含许多对象,而这些对象又有可能具有互相包含的层次关系。若要引用一个对象,需要知道它相对于容器层次的关系。例如,如果要在表单集中处理一个表单的控件,则需要引用表单集、表单和控件。
1)绝对引用:通过提供对象的完整容器层次来引用对象。
若要使表列中的控件无效,需要提供以下地址:
Formset.Form.PageFrame.Page.Grid.Column.Control.Enabled=.F.
2)相对引用:在容器层次中引用对象时,可以通
过快捷方式指明所要处理的对象。
例如:THISFORMSET.Frml.Cmdl.Caption="关闭"
表示将本表单集的名为Fnnl的表单中的Cmdl对象的标题(Caption)属性设置为"关闭"。
THISFORM.Cmdl.Caption="关闭"
表示将本表单的名为Cmdl对象的标题(Caption)属性设置为"关闭"。
THIS.Caption=”关闭”
对于需要改变标题的控件,表示将本对象的标题(Caption)属性设置为"关闭"。
THIS.Parent.BackColor=RGB(192,0g0)
表示将本对象的父对象的背景色设置为暗红色。
表1—10列出了一些属性和关键字,这些属性和关键字允许更方便地从对象层次中引用对象。
表1-10 引用对象的属性和关键字
属性或关键字 引 用
ActiveControl 当前活动表单中具有焦点的控件
ActiveForm 当前活动表单
ActivePage 当前活动表单中的活动页
Parent 该对象的直接容器
THIS 该对象
THISFORM 包含该对象的表单
THISFORMSET 包含该对象的表单集
说明:只能在方法程序或事件过程中使用THIS、
THISFORM和THISFORMSET。
希望采纳
--------------------------------------------------------------------------------
VFP是由FoxPro发展而来,并且根据“可视化编程”的需要,增加了一些新的操作。它的语句、函数和语法规则与Xbase(如dBASE、FoxBase、FoxPro)语言基本上是兼容的,而且功能更加强大。
一、数据和数据类型
1.数据的分类
数据是计算机程序处理的对象,也是运算产生的结果。
按数据的类型分类:数值型数据、字符型数据、逻辑型数据等。
按数据的处理层次分类:常量、变量、函数和表达式。
2.数据的类型
数据类型是数据的基本属性。对数据进行操作的时候,只有同类型的数据才能进行操作,若对不同类型的数据进行操作,将被系统判为语法出错。
(1)字符型(Character):由字母(汉字)、数字、空格等任意ASCII码字符组成。
字符数据的长度为0~254,每个字符占1个字节。
(2)货币型(Currency):在使用货币值时,可以使用货币型来代替数值型。
货币型数据取值的范围是:
-922337203685477.5807~922337203685477.5807
小数位数超过4位时,系统将进行四舍五入的处理。每个货币型数据占8个字节。
(3)日期型(Date):用以保存不带时间的日期值。
日期型数据的存储格式为“yyyymmdd”其中yyyy为年,占4位,mm为月,占2位,dd为日,占2位。
日期型数据的表示有多种格式,最常用的格式为mm/dd/yyyy。
日期型数据取值的范围是:公元0001年1月1日一公元9999年12月31日。
(4)日期时间型(DateTime):用以保存日期和时间值。日期时间型数据的存储格式为 “yyyymmddhhmmss”其中yyyy为年,占4位,mm为月,占2位,dd为日,占2位,hh为时间中的小时,占2位,mm为时间中的分钟,占2位,ss为时间中的秒,占2位。
日期时间型数据中可以只包含一个日期或者只包含一个时间值,缺省日期值时,系统自动加上1999年12月31日,省略时间值时,则自动加上午夜零点。
(5)逻辑型(Logical):用于存储只有两个值的数据。存入的值只有真(.T.)和假(.F.)两种状态,占1个字节。
(6)数值型(Numeric):用来表示数量,它由数字0~9、一个符号(+或-)和一个小数点(.)组成。数值型数据的长度为1~20,每个数据占8个字节。
数值型数据取值的范围是:
-0.9999999999E+19~0.9999999999E+20
以下数据类型只能被用于数据表中的字段:
(7)双精度型(Double):用于取代数值型,以便能提供更高的数值精度。双精度型只能用于数据表中字段的定义,它采用固定存储长度的浮点数形式。与数值型不同,双精度型数据的小数点的位置是由输入的数据值来决定的。每个双精度型数据占8个字节。
(8)浮点型(Float):只能用于数据表中字段的定义,包含此类型是为了提供兼容性,浮点型在功能上与数值型等价。
(9)通用型(General):用于存储OLE对象,只能用于数据表中字段的定义。该字段包含了对OLE对象的引用,而OLE对象的具体内容可以是一个电子表格、一个字处理器的文本、图片等,是由其他应用软件建立的。
(10)整型(Integer):用于存储无小数部分的数值,只能用于数据表中字段的定义。在数据表中,整型字段占用4个字节,取值范围是:
-2147483647~2147483647
整型以二进制形式存储,不像数值型那样需要转换成ASCII字符存储。
(11)备注型(Memo);备注型用于字符型数据块的存储,只能用于数据表中字段的定义。在数据表中,备注型字段占用10个字节,并用这10个字节来引用备注的实际内容。实际备注内容的多少只受内存可用空间的限制。
备注型字段的实际内容变化很大,不能直接将备注内容存在数据表(.DBF)文件中。
系统将备注内容存放在一个相对独立的文件中,该文件的扩展名为.DBT。
由于没有备注型的变量,所以对备注型字段的处理,需转换成字符型变量,然后使用字符型函数进行处理。
二、常量与变量
在程序的运行过程中,把需要处理的数据存放在内存储器中,称始终保持不变的数据为“常量”,称存放可变数据的存储器单元为“变量”,其中的数据称为变量的值。
1.常量
常量是一个命名的数据项,在整个操作过程中其值保持不变。如PI值,即3.1415926535是数值型常量。 VFP定义了如下类型的常量:
数值型常量,如:20,16,100,1
字符型常量,用单引号或双引号括起来的字符串,如:"ABCD"
逻辑型常量,只有两种:.T.和.F.
日期型常量和日期时间型常量,如:{^1999-04-22},{^1999-04-24 10:00am}
2.变量
VFP有3种形式的变量:
内存变量——存放单个数据的内存单元
数组变量——存放多个数据的内存单元组
字段变量——存放在数据表中的数据项
每个变量都有一个名称,叫做变量名,VFP通过相应的变量名来使用变量。变量名的命名规则是:
(1)以字母、数字及下划线组成,中文VFP可以使用汉字作变量名。
(2)以字母或下划线开始,中文VFP可以汉字开始。
(3)长度为1~128个字符,每个汉字占2个字符。
(4)不能使用VFP的保留字。
变量的作用域包括定义它的过程以及该过程所调用的子过程范围。
三、运算符与表达式
运算是对数据进行加工的过程,描述各种不同运算的符号称为运算符,而参与运算的数据称为操作数。表达式用来表示某个求值规则,它由运算符和配对的圆括号将常量、变量、函数、对象等操作数以合理的形式组合而成。
表达式可用来执行运算、操作字符或测试数据,每个表达式都产生唯一的值。表达式的类型由运算符的类型决定。在VFP中有5类运算符和表达式:
算术运算符和算术表达式
字符串运算符和字符串表达式
日期运算符和日期表达式
关系运算符和关系表达式
逻辑运算符和逻辑表达式
1.算术运算符与算术表达式
算术表达式也称数值型表达式,由算术运算符、数值型常量、变量、函数和圆括号组成,其运算结果为一数值。例如:50*2+(70—6)/8的运算结果为108.00。算术表达式的格式为:
<数值1><算术运算符1><数值2>[<算术运算符2><数值3>…]
(1)算术运算符。
VFP提供的算术运算符如表1。1所示。在这6个算术运算符中,除取负“-”是单目运算符外,其他均为双目运算符。它们运算的含义与数学中基本相同。
表1.1 算术运算符
运算符 名称 说 明
+ 加 同数学中的加法
- 减 同数学中的减法
* 乘 同数学中的乘法
/ 除 同数学中的除法
^或** 乘方 同数学中的乘方,如4^3表示43
% 求余 12%5表示12除以5所得的余数2
算术运算符的优先权依次为:
( ) → ^、** → *、/ → % → +、-
(2)表达式的书写规则。
算术表达式与数学中的表达式写法有所区别,在书写表达式时应当特别注意:
每个符号占1格,所有符号都必须一个一个并排写在同一横线上,不能在右上角或右下角写方次或下标。例如:23要写成2^3,Xl十X2要写成X1+X2。
原来在数学表达式中省略的内容必须重新写上。例如:2X要写成2*X。
所有括号都用小括号(),且括号必须配对。例如:3[x+2(y+z)]必须写成3*(x+2*(y+z))。
要把数学表达式中的有些符号,改成VFP中可以表示的符号。例如:要把2πr改为2*pi*r。
2.字符串运算符与字符串表达式
一个字符串表达式由字符串常量、字符串变量、字符串函数和字符串运算符组成。它可以是一个简单的字符串常量,也可以是若干个字符串常量或字符串变量的组合。VFP提供的字符运算符有两个(其运算级别相同),如表1-2所示。
表1-2 字符运算符
运算符 名称 说明
+ 连接 将字符型数据进行连接
- 空格移位连接 将前一数据尾部的空格移到后面数据的尾部
字符串表达式的格式为
<字符串1><字符串运算符1><字符串2>
[<字符串运算符2><字符串3>…]
例如:
"ABCl23"+"666xyz"连接后结果为:"ABCl23666xyz"
"计算机"+"世界" 连接后结果为:"计算机世界"
"ABC "-"DEFG" 连接后结果为:"ABCDEFG "
"ABC "+"DEFG" 连接后结果为:"ABC DEFG "
字符串表达式的值为字符串。
在字符串中嵌入引号,只需将字符串用另一种引号括起来即可。例如:
QM="'"
S=S+QM+ALLTRIM(THIS.Edit1.Value)+QM+","
3.日期时间运算符与日期时间表达式
日期型表达式由算术运算符“+、-”、算术表达式、日期型常量、日期型变量和函数组成。日期型数据是一种特殊的数值型数据,它们之间只能进行加“+”、减“-”运算。有下面3种情况:
两个日期型数据可以相减,结果是一个数值型数据(两个日期相差的天数)。例如:
{^1999/12/19}-{^1999/11/16}结果为数值型数据:33
一个表示天数的数值型数据可加到日期型数据中,其结果仍然为一日期型数据(向后推算的日期)。例如:{^1999/11/16}+33结果为日期型数据:{^1999/12/19}
一个表示天数的数值型数据可从日期型数据中减掉它,其结果仍然为一日期型数据(向前推算的日期)。例如:{^1999/12/19}-33 ,结果为日期型数据:{^1999/11/16}
VFP将无效的日期处理成空日期。
4.类与对象运算符
类与对象运算符专门用于实现面向对象的程序设计。有以下两种:
.——点运算符,确定对象与类的关系,以及属性、事件和方法与其对象的从属关系。
::——作用域运算符,用于在子类中调用父类的方法。
5.名表达式
在VFP中,许多命令和函数需要提供一个名。可在VFP中使用的名有:
表/.DBF文件名 、 表/.DBF别名 、 表/.DBF字段名 、 索引文件名、文件名、 内存变量和数组名、窗口名、 菜单名、表单名、 对象名、 属性名、 …
在VFP中定义一个名时,需要遵循以下原则:
名中只能使用字母或下划线开始。
名中只能使用字母、数字和下划线字符。
不能使用VFP的保留字。
名的长度可以为1—128个字符,但自由表中的字段名、索引标记名最多为10个字符。文件名按操作系统的规定。
名不是变量或字段,但是可以定义一个名表达式,以代替同名的变量或字段的值。
名表达式为VFP的命令和函数提供了灵活性。将名存放到变量或数组元素中,就可以在命令或函数中用变量来代替该名,只要将存放一个名的变量或数组元素用一对括号括起来。如:
STORE "CITY" TO a
REPLACE (a) WITH "Beijing"
字段名CITY被存放在变量a中,在使用REPLACE命令时,名表达式(a)将用字段名代替变量。这种方法称为间接引用。
四、函数
对于用户来说,程序设计语言中的函数与数学上的函数没有什么区别,使用函数要有参数(自变量),可以从函数得到一个返回的值(因变量)。而从程序设计的角度来看,函数是子程序的一种,它能完成一种特定的运算。
1.函数的分类
VFP的函数有两种,一种是用户自定义的函数,一种是系统函数。自定义函数由用户根据需要自行编写 , 系统函数则是由VFP提供的内部函数,用户可以随时调用。
VFP提供的系统函数大约有380多个,主要分为:数值函数、字符处理函数、表和数据库函数、日期时间函数、类型转换函数、测试函数、菜单函数、窗口函数、数组函数、SQL查询函数、位运算函数、对象特征函数、文件管理函数以及系统调用函数等14类。
2.常用函数
VFP提供了大量的系统函数供编程人员使用,下面列出常用的一些函数。
(1)数学函数
函数格式 说 明
ABS(N) 求N的绝对值
COS(N) 求N的余弦函数
EXP(N) 求N的e指数函数
INT(N) 取N的整数,对负数取较小的整数
LOG(N) 求N的自然对数
MAX(N1,N2) 求N1、N2中的最大者
MIN(N1,N2) 求N1、N2中的最小者
MOD(N1,N2) 求N1除以N2的余数
PI() 求圆周率
RAND(N) 产生0—1之间的随机数
ROUND(N1,N2) 按N2指定的小数位数求N1四舍五入后的值
SIGN(N) 求N的正负符号
SIN(N) 求N的正弦函数
SQRT(N) 求N的平方根
TAN(N) 求N的正切函数
(2)字符串函数
函数格式
说 明
ALLTRIM(C) 去掉C的前导空格和尾随空格
ASC(C) 求C中最左边一个字符的ASCII码值
AT(C1,C2) 返回C1在C2中出现的开始位置(整数值)
LEFT(C,n) 从字符串C的左边取长度为n的子串
LEN(C) 求字符串C长度
RIGHT(C,n) 从字符串C的右边取长度为n的子串
L0WER(C) 将字符串C中的大写字母转换为小写字母
SPACE(n) 返回n个空格字符组成的字符串
SUBSTR(C,n[,m]) 从字符串C中提取从n开始的m个字符的子串,若省略m则取n开始的所有字符
UPPER(C) 将字符串表达式中的小写字母转换为大写字母
(3)日期函数
函数格式 说 明
DATE() 系统当前日期
TIME() 系统当前时间
DATETIME() 系统当前日期和时间
DOW(D) 取日期表达式D的星期号(1为星期天)
YEAR(D) 取日期D的年份值
MONTH(D) 取日期D的月份值
DAY(D) 取日期D在月份中的天数值
HOUR(D) 取时间D中的小时数
MINUTE(D) 取时间D中的分钟数
SEC(D) 取时间D中的秒数
(4)类型转换函数
函数格式
说 明
CHR(ASCII码) 返回与ASCII码相应的字符
CTOD(C) 转换C表达式为对应的日期值
CTOT(C) 转换C表达式为对应的日期时间值
DTOC(D) 转换日期表达式D为字符串
STR(N,n,m) 转换数值表达式N为数字字符串
TTOC(D) 转换日期时间表达式D为字符串
VAL(C) 返回数字字符串C对应的数值
五、对象的属性、事件与方法
对象(object)在现实生活中是很常见的,如:一个人是一个对象,一台PC机是一个对象。如果将一台PC机拆开来看便有“显示器、机箱、软盘驱动器、硬盘、键盘、鼠标器…”,每一个又都是一个对象,即PC机对象是由多个“子”对象组成的。此时PC机又称为一个包容器(Container)对象。在可视化编程中,对象是应用程序的基本元素,常见的对象有表单、文本框、列表框等。
从可视化编程的角度来看,对象是一个具有属性(数据)和方法(行为方式)的实体。一个对象建立以后,其操作就通过与该对象有关的属性、事件和方法来描述。
1、对象的属性
属性(Propeny)是指对象的一项描述内容,用来描述对象的一个特性,不同的对象有不同的属性,而每个对象又都由若干属性来描述。在可视化编程中,常见的属性有标题(Caption)、名称(Name)、背景色(Backcolor)、字体大小(FontSize)、是否可见(Visible)等。通过修改或设置某些属性便能有效地控制对象的外观和操作。
属性值的设置或修改可以通过属性窗口来进行,也可以通过编程的方法在程序运行的时候来改变对象的属性。在程序中设置属性的一般格式是:
表单名.对象名.属性名=属性值
2.对象的事件
所谓事件(Event),是由VFP预先定义好的、能够被对象识别的动作,如单击(Click)事件、双击(DblClick)事件、装入(Load)事件、移动鼠标(MouseMove)事件等,不同的对象能识别的事件不全相同。对象的事件是固定的,用户不能建立新的事件。为此,VFP提供了丰富的内部事件,这些事件足以应付Windows中的绝大部分操作需要。
事件过程(Event Procudure)是为处理特定事件而编写的一段程序。当事件由用户触发(如C1ick)或由系统触发(如Load)时,对象就会对该事件作出响应(Respond)。响应某个事件后所执行的程序代码就是事件过程。
3.对象的方法
方法(Method)是与对象相关联的过程,但又不同于一般的Visual FoxPro过程。方法程序紧密地和对象连接在一起,并且与一般Visual FoxPro过程的调用方式也有所不同。
与事件过程类似,VFP的方法属于对象的内部函数,只是方法用于完成某种特定的功能而不一定响应某一事件,如添加对象(Addobject)方法、绘制矩形(Box)方法、释放表单(Release)方法等。方法也被“封装”在对象中,不同的对象具有不同的内部方法。VFP提供了百余个内部方法供不同的对象调用。与事件过程不同的是,根据需要可由用户自行建立新方法。
4.事件与方法的程序调用
事件过程由事件的激发而调用其代码,也可以在运行中由程序调用其代码,而方法的代码只能在运行中由程序调用。
在程序中调用事件代码的格式是:
表单名.对象名.事件名
在程序中调用对象方法的格式是
[[<变量名>]=]表单名.对象名.方法名
六、控件与对象
Visual FoxPro编程的最大特点,就是在可视的环境下以最快的速度和效率开发具有良好用户界面的应用程序,其实质就是利用VFP所提供的图形构件快速构造应用程序的输入输出屏幕界面。控件(Control)是某种图形构件的统称,如“标签控件”、“文本框控件”、“列表框控件”等,利用控件创建对象则是构造应用程序界面的具体方法。
1.常用控件和内部对象
常用控件由VFP的基类提供,共21个,每个控件用“表单控件”按钮表示,如表1-7所示(P17)。
2.表单对象
表单(Form)是应用程序的用户界面,也是进行程序设计的基础。各种图形、图像、数据等都是通过表单或表单中的对象显示出来,因此表单是一个容器对象。
在FoxPro的早期版本中表单被称为屏幕(Screen),在Visual Basic中则称为窗体。
(1)表单的结构。
VFP的表单具有和Windows应用程序的窗口界面相同的结构特征。一个典型的表单有图标、标题、极小化按钮、极大化按钮、关闭按钮、移动栏、表单体及其周围的边框。其中除了表单体之外的所有特征都可以部分或全部从表单中被删除。
(2)表单属性
在VFP中,表单的属性就是表单的结构特征。通过修改表单的属性可以改变表单的内常用的表单属性如表1—8所示。
属性名 作 用
AutoCenter 用于控制表单初始化时是否总是位于VFP窗口或其父表单的中央
BackColor 用于确定表单的背景颜色
BorderStyle 用于控制表单是否有边框:系统(可调)、单线、双线
Caption 表单的标题
Closable 用于控制表单的标题栏中的关闭按钮是否能用
ControlBox 用于控制表单的标题栏中是否有控制按钮
MaxButton 用于控制表单的标题栏中是否有极大化按钮
MinButton 用于控制表单的标题栏中是否有极小化按钮
Movable 用于控制表单是否可移动
TitleBar 用于控制表单是否有标题栏
WindowState 用于控制表单是极小化、极大化还是正常状态
WindowType 若表单是模式表单,则用户在访问windows屏幕中其他任何对象前必须关闭该表单
(3)表单的事件与方法。
就像属性那样,只有部分的表单事件与方法经常被使用,很多事件与方法很少被使用,除非你在编写一个非常复杂的应用程序。可以在代码窗口的“过程”下拉列表框中看到所有表单事件与方法的列表,也可以在“属性”窗口的“方法程序”选项卡中看到所有表单事件与方法的列表。
下面只列举那些最常用的事件与方法。
常用的表单事件:
Load事件——当表单被装入内存时发生;
Init事件——当表单被初始化时发生;
Activate事件——当表单被激活时发生。
上述事件被激发的顺序为Load、Init、Activate。
Destroy事件——当表单被释放时发生;
Unload事件——当表单被关闭时发生。
上述事件被激发顺序为Unload、Destroy。
Resize事件——当用户或程序去改变表单的大小时
发生。
常用的表单方法:
Hide方法——隐藏表单;
Show方法——显示表单;
Release方法——释放表单;
Refresh方法——刷新表单。
3.对象的引用
(1)对象的包容层次。
VFP中的对象根据它们所基于的类的性质可分为两类:容器类对象和控件类对象。
容器类对象可以包含其他对象,并且允许访问这些对象,例如表单集、表单、表格等控件类对象只能包含在容器对象之中,而不能够包含其他对象,例如命令按钮、复选框等。表1-9(P20)列出了每种容器类对象所能包含的对象。
(2)对象的引用。
作为应用程序的用户界面,表单上可以包含许多对象,而这些对象又有可能具有互相包含的层次关系。若要引用一个对象,需要知道它相对于容器层次的关系。例如,如果要在表单集中处理一个表单的控件,则需要引用表单集、表单和控件。
1)绝对引用:通过提供对象的完整容器层次来引用对象。
若要使表列中的控件无效,需要提供以下地址:
Formset.Form.PageFrame.Page.Grid.Column.Control.Enabled=.F.
2)相对引用:在容器层次中引用对象时,可以通
过快捷方式指明所要处理的对象。
例如:THISFORMSET.Frml.Cmdl.Caption="关闭"
表示将本表单集的名为Fnnl的表单中的Cmdl对象的标题(Caption)属性设置为"关闭"。
THISFORM.Cmdl.Caption="关闭"
表示将本表单的名为Cmdl对象的标题(Caption)属性设置为"关闭"。
THIS.Caption=”关闭”
对于需要改变标题的控件,表示将本对象的标题(Caption)属性设置为"关闭"。
THIS.Parent.BackColor=RGB(192,0g0)
表示将本对象的父对象的背景色设置为暗红色。
表1—10列出了一些属性和关键字,这些属性和关键字允许更方便地从对象层次中引用对象。
表1-10 引用对象的属性和关键字
属性或关键字 引 用
ActiveControl 当前活动表单中具有焦点的控件
ActiveForm 当前活动表单
ActivePage 当前活动表单中的活动页
Parent 该对象的直接容器
THIS 该对象
THISFORM 包含该对象的表单
THISFORMSET 包含该对象的表单集
说明:只能在方法程序或事件过程中使用THIS、
THISFORM和THISFORMSET。
希望采纳
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询