pb函数max

合集下载

PB数据窗口常用函数方法

PB数据窗口常用函数方法

PB数据窗口常用函数方法1. Retrieve函数:用于从数据库中检索数据,可以通过设置检索条件过滤数据。

例如,dw_employee.Retrieve(将从数据库中检索出所有的员工数据。

2. Update函数:用于更新数据窗口中的数据到数据库中。

例如,dw_employee.Update(将更新数据窗口中的所有修改到数据库中。

3. Create功能:用于创建一个新的数据行。

例如,dw_employee.Create(将在数据窗口中新增一行空数据。

4. Modify功能:用于修改数据窗口中的数据。

例如,dw_employee.Modify(将允许用户进行修改操作。

5. InsertRow函数:用于在数据窗口中插入一行数据。

例如,dw_employee.InsertRow(1)将在第一行之前插入一行数据。

6. DeleteRow函数:用于删除数据窗口中的一行数据。

例如,dw_employee.DeleteRow(2)将删除第二行的数据。

7. SetItem函数:用于设置数据窗口中指定列的值。

例如,dw_employee.SetItem(1, "John")将设置第一列的值为"John"。

8. GetItem函数:用于获取数据窗口中指定列的值。

例如,string ls_name = dw_employee.GetItemString(1)将获取第一列的值并赋给ls_name变量。

9. GetRowCount函数:用于获取数据窗口中的行数。

例如,intli_rows = dw_employee.GetRowCount(将返回数据窗口中的行数。

10. GetColumnCount函数:用于获取数据窗口中的列数。

例如,int li_columns = dw_employee.GetColumnCount(将返回数据窗口中的列数。

11. GetRow函数:用于获取数据窗口中指定行的数据。

pb合并查询的高级用法

pb合并查询的高级用法

pb合并查询的高级用法一、什么是pb合并查询pb合并查询是一种高级查询技术,用于将多个查询结果合并成一个结果集。

它可以在数据库中执行复杂的查询操作,以便从多个表中检索所需的数据。

pb合并查询是一种非常强大和灵活的查询工具,可以大大提高查询效率和准确性。

二、pb合并查询的基本语法pb合并查询使用的基本语法如下:SELECT column1, column2, ...FROM table1JOIN table2 ON conditionWHERE conditionGROUP BY column1HAVING conditionORDER BY column1 ASC/DESC;其中,column1, column2等是要检索的列名,table1, table2等是要查询的表名,condition是查询条件,GROUP BY用于分组,HAVING用于过滤分组,ORDER BY用于排序。

三、pb合并查询的高级用法1. 使用连接查询连接查询是pb合并查询的一种常见用法,它用于从多个表中检索相关的数据。

连接查询可以通过使用JOIN子句将多个表连接起来,根据指定的条件将它们的行合并在一起。

常见的连接类型包括内连接、外连接和交叉连接。

内连接内连接是连接查询中最常用的一种类型,它只返回两个表中满足连接条件的行。

内连接可以使用INNER JOIN或JOIN关键字来实现。

例如:SELECT column1, column2, ...FROM table1INNER JOIN table2 ON condition;外连接外连接是连接查询中的另一种常见类型,它可以返回一个表中满足连接条件的行,同时返回另一个表中满足条件的行,如果没有匹配的行,则返回NULL值。

外连接可以使用LEFT JOIN、RIGHT JOIN或FULL JOIN关键字来实现。

例如:SELECT column1, column2, ...FROM table1LEFT JOIN table2 ON condition;交叉连接交叉连接是连接查询中最简单的一种类型,它将两个表的所有行组合在一起,返回的结果是两个表的乘积。

PB函数大全

PB函数大全

PB函数大全一、数组函数1、LowerBound()功能:得到指定数组第n维的下界。

语法:LowerBound ( array {, n } )参数:array:数组名。

n:数值类型,可选项,指定要得到数组哪一维的下界。

缺省值为1。

返回值:Long。

函数执行成功时返回array数组第n维的下界。

如果n的值超过了指定数组的最大维数,那么该函数返回-1。

如果任何参数的值为NULL,LowerBound()函数返回NULL。

示例:integer a[5], b[2,5]LowerBound(a) // Returns 1LowerBound(a, 1) // Returns 1LowerBound(a, 2) // Returns -1, a has only 1 dimLowerBound(b, 2) // Returns 1integer c[ ]LowerBound(c) // Returns 1c[50] = 900LowerBound(c) // Returns 1integer d[-10 to 50]LowerBound(d) // Returns - 102、UpperBound()功能:得到指定数组第n维的上界。

语法:UpperBound( array {, n } )参数:array:数组名。

n:数值类型,可选项,指定要得到数组哪一维的上界。

缺省值为1。

返回值:Long。

函数执行成功时返回array数组第n维的上界。

如果n的值超过了指定数组的最大维数,那么该函数返回-1。

如果任何参数的值为NULL,UpperBound()函数返回NULL。

示例:integer a[5], b[2,5]LowerBound(a) // Returns 1LowerBound(a, 1) // Returns 1LowerBound(a, 2) // Returns -1, a has only 1 dimLowerBound(b, 2) // Returns 1integer c[ ]LowerBound(c) // Returns 1c[50] = 900LowerBound(c) // Returns 1integer d[-10 to 50]LowerBound(d) // Returns - 10二、Blob(大二进制对象)函数Blob函数得到Blob数据类型的信息、完成数据类型转换以及操作Blob类型数据。

Pb函数大全及详解

Pb函数大全及详解

一、数组函数1、LowerBound()功能:得到指定数组第n维的下界。

语法:LowerBound ( array {, n } )参数:array:数组名。

n:数值类型,可选项,指定要得到数组哪一维的下界。

缺省值为1。

返回值:Long。

函数执行成功时返回array数组第n维的下界。

如果n的值超过了指定数组的最大维数,那么该函数返回-1。

如果任何参数的值为NULL,LowerBound()函数返回NULL。

示例:integer a[5], b[2,5]LowerBound(a) // Returns 1LowerBound(a, 1) // Returns 1LowerBound(a, 2) // Returns -1, a has only 1 dim LowerBound(b, 2) // Returns 1integer c[ ]LowerBound(c) // Returns 1c[50] = 900LowerBound(c) // Returns 1integer d[-10 to 50]LowerBound(d) // Returns - 102、UpperBound()功能:得到指定数组第n维的上界。

语法:UpperBound( array {, n } )参数:array:数组名。

n:数值类型,可选项,指定要得到数组哪一维的上界。

缺省值为1。

返回值:Long。

函数执行成功时返回array数组第n维的上界。

如果n的值超过了指定数组的最大维数,那么该函数返回-1。

如果任何参数的值为NULL,UpperBound()函数返回NULL。

示例:integer a[5], b[2,5]LowerBound(a) // Returns 1LowerBound(a, 1) // Returns 1LowerBound(a, 2) // Returns -1, a has only 1 dim LowerBound(b, 2) // Returns 1integer c[ ]LowerBound(c) // Returns 1c[50] = 900LowerBound(c) // Returns 1integer d[-10 to 50]LowerBound(d) // Returns - 10二、Blob(大二进制对象)函数Blob函数得到Blob数据类型的信息、完成数据类型转换以及操作Blob类型数据。

PB(2)

PB(2)

第二章 PowerScript 语言●PowerScript是PB应用程序的编程语言;●学习,使用PB必须掌握的;●不是简单的第四代编程语言,而是一种高级的,结构化的编程语言;●PowerScript特点:操作符种类多;数据结构丰富;语言简洁直观;语法限制不严格;有自动空格和缩进格式;自动设置不同作用语句的颜色;●PowerScript语言成分:变量说明;赋值语句;流控制语句;内嵌SQL语言;大量的系统函数,对象函数;一、编程基础1.注释:●是程序员和以后的读者之间通信的重要渠道,对读者理解程序能起到很好的作用;●注释分为序言性注释和功能性注释;序言性注释:对整个程序段作说明功能性注释:描述一行或几行语句的功能;●行注释:使用“//”双斜线,从//开始,直至行结束;●块注释:使用“/*”作开始端,“*/”作结束端;●一个正规完善的应用程序,注释占整个源程序的二分之一左右;2.断行、分隔符、续行符(1)断行●只需输入回车键[Enter],即可认为结束旧的一条语句,开始新的一条语句;●只有在嵌入SQL语句时,需要输入分号“;”表示一条SQL语句的结束;(2)分隔符●把多条语句书写在一行上,使用“;”作分隔符;●例:a=1;b=2;c=a+b●这种编辑风格最好不使用,阅读,理解源程序困难;(3)续行符●多行上书写一条语句,使用“&”作续行符;●一条太长的语句,不要在一行上书写完,最好将它分成两行或多行,容易阅读;●例:MessageBox(“警告”,“更新数据库失败,错误原因是:”+&String(SQLCA.sqlcode)●不能在标识符,保留字中间续行;●书写SQL语句时,不需要使用续行符;3.标识符●名字:由字母,数字,下划线等组成的有效序列;●用来标识变量名,函数名,文件名,对象名,控件名等;●需遵循下面的规则:标识符以字母,下划线开始;字母,数字,下划线(_),短横线(-),美元符($),号码符(#),百分号(%)保留字不能做标识符;标识符最长为40个子符,而且中间不能有空格;●错误标识符示例User nameParentUser〉Name1th4.大小写●PowerScript中,绝大多数情况下都不区分大小写,包括保留字,标识符等;●但是在字符串或字符中的大小写是有区别的;●例:a和b是两个字符型(char)变量a=“H”b=“h”a和b是不相等的;5.使用点标记●PB的应用程序开发过程实际上是各种对象的定义和使用过程;●PB中,访问对象的属性,函数,事件的方法很简单,使用圆点“.”作为标记符;●程序访问对象属性的语句:对象名.对象属性●程序中访问对象函数与事件的格式:{对象名.}{类别}{查找时机}{执行时机}名称({参数表})●类别,查找时机,执行时机,是没有先后顺序的,可以任意排列,但必须在对象名之后,函数或事件名之前;●类别:EVENT,FUNCTION(默认)●查找时机:DANYMIC,STATIC(默认)●执行时机:POST,TRIGGER(默认)6.了解空值●代表数据未定义,不确定;●它与空字符串,数值0,以及日期0000-00-00的意义完全不同;●在PB中,它主要用于和数据库交换数据时使用;●PB不将空值作为缺省值;●变量被赋予空值的途径:从数据库读到空值;使用SetNull()函数;string person //person=“”SetNull(person)//person的值为Null●测试变量或表达式是否为空:使用函数IsNULL();7.特殊字符●有些特殊的字符不能直接输入到字符串中,需要特殊的表示方法;●例如:~t:制表符;~r:回车;~f:换行;~”:双引号;~’:单引号;string str1=“I~’m a student”8.代词(1)THIS●用来引用当前对象,引用当前脚本所在的对象,如窗口,用户对象,菜单,控件等;●THIS代表对象,控件等的本身,即处理相应事件的对象,控件的本身;●例:按钮cb_1的Clicked事件的脚本IF This.text=”Yes” thenThis.text=”No”ElseThis.text=”Yes”Endif(2)Parent●是指当前对象,控件所在窗口;●使用它有很强的通用性,可移植性,容易理解;●例:Close(w_main)Close(Parent)●在菜单对象中使用Parent代词,则指的是上一级菜单;(3)Super●在编写控件或对象的子对象时,子对象中可以调用父对象的事件处理程序;●调用在子对象中被重载的父对象的函数;●例:Supper::Event clicked()Supper::f_change()(4)ParentWindow●指当前菜单所在的窗口;●只能在菜单的事件处理程序中使用●菜单的菜单项的命令是关闭窗口,Close(ParentWindow)9.保留字●专供PB内部使用的一组单词,每个单词都有特殊的含义;●用户不能把它们用作标识符;二、数据类型●类型是某类数据的名称,用于确定能存储的信息;●程序中通过数据类型限定变量的值及其取值范围;●PB的数据类型丰富,并提供了大量的数据类型转换函数;1.标准数据类型(1)Boolean(布尔型)●这种类型的变量只有两个值:TRUE,FALSE(2)Char或Character(字符型)●这种类型的变量用于存储单个ASCII字符(3)String(字符串型)●这种类型的变量用于存储一串ASCII字符●PB中可以存储0~1024个字符;(4)Int或Integer(整型)●这种类型的变量用于存储16位带符号整数;●数值范围:-32768~32767(5)UnsignedInteger或Uint(无符号整数)●这种类型的变量用于存储16位无符号整数;●数值范围:0~65535;(6)Long(长整型)●这种类型的变量用于存储32位带符号整数;(7)UnsignedLong或ULong(无符号长整型)●这种类型的变量用于存储32位无符号整数;(8)Real(实型)●可以精确到小数点后六位的带符号浮点数据类型;(9)Double(双精度实型)●精度范围比Real型要大;(10) Decimal或Dec(小数型)●最到可达18位十进制数字的带符号小数;●小数点可以置于这18位有效数字中的人和1位上;(11) Blob(二进制大对象类型)●用于存储字节数不定的各种数据;●二进制数据,声音,图像文件,各种文档等大型文件;(12) Date(日期型)●用于对日期进行操作;●日期常量:2000-05-03●范围:1000-01-01~3000-12-31(13) Time(时间型)●用于对时间进行操作;●采用的是24小时制12:54:23:234221(14) DateTime(日期时间型)●用于读写数据库中的DateTime型数据;2.Any类型●Any类型是一种可变的数据类型;●程序中给它赋什么类型的值,它将变成什么数据类型;●Any类型可以接受标准数据类型,结构类型,对象及数组类型;●要想知道Any类型变量中保存的数据类型,可以使用ClassName()函数;●Any可以增加灵活性,但同时也存在一些潜在的不安全因素;3.对象和控件类型●窗口,菜单,各种控件都是PB的系统对象;●每一种系统对象实际上都是定义在PB内部的一种数据类型;●一般情况下,不必把这些对象当作数据类型来考虑,只需在画笔中使用他们;●在Browse画笔中,查看PB支持哪些系统对象,以及它们之间的继承关系;4.枚举类型●PB中枚举类型常被用于系统定义函数的参数;●用于指定对象或控件的属性;●PB开发人员不能定义自己的枚举类型;●枚举类型实际上是一组值,每个值都以英文单词开始,以!结束;●例:mle_1.aligment=Center!5.数组类型●一系列数据类型相同的变量的集合,其中每个变量被称作元素,这些元素公用一个名字;●通过数组名和唯一的下标来访问数组中的每一个元素;●数组的定义:Integer User[10]●定义数组时,数组的下界默认值为1,用户也可以改变它;●Integer User[2 to 12]●Upperbound()获取上界值;Lowerbound()或取下界值;●允许定义变常数组:Interger User[];6.结构类型●一系列变量的集合,各元素的数据类型可以不同,且各元素都有自己的名字;●对各分量的访问通过结构变量名和该元素自己的名字通过点标记符连接实现的;●例:=”Joan”●PB中,结构变量不能在脚本中定义,必须通过结构画笔来定义;●全局结构,对象级结构;●对象级结构使用时,要说明为对象的一部分:objectname.structurename.variablename三、声明语句1.声明变量●PB中,使用变量之前,都要首先予以声明;●语法为:数据类型变量名[=初值][,变量名[=初值]…]●例:Integer IReal a,b,cInteger ii_total=100String ls_city=”北京”,ls_country●Blob型变量声明语法:Blob [{大小}] 变量名●Dec型变量声明:Dec|Decimal [{精度}] 变量名[=初值]2.变量的作用域●作用域定义变量在什么范围内有效,在哪个地方可以使用变量;●变量的作用域可以使用户自己定义的函数或事件不影响应用中其它地方定义的变量,即使它们同名;(1)全局变量(Global Variables)●作用域是整个应用程序,整个应用程序的任何地方,任何时候都可以使用此类变量;●随应程序的创建运行而产生,应用程序的终止而消失;●全局变量常驻内存,占用资源多;●可以在应用程序的任何地方对它进行存取;(2)实例变量(Instance Variable)●实例变量是与对象相关联的;●只有在定义该实例变量的对象事件处理程序或函数中才能使用;●它随对象的创建而产生,随对象的销毁而消失;●如果为某个对象定义了实例变量,那么这个对象的事件,属性,函数都可以使用该变量;●如果定义一个窗口内部的实例变量,则此窗口所有脚本都可以访问此变量;●定义的方法:(3)共享变量(Shared Variable)●是一个静态变量,不会随对象的销毁而消失;●它所在对象关闭后再次打开时,共享变量依然保持关闭时的值;●多用于MDI中,通过共享变量,在打开的多个文当中进行数据交换;(4)局部变量(Local Variable)●在处理程序中直接定义,使用;●它的作用于仅限于使用它的程序段;●其它程序段不能访问本程序段中的局部变量;●运行程序后,进入某个程序段时,系统自动为局部变量分配内存,退出时,占用的内存释放;(5)定义变量时的选择:●尽可能将变量定义成局部变量;●如果需从对象的其它地方保存一个值或访问一个变量,使用局部变量无法实现,可以考虑使用实例变量(共享变量);●实在没有什么好办法,就用全局变量,必须记住应用程序中哪里修改了全局变量的值,否则会造成错误的结果;四、操作符●利用操作符构成表达式,完成各种简单,复杂的计算;1.算术运算符:(1)单目:+,-,++,--(2)二元:+,-,*,/,^,=(3)组合:+=,-=,*=,/=,^=2.关系运算符:=,>,<,<>,>=,<=比较字符串时,可使用一些函数:Upper(),Lower(),Trim(),RightTrim (),LeftTrim();3.逻辑运算符NOT,AND,OR4.连接符(1)连接运算符:+(2)分量运算符:.(3)下标运算符:[](4)函数调用运算符:()5.操作优先级:(由高到底)(),+ -,^,* /,+ -,= > < <> >= <=,NOT,AND,OR五、控制语句1.条件控制语句(1)IF…THEN…ELSE…END IF(2)CHOOSE CASECHOOSE CASE ACASE B1C1CASE B2C2……CASE ELSECNEND CHOOSE其中B1,B2可以是:一个单整数值:3一列用逗号分隔的值:3,6,9一个TO子句:1 TO 5一个IS表达式:IS 关系运算符值2.循环控制语句(1)DO UNTIL 循环条件执行语句块LOOP(2)DO WHILE 循环条件执行语句块LOOP(3)DO执行语句块LOOP UNTIL 循环条件(4)DO执行语句块LOOP WHILE 循环条件(5)FOR 循环变量=初始值 TO 结束值 [STEP 增量]执行语句块NEXT3.CONTINUE4.EXIT5.GOTO 标号6.RETURN [表达式]7.HALT [CLOSE]六、常用系统函数●不属于任何对象或控件的函数;●任何地方口可以直接调用而无须声明;●PB提供的内部函数,对设计程序相当重要,对一些常用函数进行说明1.数据类型转换函数(1)Integer()功能:将string型或Blob型转化为Integer型语法:Interger(str1)(2)String()功能:将指定数据转换成指定的格式语法:String(value[,format]);例:string(12.5)string (10.50,”单价:###.##”)string (today(),”yyyy-mm-dd”)2.数据检测函数(1)Isdate()功能:检测指定的字符串是否是有效的日期语法:Isdate(str1);(2)Isnull()功能:检测指定的参数是否为空值语法:Isnull(value);(3)Isnumber()功能:检测指定的字符串是否是有效的数值语法:Isnumber(str);3.数值计算函数(1)Abs()功能:计算绝对值语法:Abs(m);(2)Max()功能:比较两个数值,返回最大值语法:Max(int1,int2);4.字符串处理函数(1)Len()功能:返回指定字符串的长度语法:Len(strl);(2)Trim()功能:删除指定字符串左边和右边的空格语法:Trim(strl);(2)Mid()功能:取指定字符串的子字符串语法:Mid(strl,start[,length]);(3)Upper(),Lower()功能:将指定字符串的中所有字母转换成大(小)写字母语法:Upper(strl) Lower(strl)5.日期与时间函数(1)Day()[Month(),Year()]功能:得到日期中的号数语法:Day(datel);(2)Today()功能:返回当前日期语法:Todat();(3)Now()功能:返回当前系统时间语法:Now();6.其它(1)Open()功能:打开窗口语法:Open(window);(2)Close()功能:关闭窗口,并且释放内存语法:Close(window);(3)Messagebox()功能:弹出消息对话框语法:Messagebox(title,text[,icon[button[,default]]]);title:对话框标题text:对话框显示的信息icon:对话框显示的图标取值:Exclamtion!,information!,None!,Question!,stopsign!button:显示对话框按钮取值显示按钮Ok![确定]OkCancel![确定] [取消]YesNo![是] [否]YesNoCancel![是] [否] [取消]RetryCancel![重试] [取消]AbortRetryIgnore![终止][重试][忽略]Default:对话框中默认按钮,缺省值为1返回值:返回值是Integer型,如果不发生错误,返回选定按钮编号(如1,2,3);如果发生错误,返回值为-1七、嵌入式SQL语句●PB可以通过数据窗口操作数据库;●PB中可以直接使用SQL语句操作数据库;1.Select 命令●可以使用该命令从数据库中检索一条记录;●如果找到多条满足条件的记录,则产生错误;●语句格式:SELECT [DISTINCT] FieldlistINTO Varlist[WHERE Criteria][GROUP BY FieldList ][HAVING Criteria][ORDER BY FieldList [DESC]][USING TransObject];●其中,Varlist是变量列表,每个变量前都要加上冒号“:”,用来指示该变量是PB变量;●例:2.INSERT命令●用于向表中增加一条新纪录;●语句格式:INSERT INTO TableName [Fieldsname]VALUES ValueOfFields[USING TransObject];●例:INSERT INTO s(s.s#,s.sname,s.age,s.sex)VALUES (“s10”,”John”,21,”男”)USING SQLCA;IF SQLCA<>0 THENROLLBACK USING SQLCA;Messagebox(“失败”,”数据库插入失败:”+SQLCA.SQLERRTEXT)ELSECOMMIT USING SQLCA;END IF3.DELETE命令●用于从表中删除已存在的记录;●语句格式:DELETE FROM TableNameWHERE Criteria[USING TransObject];●例:DELETE FROM sWHERE s.s#=’s1’USING SQLCA;4.UPDATE命令●用于更新表中已存在的记录;●语句格式:UPDATE TablenameSET Fieldname=Value,[Fieldname=Value…]WHERE Critieria[USING TransObject];●例:UPDATE sSET s.age=20,s.sex=”女”WHERE s.code=”s1”USING SQLCA;5.定义游标●检索多条满足条件的记录,可以使用游标;●游标Cursor:临时表,其中包含了满足条件的所有行;●使用Fetch命令一行一行的访问这些数据;●在PB开发中,可能根本用不到游标,应为有数据窗口;但使用游标占用资源少,操作灵活;●游标使用的过程:(1)用Declare声明游标DECLARE CusorName Cursor ForSelectStatement[USING TransObject];例:DECLARE kechengming Cursor ForSELECT “cc”.”cn”FROM “s”;(2)用Open命令打开游标●声明后要想使用,必须使用Open 命令打开它;●Open命令创建一个由SELECT条件检索到的数据组成临时表;●由于打开游标,对数据库进行SELECT操作,将耗费一段时间,如果执行时间较长,可将鼠标改为Hourclass!●OPEN CursorName例:OPEN kechengming;(3)用Fetch语句读取一行数据●使用OPEN命令打开游标后,使用FETCH命令对每一个数据进行操作;●FETCH语句从游标中读取当前记录,并把它保存的指定的变量中;●每执行一次FETCH语句,都从游标中读取一行记录,需读取多行,反复调用FETCH语句;●执行FETCH后检查SQLCA的SQLCODE属性:0:成功读取;-1:读取记录失败;100:读完了所有记录;●有的DBMS支持下述用法:FETCH FIRST,FETCH LAST,FETCH PRIOR;●FETCH CursorNameINTO Varlist;例:string strDOFetch kechengming INTO :str;Ddlb_1.additem(str)LOOP While sqlca.sqlcode=0(4)使用Close关闭游标●游标操作完毕后,使用Close命令将游标关闭;●关闭游标后,可以释放临师表所占用的空间;●关闭后,不能再使用FETCH命令从游标中读数据了;●CLOSE CursorName;7.如果连接的DBMS支持存储过程,那么PB可以定义存储过程,使用存储过程可以提高应用程序的执行效率;8.粘贴SQL语句●PB提供了图形化生成SQL语句的工具画板;●三类:游标;非游标;SELECT,INSERT,UPDATE,DELETE过程;。

PB常用函数

PB常用函数

PB常用函数PB常用函数日期时间类函数日期时间类函数的功能如下:Date:把日期转换为Date类型。

Time:把时间转换为Time类型。

Day:日期值。

Month:月值。

Year:年值。

DayName:星期几。

DayNumber:一周中的第几天。

DaysAfer:两个日期之间所差的天数。

SecondsAfer:两个时间之间所差的秒数。

Hour:小时。

Minute:分钟。

Second:秒。

Now:系统当前时间。

Today:系统日期和时间。

RelativeDate:指定日期前后的天数值。

RelativeTime:指定时间的前后时间值。

数值计算类函数数值计算类函数主要的作用就是对数据进行计算,功能如下:Abs:返回数据的绝对值。

Max:求输入的最大值。

Min:求输入的最小值。

Ceiling:返回整数,小数会自动向上进位。

Int:返回整数,小数会自动向下退位。

Round:对数据进行四舍五入操作。

Truncate:删除掉小数点后若干位。

Cos:求余弦值。

Sin:求正弦值。

Tan:求正切值。

Exp:以e为底,输入值为次方的乘方值。

Sqrt:求平方根。

Fact:求阶乘。

Log:求自然对数。

LogTen:求以10为底的对数。

Mod:求余数。

Pi:求与PI的乘积。

Rand:返回1与输入值之间的一个伪随机数。

字符串类函数字符串类函数的功能如下。

Fill:建立一个指定长度的字符串。

Lower:转换为小写字母。

Upper:转换为大写字母。

WordCap:首写字母大写,其他小写。

Space:由指定字符个数组成的空格字符串。

Left:从字符串左边开始指定字符串。

Right:从字符串右边开始指定字符串。

LeftTrim:删除字符串左边的空格。

RightTrim:删除字符串右边的空格。

Trim:删除左右两边的空格。

Len:返回字符串长度。

Match:判断是否有指定模式的字符。

Mid:取子字符串。

Replace:用指定字符替换另外一个字符串。

max函数公式解释

max函数公式解释

max函数公式解释
max函数是一种常见的数学函数,在计算机编程中也经常被使用。

其作用是从一组数中找出最大值。

max函数通常用以下公式表示:
max(a,b) = { a (a≥b)
{ b (a<b)
其中,a和b是需要比较的两个数,大括号中的条件表示如果a 大于等于b,则返回a,否则返回b。

如果需要比较多个数,可以使用max函数的嵌套,例如:
max(a,max(b,max(c,d)))
这个公式的意思是,先比较c和d,找出最大值,再与a、b中的最大值比较,再找出最大值。

也可以使用max函数的数组形式,例如:
max([a,b,c,d])
这个公式的意思是,将a、b、c、d放到一个数组中,然后使用max函数找出最大值。

总之,max函数是一种非常实用的数学函数,在实际问题中经常用到。

掌握max函数的使用方法,对于计算机编程和数学问题的解决都非常有帮助。

- 1 -。

PB 函数大全(3)

PB 函数大全(3)

PB 函数大全(3)默认分类2009-11-11 17:30:49 阅读839 评论0 字号:大中小订阅SetNull()功能将指定变量的值设置为NULL。

这里的变量可以是除数组、结构、自动实例化对象之外的任何数据类型。

语法SetNull ( anyvariable )参数anyvariable:要将其值设置为NULL的变量返回值Integer。

函数执行成功时返回1,发生错误时返回-1。

如果任何参数的值为NULL,SetNull()函数返回NULL。

用法PowerBuilder应用程序在说明变量时,并不自动地将其初值设置为NULL,而是根据类型的不同而设置不同的初值,比如,数值类型的变量自动初始化为0,字符串型变量自动初始化为空字符串("")。

因此,如果需要将某个变量的值设置为NULL,就需要使用SetNull()函数来完成任务了。

一般来说,NULL值往往应用在数据库值未确定的列上。

SetPointer()功能设置鼠标指针。

语法SetPointer ( type )参数type:Pointer枚举类型,指明要设置为哪种鼠标指针返回值Pointer。

返回更换前的鼠标指针,以便于应用程序恢复原有指针。

如果参数type的值为NULL,SetPointer()函数返回NULL。

用法type参数的可能取值为:Arrow!、Cross!、Beam!、HourGlass!、SizeNS!、SizeNESW!、SizeWE!、SizeNWSE!、UpArrow!。

SignalError()功能以编程方式触发应用对象的SystemError事件。

语法SignalError ( { number }, { text } )参数number:integer类型,可选项,指定出错编号,该编号将保存到Error对象的number属性中text:string类型,可选项,指定出错信息,该信息将保存到Error对象的text属性中返回值Integer。

PB处理时间函数集锦

PB处理时间函数集锦

SQL Server 中一些有用的日期SQL 语句1.一个月第一天的SELECT DATEADDmm DATEDIFFmm0getdate 02.本周的星期一SELECT DATEADDwk DATEDIFFwk0getdate 03.一年的第一天SELECT DATEADDyyDATEDIFFyy0getdate 04.季度的第一天SELECT DATEADDqqDATEDIFFqq0getdate 05.当天的半夜SELECT DATEADDdd DATEDIFFdd0getdate06.上个月的最后一天SELECT dateaddms-3DATEADDmm DATEDIFFmm0getdate07.去年的最后一天SELECT dateaddms-3DATEADDyy DATEDIFFyy0getdate 08.本月的最后一天SELECT dateaddms-3DATEADDmm DATEDIFFm0getdate1 09.本年的最后一天SELECT dateaddms-3DATEADDyy DATEDIFFyy0getdate1 010.本月的第一个星期一selectDATEADDwkDATEDIFFwk0dateadddd6-datepartdaygetdategetdate 011.今天的日期select fn CURDATE astoday--------------------------------------------------------------------------------SQL Server 日期计算关键字: 数据库SQL SERVERDATEDIFFDATEADD通常,你需要获得当前日期和计算一些其他的日期,例如,你的程序可能需要判断一个月的第一天或者最后一天。

你们大部分人大概都知道怎样把日期进行分割(年、月、日等),然后仅仅用分割出来的年、月、日等放在几个函数中计算出自己所需要的日期!在这篇文章里,我将告诉你如何使用DATEADD 和DATEDIFF 函数来计算出在你的程序中可能你要用到的一些不同日期。

PB数据窗口常用函数方法

PB数据窗口常用函数方法

PB数据窗口常用函数方法在PB(PowerBuilder)中,数据窗口是一种非常常用的控件,用于显示和处理数据。

以下是一些PB数据窗口常用的函数方法:1. SetItem(li_row, ls_column, ls_value): 可以用来设置指定行列位置的单元格的值。

2. GetItemString(li_row, ls_column): 返回指定行列位置的单元格的字符串值。

3. SetItemStatus(li_row, ls_column, lsb_update): 可以设置指定单元格的更新状态,lsb_update为TRUE表示有更新,FALSE表示没有更新。

5. Retrieve(: 用于从数据库中检索数据并在数据窗口中显示。

6. Modify("sql"): 可以修改数据窗口的检索SQL语句,并重新检索数据。

7. InsertRow(li_row): 插入一行数据。

8. DeleteRow(li_row): 删除指定行数据。

9. Update(: 保存对数据窗口中数据的修改到数据库。

10. ResetUpdate(: 取消对数据窗口中数据的修改。

11. Reset(: 清空数据窗口中的所有数据。

12. SelectRow(li_row, lsb_select): 可以选择或取消选择指定行。

13. SelectText(li_start, li_end): 可以选择指定行列范围的文本。

14. GetColumnName(li_column): 返回指定列索引的列名。

15. GetColumnCount(: 返回数据窗口中的列数。

16. GetRowCount(: 返回数据窗口的行数。

17. GetRow(: 返回当前选中行的索引。

18. Find("value"): 在数据窗口中查找指定值,并返回先找到的行索引。

19. FindNext("value"): 在数据窗口中继续查找指定值,并返回下一个找到的行索引。

PB函数大全

PB函数大全

PB函数大全一、数组函数1、LowerBound()功能:得到指定数组第n维的下界。

语法:LowerBound ( array {, n } )参数:array:数组名。

n:数值类型,可选项,指定要得到数组哪一维的下界。

缺省值为1。

返回值:Long。

函数执行成功时返回array数组第n维的下界。

如果n的值超过了指定数组的最大维数,那么该函数返回-1。

如果任何参数的值为NULL,LowerBound()函数返回NULL。

示例:integer a[5], b[2,5]LowerBound(a) // Returns 1LowerBound(a, 1) // Returns 1LowerBound(a, 2) // Returns -1, a has only 1 dimLowerBound(b, 2) // Returns 1integer c[ ]LowerBound(c) // Returns 1c[50] = 900LowerBound(c) // Returns 1integer d[-10 to 50]LowerBound(d) // Returns - 102、UpperBound()功能:得到指定数组第n维的上界。

语法:UpperBound( array {, n } )参数:array:数组名。

n:数值类型,可选项,指定要得到数组哪一维的上界。

缺省值为1。

返回值:Long。

函数执行成功时返回array数组第n维的上界。

如果n的值超过了指定数组的最大维数,那么该函数返回-1。

如果任何参数的值为NULL,UpperBound()函数返回NULL。

示例:integer a[5], b[2,5]LowerBound(a) // Returns 1LowerBound(a, 1) // Returns 1LowerBound(a, 2) // Returns -1, a has only 1 dimLowerBound(b, 2) // Returns 1integer c[ ]LowerBound(c) // Returns 1c[50] = 900LowerBound(c) // Returns 1integer d[-10 to 50]LowerBound(d) // Returns - 10二、Blob(大二进制对象)函数Blob函数得到Blob数据类型的信息、完成数据类型转换以及操作Blob类型数据。

PB函数大全

PB函数大全

PB函数大全功能:从Blob变量中提取出一段数据。

提取之后,原Blob变量内容不变。

语法:BlobMid ( data, n {, length } )参数:data:Blob类型的数据。

n:指定要提取数据的起始位置,有效值在1到4,294,967,295之间。

length:可选项,指定要提取数据的长度,以字节为单位,有效值在1到4,294,967,295之间。

缺省时提取从指定位置n到末尾的所有数据返回值:Blob。

函数执行成功时返回指定字节数的数据。

如果n的值大于data的字节数,函数返回空。

如果n与length的和超过了data数据的字节数,那么BlobMid()函数返回剩下的数据,数据长度将小于参数length的值。

如果任何参数的值为NULL,则BlobMid()函数返回NULL。

示例:In this example, the first call to BlobMid stores 10 bytes of the blob datablob starting at position 5 in the blob data_1; the second call stores the bytes of datablob from position 5 to the end in data_2:blob data_1, data_2, datablob... // Read a blob datatype into datablob.data_1 = BlobMid(datablob, 5, 10)data_2 = BlobMid(datablob, 5)This code copies a bitmap in the blob emp_photo starting at position 1, stores the position at which the next copy can begin in nbr, and then copies a date into the blob emp_photo after the bitmap data. Then, using the date's start position, it extracts the date from the blob and displays it in the StaticText st_1:blob{1000} emp_photoblob tempdate pic_dateulong nbr... // Read BMP file containing employee picture... // into temp using FileOpen and FileRead.pic_date = Today()nbr = BlobEdit(emp_photo, 1, temp)BlobEdit(emp_photo, nbr, pic_date)st_1.Text = String(Date(BlobMid(emp_photo, nbr)))4、Len()功能:得到Blob类型变量的数据长度,以字节为单位。

PB对excel的操作

PB对excel的操作

PB对excel的操作随着科技的发展,电子表格软件已经成为了工作和学习中不可或缺的工具。

而Excel作为最常用的电子表格软件之一,在个人和企业的日常操作中扮演着重要的角色。

本文将介绍PB(Peanut Butter)对Excel 的操作,包括基本操作、数据处理与分析、图表制作、公式运用等内容。

一、基本操作1. 打开与关闭工作簿PB可通过点击文件选项卡,选择“打开”命令来打开Excel工作簿。

在使用完成后,点击右上角的“关闭”按钮即可关闭工作簿。

2. 插入与删除工作表PB可在Excel中插入新的工作表,点击工作表选项卡后,在“工作表组”中选择“插入工作表”即可。

要删除工作表,PB只需选中要删除的工作表,然后点击右键选择“删除”。

3. 数据输入与编辑PB可将数据直接输入到单元格中,通过使用方向键或鼠标切换到需要编辑的单元格,然后键入相应的数据。

若需要编辑已有的数据,PB只需选中要编辑的单元格,然后直接键入新的数据。

二、数据处理与分析1. 数据筛选与排序PB可使用Excel提供的筛选功能,选择需要操作的数据范围,在“数据”选项卡中选择“筛选”按钮,然后根据需要进行筛选条件的设置。

对于数据排序,PB可通过选择需要排序的数据范围,在“数据”选项卡中选择“排序”按钮,按照指定的排序规则进行排序。

2. 数据透视表的制作PB需首先选中所要制作透视表的数据范围,然后在“插入”选项卡中点击“透视表”按钮。

在弹出的对话框中,PB可选择需要作为行、列和数据的字段,从而生成需要的透视表。

三、图表制作1. 制作柱状图PB需选中需要制作柱状图的数据范围,然后在“插入”选项卡中点击“柱状图”按钮。

在弹出的图表类型中,PB可选择适合的柱状图样式,并对图表效果进行调整。

2. 制作折线图PB需选中需要制作折线图的数据范围,然后在“插入”选项卡中点击“折线图”按钮。

在弹出的图表类型中,PB可选择适合的折线图样式,并进行必要的调整和编辑。

函数max的使用方法

函数max的使用方法

函数max的使用方法在Python中,max()函数是一个内置函数,用于返回给定参数序列或者使用迭代器中最大的元素。

max()函数的语法如下:max(arg1, arg2, *args[, key])其中,arg1, arg2以及*args是要比较的参数,可以是整数、浮点数、字符串、列表等。

key是一个可选的参数,用于指定一个带有单个参数的函数,这个函数将用于为每个参数提供一个用于比较的键。

下面通过一些具体的例子来演示max()函数的使用方法。

1. 比较整数首先,我们来比较一组整数,找出其中最大的数:nums = [5, 9, 3, 7, 2]print(max(nums)) # 输出:9结果是9,因为9是给定的整数序列中的最大值。

2. 比较浮点数同样,我们也可以比较一组浮点数,找出最大值:nums = [3.14, 2.5, 1.8, 4.2]print(max(nums)) # 输出:4.2结果是4.2,因为4.2是给定的浮点数序列中的最大值。

3. 比较字符串max()函数也可以用于比较字符串,找出字典序最大的字符串:words = ["apple", "banana", "orange"]print(max(words)) # 输出:orange结果是"orange",因为"orange"是给定的字符串序列中字典序最大的字符串。

4. 比较列表除了基本数据类型,max()函数也可以比较列表中的元素,找出最大的元素:nums = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]print(max(nums)) # 输出:[7, 8, 9]结果是[7, 8, 9],因为[7, 8, 9]是给定的列表序列中的最大元素。

5. 指定key函数有时候,我们需要比较的不是列表中的元素本身,而是元素的某个属性或者通过某些规则计算得到的值。

max函数的意思

max函数的意思

max函数的意思max函数是一个内置函数,用于返回一组值中的最大值。

它可以接受任意数量的参数,也可以接受一个可迭代对象作为参数,例如列表、元组或集合。

max函数的工作原理是比较传入的参数或可迭代对象中的每个元素,并返回最大的元素。

如果传入的参数为空,则会抛出一个ValueError异常。

max函数可以用于不同的数据类型,包括整数、浮点数、字符串和自定义对象。

对于数字类型,max函数按照数值大小进行比较。

对于字符串类型,max函数按照字母顺序进行比较。

对于自定义对象,可以通过定义对象的比较方法来指定比较规则。

除了返回最大值之外,max函数还可以接受一个可选的关键字参数key,用于指定一个函数,该函数将在比较元素时被调用。

通过使用key参数,可以根据指定的函数对元素进行处理后再进行比较,从而实现更灵活的比较方式。

以下是一些使用max函数的示例:1. 返回最大的整数:max(1, 2, 3, 4, 5) # 输出: 52. 返回最大的浮点数:max(3.14, 2.71, 1.618) # 输出: 3.143. 返回最大的字符串:max("apple", "banana", "cherry") # 输出: "cherry"4. 返回最大的自定义对象:class Person:def __init__(self, name, age): = nameself.age = agedef __repr__(self):return f"Person('{}', {self.age})"p1 = Person("Alice", 20)p2 = Person("Bob", 30)p3 = Person("Charlie", 25)max(p1, p2, p3, key=lambda p: p.age) # 输出: Person('Bob', 30)max函数是一个非常有用的函数,可以在比较一组值时帮助我们找到最大的元素。

函数max的作用

函数max的作用

函数max的作用最常见的用法是找到一组数中的最大值。

例如,我们可以使用max函数找到一组数字中的最大值,如下所示:```numbers = [3, 5, 1, 8, 2]maximum = max(numbers)print(maximum) # 输出8```上述代码中,我们定义了一个包含多个数的列表numbers,并使用max函数找到了列表中的最大值8、我们将其分配给变量maximum,并将其打印出来。

max函数还可以接受多个参数,并返回这些参数中的最大值。

例如:```maximum = max(3, 5, 1, 8, 2)print(maximum) # 输出8```在这种情况下,我们直接使用了一系列数字作为函数max的参数,而不是将它们存储在列表中。

max函数也可以用于比较字符串。

它会根据字母的顺序找到最大的字符串。

例如:strings = ["apple", "banana", "cherry", "kiwi"]maximum = max(strings)print(maximum) # 输出kiwi```在这个例子中,max函数找到了字符串列表中字母排序最大的字符串"kiwi"。

除了最常见的用法之外,max函数还提供了一些高级用法。

例如,默认情况下,它会将字符串按照字母的顺序进行比较。

但是,我们也可以使用参数key来自定义比较的方式。

例如,我们可以使用len函数来找到具有最长长度的字符串:```strings = ["apple", "banana", "cherry", "kiwi"]maximum = max(strings, key=len)print(maximum) # 输出banana```在这个例子中,我们使用了len函数作为key参数,max函数将会根据字符串的长度进行比较,找到最长的字符串"banana"。

pb函数库之数值计算函数

pb函数库之数值计算函数

Abs()‎功能计算‎绝对值。

‎语法Abs‎( n ‎)参数n‎:要得到绝‎对值的数值‎型变量或表‎达式返回值‎返回值的数‎据类型与n‎的数据类型‎相同,函数‎执行成功时‎返回n的绝‎对值。

如果‎参数n的值‎为NULL‎,Abs(‎)函数返回‎N ULL。

‎---‎-----‎-----‎-----‎-----‎-----‎-----‎-----‎-----‎-----‎-----‎-----‎-----‎-----‎-----‎-----‎--C‎e ilin‎g()功‎能返回大于‎n的最小整‎数。

语法‎C eili‎n g ( ‎n )参‎数n:数值‎型变量或表‎达式返回值‎返回值的数‎据类型与n‎的数据类型‎相同。

函数‎执行成功时‎返回大于n‎的最小整数‎。

如果参数‎n的值为N‎U LL,C‎e ilin‎g()函数‎返回NUL‎L。

-‎-----‎-----‎-----‎-----‎-----‎-----‎-----‎-----‎-----‎-----‎-----‎-----‎-----‎-----‎-----‎----‎Cos(‎)功能计‎算余弦,其‎中参数以弧‎度为单位。

‎语法Co‎s ( n‎)参数‎n:数值型‎变量或表达‎式返回值D‎o uble‎。

函数执行‎成功时返回‎n的余弦。

‎如果参数n‎的值为NU‎L L,Co‎s()函数‎返回NUL‎L。

-‎-----‎-----‎-----‎-----‎-----‎-----‎-----‎-----‎-----‎-----‎-----‎-----‎-----‎-----‎-----‎----‎Exp(‎)功能计‎算e的n次‎方。

语法‎E xp (‎n )‎参数n:指‎定幂值返回‎值Doub‎l e。

函数‎执行成功时‎返回e(约‎等于2.7‎1828)‎的n次方。

‎如果参数n‎的值为NU‎L L,Ex‎p()函数‎返回NUL‎L。

-‎-----‎-----‎-----‎-----‎-----‎-----‎-----‎-----‎-----‎-----‎-----‎-----‎-----‎-----‎-----‎----‎Fact‎()功能‎计算n的阶‎乘。

数据分析-PB程序设计

数据分析-PB程序设计

下页
上页
返回首页
⑥在组标题区定义分组字段或表达式的显示名称,组尾区 放置分组的字段或表达式。 下页 上页 返回首页
8.1.2 实例:学生选课系统版本16
例8-1 设计“学生选课系统”的“学生统计”窗口。 设计:该模块实现统计每个班级的学生人数、平均年龄 和所有班级的学生总人数、总平均年龄。
脚本:
下页
上页
返回首页
(4)单击工具栏静态文本控件,放置静态文本控件“st_1”, 并命名为“班级学生统计情况”;单击工具栏命令按 钮控件,放置命令按钮控件“cb_1”,并命名为“关 闭”。调整窗口大小以及控件大小、位置。
下页
上页
返回首页
(5)选择“Open”事件,编写脚本。 (6)选择“关闭”按扭“Clicked”事件,编写脚本。 (7)单击PowerBar工具栏“保存”图标,输入窗口名 “w_xstj”。 (8)打开菜单“m_main”,双击“数据分析”菜单标题“学 生统计”菜单项,在下部脚本窗口中编写脚本: Open(w_xstj) (9)单击PowerBar工具栏“Run”图标,运行应用程序。选 择“数据分析”→“学生统计”命令,打开“学生统计” 窗口。 下页 上页 返回首页
④选中表sc,单击“Open”按钮,打开数据源编辑窗口。 ⑤单击选中表sno列,并单击“Group”选项卡,将左部 sc.sno列拖动至右部,指定按sno列分组。
下页
上页
返回首页
⑥单击数据源编辑窗口的“Compute”选项卡。
下页
上页
返回首页
⑦指向空白编辑行单击右键,打开快捷菜单,选择 “Functions”命令,打开函数对话框。
(8)击“Compute”选项卡,指向编辑行,单击右键,打 开快捷菜单,分别粘贴计数函数count(*)和平均值函 数avg(year(getdate())-year(birthday)),并分别指定显 示列内容为“人数”和“平均年龄”。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

点后第n位的数值,如果函数执行失败或任何参数的值为NULL,Round()函数返回NULL。

Sign()
功能确定n是整数、负数还是零。

语法Sign ( n )
参数n:数值型变量或表达式,指定要测试符号的值返回值Integer。

当n大于0时返回1;当n小于0时返回-1;当n等于0时返回0。

如果参数n的值为NULL,Sign()函数返回NULL。

Sin()
功能计算正弦,其中参数以弧度为单位。

语法Sin( n )
参数n:数值型变量或表达式返回值Double。

函数执行成功时返回n的正弦。

如果参数n 的值为NULL,Sin()函数返回NULL。

Sqrt()
功能计算平方根。

语法Sqrt ( n )
参数n:数值型变量或表达式,指定要计算平方根的数据返回值Double。

函数执行成功时返回n的平方根。

如果n是负数,则执行该函数时引发运行错误。

如果参数n的值为NULL,Sqrt()函数返回NULL。

Tan()
功能计算正切,其中参数以弧度为单位。

语法Tan( n )
参数n:数值型变量或表达式返回值Double。

函数执行成功时返回n的正切。

如果参数n 的值为NULL,Tan()函数返回NULL。

Truncate()
功能截断数值到指定的小数位。

语法Truncate ( x, n )
参数x:要截断的数值型数据n:整数类型,指定从哪个小数位上截断x。

有效值在0到18之间返回值Decimal。

函数执行成功时返回将x截断到小数点后第n位的数值,如果函数执行失败或任何参数的值为NULL,Truncate()函数返回NULL。

所谓截断就是舍弃指定位之后的数值。

Asc()
功能得到字符串第一个字符的ASCII码整数值。

语法Asc ( string )
参数string:要得到第一个字符ASCII值的字符串返回值Integer。

函数执行成功时返回string 参数第一个字符的ASCII值,如果string参数的值为NULL,则Asc()函数返回NULL。

Char()
功能将字符串的第一个字符、Blob变量的第一个值、或一个整数转换成字符。

语法Char ( n )
参数n:字符串、Blob变量或整数,也可以是包含上述类型数据的Any类型变量返回值Char。

返回参数n的第一个字符。

如果n参数的值为NULL,则Char()函数返回NULL。

Dec()
功能将字符串或Blob值转换成Decimal类型的值。

语法Dec ( stringorblob )
参数stringorblob:string类型变量或Blob类型变量。

Blob类型变量时,把该变量第一个值转换为Decimal类型的值,其余部分被忽略。

stringorblob参数也可以是包含上述类型数据的。

相关文档
最新文档