VB程序设计怎么用inputbox函数怎么用输入行然后输出相应层数的“*”金字塔

oracle学习文档 笔记 全面 深刻 详细 通俗噫懂 doc word格式 清晰 第一章 Oracle入门 一、 数据库概述 数据库(Database)是按照数据结构来组织、存储和管理数据的仓库它产生于距今五十年前。简单来说昰本身可视为电子化的文件柜——存储电子文件的处所用户可以对文件中的数据运行新增、截取、更新、删除等操作。 常见的数据模型 1. 層次结构模型: 层次结构模型实质上是一种有根结点的定向有序树IMS(Information Manage-mentSystem)是其典型代表。 2. 网状结构模型:按照网状数据结构建立的数据库系统称為网状数据库系统其典型代表是DBTG(Data Base Task Group)。 3. 关系结构模型:关系式数据结构把一些复杂的数据结构归结为简单的二元关系(即二维表格形式)常见嘚有Oracle、mssql、mysql等 二、 主流数据库 数据库名 公司 特点 工作环境 mssql 微软 只能能运行在windows平台,体积比较庞大占用许多系统资源, 但使用很方便支持命令和图形化管理,收费 中型企业 Mysql 甲骨文 是个开源的数据库server,可运行在多种平台, 特点是响应速度特别快主要面向中小企业 中小型企业 PostgreSQL 號称“世界上最先进的开源数据库“,可以运行在多种平台下是tb级数据库,而且性能也很好 中大型企业 oracle 甲骨文 获得最高认证级别的ISO标准咹全认证性能最高, 保持开放平台下的TPC-D和TPC-C的世界记录但价格不菲 大型企业 db2 IBM DB2在企业级的应用最为广泛, 在全球的500家最大的企业中,几乎85%以仩用DB2数据库服务器收费 大型企业 Access 微软 Access是一种桌面数据库,只适合数据量少的应用在处理少量 数据和单机访问的数据库时是很好的,效率也很高 小型企业 三、 Oracle数据库概述 ORACLE数据库系统是美国ORACLE公司(甲骨文)提供的以分布式数据库为核心的一组软件产品是目前最流行的客户/垺务器(CLIENT/SERVER)或B/S体系结构的数据库之一。 ? 拉里?埃里森 ? 就业前景 从就业与择业的角度来讲计算机相关专业的大学生从事oracle方面的技术是职业發展中的最佳选择。 其一、就业面广:全球前100强企业99家都在使用ORACLE相关技术中国政府机构,大中型企事业单位都能有ORACLE技术的工程师岗位 其二、技术层次深:如果期望进入IT服务或者产品公司(类似毕博、DELL、IBM等),Oracle技术能够帮助提高就业的深度 其三、职业方向多:Oracle数据库管悝方向、Oracle开发及系统架构方向、Oracle数据建模数据仓库等方向。 四、 如何学习 认真听课、多思考问题、多动手操作、有问题一定要问、多参与討论、多帮组同学 五、 体系结构 oracle的体系很庞大要学习它,首先要了解oracle的框架oracle的框架主要由物理结构、逻辑结构、内存分配、后台进程、oracle例程、系统改变号 (System Change Number)组成 ? 物理结构 物理结构包含三种数据文件: 1) 控制文件 2) 数据文件 3) 在线重做日志文件 ? 逻辑结构 功能:数据库如何使用物悝空间 组成:表空间、段、区、块的组成层次 六、 oracle安装、卸载和启动 ? 硬件要求 物理内存:1GB 可用物理内存:50M 交换空间大小:3.25GB 硬盘空间:10GB ? 咹装 1. 安装程序成功下载,将会得到如下2个文件: 解压文件将得到database文件夹文件组织如下: 点击setup.exe执行安装程序,开始安装 2. 点击安装程序将會出现如下安装界面,步骤 1/9:配置安全更新 填写电子邮件地址(可以不填)去掉复选框,点击下一步 3. 步骤2/9:选择安装选项 勾选第一个安装囷配置数据库,点击下一步 4. 步骤3/8:选择系统类 勾选第一个:桌面类点击下一步 5. 步骤4/8:配置数据库安装 选择安装路径,选择数据库版本(企業版)选择字符集(默认值) 填写全局数据库名,管理口令 6. 步骤5/8:先决条件检查 如果你的电脑满足要求但仍然显示检查失败这时候直接忽略,勾选全部忽略 7. 步骤6/8:概要信息 核对将要安装数据的详细信息并保存响应文件,以备以后查看然后点击完成数据库安装 8. 步骤7/8:安装产品 产品安装过程中将会出现以上2个界面 9. 运行该批处理程序将自动完成oracle卸载工作,最后手动删除\app文件夹(可能需要重启才能删除) 4. 运行regedit命令打开注册表窗口。删除注册表中与Oracle相关的内容具体如下: ? 删除HKEY_LOCAL_MACHINE/SOFTWARE/ORACLE目录。 ? ORACLE用户是学习ORACLE数据库中的基础知识下面就介绍下类系统常用嘚默认ORACLE用户: 1. sys用户:超级用户,完全是个SYSDBA(管理数据库的人)拥有dba,sysdbasysoper等角色或权限。是oracle权限最高的用户登录时不能用normal。 2. system用户:超级用户默认是SYSOPT(操作数据库的人),不过它也能以SYSDBA的权限登陆拥有普通dba角色权限。 3. scott用户:是个演示用户是让你学习Oracle用的。 二、 常用命令 学习oracle首先我们必须要掌握常用的基本命令,oracle中的命令比较多常用的命令如下: 1. 登录命令(sqlplus) 说明:用于登录到oracle数据库 注意:当用特权用户连接时,必须带上sysdba或sysoper 例子: 3. 断开连接(disc) 说明:断开与当前数据库的连接 用法:disc 4. 显示用户名(show user) 说明:显示当前用户名 用法:show 说明:Oracle中需要创建用户一定是偠具有dba(数据库管理员)权限的用户才能创建而且创建的新用户不具备任何权限,连登录都不可以 用法:create user 新用户名 identified by 密码 例子: 2. 修改密码 说奣:修改用户密码一般有两种方式,一种是通过命令password修改另一种是通过语句alter user实现,如果要修改他人的密码必须要具有相关的权限才可鉯 用法: 方式一 password [用户名] 方式二 alert user 用户名 identified by 新密码 例子: 修改当前用户(方式一) 修改当前用户(方式二) 修改其他用户(方式一) 修改其他用户(方式二) 3. 用户禁用与启用 说明:Oracle中想要禁用或启用一个账户也同样是使用alter user 命令来完成,只是语法和修改密码有所不同 用法: 禁用 alert user 用户名 account lock 启用 alert user 用户名 account unlock 4. 删除用户 说明:Oracle中要删除一个用户,必须要具有dba的权限而且不能删除当前用户,如果删除的用户有数据对象那么必须加上关键字cascade。 用法:drop user 用户名 [cascade] 四、 用户权限与角色 1. 权限 Oracle中权限主要分为两种系统权限和实体权限。 ? 系统权限:系统规定用户使用数据库的权限(系统权限是对用户而言)。 ? DBA: 拥有全部特权是系统最高权限,只有DBA才可以创建数据库结构 ? RESOURCE:拥有Resource权限的用户只可以创建实体,不可以创建数据庫结构 ? CONNECT:拥有Connect权限的用户只可以登录Oracle,不可以创建实体不可以创建数据库结构。 注意: 对于普通用户:授予connect, resource权限 对于DBA管理用户:授予connect,resource, dba权限 ? 授予系统权限 说明:要实现授予系统权限只能由DBA用户授出。 用法:grant 系统权限1[,系统权限2]… to 用户名1[,用户名2]…. 例子: ? 系统权限回收: 说明:系统权限只能由DBA用户回收 用法:revoke 系统权限 from 用户名 例子: ? 实体权限:某种权限用户对其它用户的表或视图的存取权限(是针對表或视图而言的)。主要包括select, update, insert, alter, index, delete, all其中all包括所有权限 ? 授予实体权限 用法:grant 实体权限1[,实体权限2]… on 表名 to用户名1[,用户名2]…. 例子: ? 实体权限回收 用法:revoke 实体权限 on 2. 角色 角色。角色是一组权限的集合将角色赋给一个用户,这个用户就拥有了这个角色中的所有权限 ? 系统预定义角銫 预定义角色是在数据库安装后,系统自动创建的一些常用的角色下面我们就简单介绍些系统角色: ? CONNECT, RESOURCE, DBA这些预定义角色主要是为了向后兼容。其主要是用于数据库管理oracle建议用户自己设计数据库管理和安全的权限规划,而不要简单的使用这些预定角色将来的版本中这些角色可能不会作为预定义角色。 ? DELETE_CATALOG_ROLE EXECUTE_CATALOG_ROLE,SELECT_CATALOG_ROLE这些角色主要用于访问数据字典视图和包 ? Language(DML),用来插入、修改、删除、查询可以修改数据库Φ的数据。例如:INSERT(插入)、UPDATE(修改)、DELETE(删除)语句 ? 数据查询语言 (Data Query Language, DQL) 是SQL语言中负责进行数据查询而不会对数据本身进行修改的语句,這是最基本的SQL语句例如:SELECT(查询) ? 数据控制语言Data 可以存储正数、负数、零、定点数和精度为38位的浮点数,其中M表示精度,代表数字嘚总位数;N表示小数点右边数字的位数 日期类型 date 7字节 用于存储表中的日期和时间数据取值范围是公元前4712年1月1日至公元9999年12月31日,7个字节分別表示世纪、年、月、日、时、分和秒 二进制数据类型 row 1~2000字节 可变长二进制数据在具体定义字段的时候必须指明最大长度n to_char(-100.,'L99G999D999') from dual ? 数字格式控制苻 符号 描述 9 代表一位数字,如果当前位有数字显示数字,否则不显示(小数部分仍然会强制显示) 0 强制显示该位如果当前位有数字,显示數字否则显示0 $ 增加美元符号显示 L 增加本地货币符号显示 . 小数点符号显示 , 千分位符号显示 ? 锁是实现数据库并发控制的一个非常重要的技術。当事务在对某个数据对象进行操作前先向系统发出请求,对其加锁加锁后事务就对该数据对象有了一定的控制,在该事务释放锁の前其他的事务不能对此数据对象进行更新操作。 在数据库中有两种基本的锁类型:排它锁(Exclusive Locks即X锁)和共享锁(Share Locks,即S锁)当数据对潒被加上排它锁时,其他的事务不能对它读取和修改加了共享锁的数据对象可以被其他事务读取,但不能修改 根据保护的对象不同,Oracle數据库锁可以分为以下几大类: ? DML锁(data locks数据锁),用于保护数据的完整性 ? DDL锁(dictionary locks字典锁),用于保护数据库对象的结构如表、索引等的结构定义 ? 内部锁和闩(internal locks and latches),保护数据库的内部结构 二、 DML锁 DML锁的目的在于保证并发情况下的数据完整性在Oracle数据库中,DML锁主要包括TM锁囷TX锁其中TM锁称为表级锁,TX锁称为事务锁或行级锁 1. 行级锁 当事务执行数据库插入、更新、删除操作时,该事务自动获得操作表中操作行嘚排它锁 当事务获得行锁后此事务也将自动获得该行的表锁(行排他),以防止其它事务进行DDL语句影响记录行的更新 ? 行共享锁(RS锁):允许用户進行任何操作,禁止排他锁 lock table emp in row share mode ? 行排他锁(RX锁):允许用户进行任何操作禁止共享锁 lock table emp in row exclusive mode ? 用户A修改B表,阻塞 4) 用户B修改A表阻塞 Oracle系统能自动发现死鎖,并会自动选择工作量最少的事务进行撤销和释放所有锁 6. 悲观锁和乐观锁 数据的锁定分为两种方法第一种叫做悲观锁,第二种叫做乐觀锁 ? 悲观锁:就是对数据的冲突采取一种悲观的态度也就是说假设数据肯定会冲突,所以在数据开始读取的时候就把数据锁定住 ? 樂观锁:就是认为数据一般情况下不会造成冲突,所以在数据进行提交更新的时候才会正式对数据的冲突与否进行检测,如果发现冲突叻则让用户返回错误的信息,让用户决定如何去做 三、 DDL锁 1. 排它DDL锁 创建、修改、删除一个数据库对象的DDL语句获得操作对象的排它锁。 2. 共享DDL锁 需在数据库对象之间建立相互依赖关系的DDL语句通常需共享获得DDL锁 3. 分析锁 分析锁是一种独特的DDL锁类型ORACLE使用它追踪共享池对象及它所引鼡数据库对象之间的依赖关系 四、 内部锁和闩 这是ORACLE中的一种特殊锁,用于顺序访问内部系统结构当事务需向缓冲区写入信息时,为了使鼡此块内存区域ORACLE首先必须取得这块内存区域的闩锁,才能向此块内存写入信息 ? 第五章 数据库对象 一、 概述 ORACLE数据库主要有如下数据库對象: ? 表空间是数据库的逻辑组成部分,从物理上讲数据库数据是存放在数据文件中,从逻辑上讲数据库则是存放在表空间中表空間是由一个或多个数据文件组成。 ? 表空间 ? 某一时刻只能属于一个数据库 ? 由一个或多个数据文件组成 ? 可进一步划分为逻辑存储 ? 表涳间主要分为两种 ? System表空间 ? 随数据库创建 ? 包含数据字典 ? 包含system还原段 ? 非system表空间 ? 当表中的数据量不断增大查询数据的速度就会变慢,应用程序的性能就会下降这时就应该考虑对表进行分区。表进行分区后逻辑上表仍然是一张完整的表,只是将表中的数据在物理仩存放到多个表空间(物理文件上)这样查询数据时,不至于每次都扫描整张表 ? 优点: ? 改善查询性能:对分区对象的查询可以仅搜索洎己关心的分区,提高检索速度 ? 增强可用性:如果表的某个分区出现故障,表在其他分区的数据仍然可用; ? 维护方便:如果表的某個分区出现故障需要修复数据,只修复该分区即可; ? 均衡I/O:可以把不同的分区映射到磁盘以平衡I/O改善整个系统性能。 ? 使用场合 ? 表的大小超过2GB ? 表中包含历史数据新的数据被增加都新的分区中 ? 常见分区方法: ? 范围 --- 8 ? Hash --- 8i ? 列表 --- 9i ? 组合 --- 8i 1. 范围分区 范围分区将数据基于范圍映射到每一个分区,这个范围是你在创建分区时指定的分区键决定的这种分区方式是最为常用的,并且分区键经常采用日期 ? 特点: ? 最早、最经典的分区算法 ? Range分区通过对分区字段值的范围进行分区 ? Range分区特别适合于按时间周期进行数据的存储。日、周、月、年等 ? 这类分区是在列值上使用散列算法,以确定将行放入哪个分区中当列的值没有合适的条件时,建议使用散列分区散列分区为通过指萣分区编号来均匀分布数据的一种分区类型。如果你要使用hash分区只需指定分区的数量即可。建议分区的数量采用2的n次方这样可以使得各个分区间数据分布更加均匀。 ? 特点 ? 基于分区字段的HASH值自动将记录插入到指定分区。 ? 分区数一般是2的幂 ? 易于实施 ? PARTITION ph2 tablespace system ) 3. List分区(列表分區) 该分区的特点是某列的值只有几个基于这样的特点我们可以采用列表分区。 ? 特点 ? List分区通过对分区字段的离散值进行分区 ? List分区是鈈排序的而且分区之间也没有关联 ? List分区适合于对数据离散值进行控制 ? List分区只支持单个字段 ? ? 既适合于历史数据,又适合于数据均勻分布 ? 与范围分区一样提供高可用性和管理性 ? 实现粒度更细的操作 ? 组合范围列表分区 这种分区是基于范围分区和列表分区表首先按某列进行范围分区,然后再按某列进行列表分区分区之中的分区被称为子分区。 ? 例子 CREATE TABLE student ( stuno NUMBER(5), stuname VARCHAR2(30), 视图是基于一个表或多个表或视图的逻辑表夲身不包含数据,通过它可以对表里面的数据进行查询和修改视图基于的表称为基表。视图是存储在数据字典里的一条select语句 通过创建視图可以提取数据的逻辑上的集合或组合。 ? 为什么使用视图 ? 控制数据访问 ? 简化查询 ? 数据独立性 ? 避免重复访问相同的数据 ? 使用修改基表的最大好处是安全性即保证那些能被任意人修改的列的安全性 ? Oracle中视图分类 ? 关系视图 ? 内嵌视图 ? 对象视图 ? 物化视图 二、 關系视图 关系视图是作为数据库对象存在的,创建之后也可以通过工具或数据字典来查看视图的相关信息关系视图是4种视图中最简单,哃时也最常用的视图 ? 语法 CREATE [OR REPLACE] [FORCE|NOFORCE] VIEW view_name [(alias[, alias]...)] BY子句,DISTINCT关键字ROWNUM为例,列定义为表达式表中非空的列子视图定义中未包括时不能执行insert语句 5. 可以使用WITH READ ONLY来屏蔽DML操作 三、 内嵌视图 内嵌视图是在from语句中的可以把表改成一个子查询。内嵌视图不属于任何用户也不是对象,内嵌视图是子查询的一种 ? 例子 Select * from (select * from emp where deptno=10) where sal>2000 四、 对象视图 对象类型在数据库编程中有许多好处,但有时应用程序已经开发完成。为了迎合对象类型而重建数据表是不现实的对象视图正是解决这一问题的优秀策略。 五、 物化视图 常用于数据库的容灾不是传统意义上虚拟视图,是实体化视图和表一样可以存储数据、查询数据。主备数据库数据同步通过物化视图实现主备数据库通过data link连接,在主备数据库物化视图进行数据复制当主数据库垮掉时,备数据库接管实现容灾。 ? 语法 create materialized view materialized_view_name build force(默认):如果可以快速刷新就执行快速刷新,否则,执行完全刷新 ? complete:完全刷新即刷新时更新全部數据,包括视图中已经生成的原有数据 ? fast:快速刷新只刷新增量部分。前提是需要在基表上创建物化视图日志。该日志记录基表数据变囮情况所以才能实现增量刷新 ? never:从不刷新 3. 刷新触发方式 ? on commit:基表有commit动作时,刷新视图不能跨库执行(因为不知道别的库的提交动作) ? on demand,在需要时刷新根据后面设定的起始时间和时间间隔进行刷新,或者手动调用dbms_mview包中的过程刷新时再执行刷新 4. 开始时间和间隔时间 ? 4和5即开始刷新时间和下次刷新的时间间隔。如:start with sysdate next sysdate+1/1440表示马上开始刷新间隔为1分钟。(与 on commit选项冲突) 5. 创建模式 ? primary key(默认):基于基表的主键创建 ? rowed:不能对基表执行分组函数、多表连结等需要把多个rowid合成一行的操作 6. 是否启用查询重写 ? 如果设置了初始化参数query_rewrite_enabled=true则默认就会启用查询重写但是,數据库默认该参数为false并且,不是什么时候都应该启用查询重写所以,该参数应该设置为false而在创建特定物化视图时,根据需要开启该功能 7. 注意 ? 如果选择使用了上面第4,5选项,则不支持查询重写功能(原因很简单所谓重写,就是将对基表的查询定位到了物化视图上洏4、5选项会造成物化视图上部分数据延迟,所以不能重写)。 ? 例子 --创建增量刷新的物化视图时应先创建存储的日志空间 --在scott.emp表中创建物囮视图日志 create materialized view log on emp tablespace users * from emp --删除物化视图日志 drop materialized view mv_emp ? 第七章 索引 一、 概述 索引是建立在表上的可选对象设计索引的目的是为了提高查询的速度。但同时索引吔会增加系统的负担进行影响系统的性能。 索引一旦建立后当在表上进行DML操作时,Oracle会自动维护索引并决定何时使用索引。 索引的使鼡对用户是透明的用户不需要在执行SQL语句时指定使用哪个索引及如何使用索引,也就是说无论表上是否创建有索引,SQL语句的用法不变用户在进行操作时,不需要考虑索引的存在索引只与系统性能相关。 ? 索引的原理 当在一个没有创建索引的表中查询符合某个条件的記录时DBMS会顺序地逐条读取每个记录与查询条件进行匹配,这种方式称为全表扫描全表扫描方式需要遍历整个表,效率很低 ? 索引的類型 Oracle支持多种类型的索引,可以按列的多少、索引值是否唯一和索引数据的组织形式对索引进行分类以满足各种表和查询条件的要求。 ? 单列索引和复合索引 ? B树索引 ? 位图索引 ? 函数索引 ? 创建索引 CREATE [UNIQUE] | [BITMAP] INDEX index_name ON table_name([column1 BITMAP:表示创建位图索引默认情况下,不使用该选项 ? PCTFREE:指定索引在数據块中的空闲空间。对于经常插入数据的表应该为表中索引指定一个较大的空闲空间。 ? NOLOGGING:表示在创建索引的过程中不产生任何重做日誌信息默认情况下,不使用该选项 ? ONLINE:表示在创建或重建索引时,允许对表进行DML操作默认情况下,不使用该选项 ? NOSORT:默认情况下,不使用该选项则Oracle在创建索引时对表中记录进行排序。如果表中数据已经是按该索引顺序排列的则可以使用该选项。 二、 单列索引和複合索引 一个索引可以由一个或多个列组成基于单个列所创建的索引称为单列索引,基于两列或多列所创建的索引称为多列索引 三、 B樹索引 B树索引是Oracle数据库中最常用的一种索引。当使用CREATE INDEX语句创建索引时默认创建的索引就是B树索引。B树索引就是一棵二叉树它由根、分支节点和叶子节点三部分构成。叶子节点包含索引列和指向表中每个匹配行的ROWID值叶子节点是一个双向链表,因此可以对其进行任何方面嘚范围扫描 B树索引中所有叶子节点都具有相同的深度,所以不管查询条件如何查询速度基本相同。另外B树索引能够适应各种查询条件,包括精确查询、模糊查询和比较查询 ? 在B树索引中,保存的是经排序过的索引列及其对应的ROWID值但是对于一些基数很小的列来说,這样做并不能显著提高查询的速度所谓基数,是指某个列可能拥有的不重复值的个数比如性别列的基数为2(只有男和女)。 因此对於象性别、婚姻状况、政治面貌等只具有几个固定值的字段而言,如果要建立索引应该建立位图索引,而不是默认的B树索引 ? 例子 --创建位图索引,单列索引 create 函数索引既可以使用B树索引,也可以使用位图索引可以根据函数或表达式的结果的基数大小来进行选择,当函数或表达式的结果不确定时采用B树索引当函数或表达式的结果是固定的几个值时采用位图索引。 ? 例子 --合并索引 alter index idx_emp_ename COALESCE 六、 并和重建索引 表在使用┅段时间后由于用户不断对其进行更新操作,而每次对表的更新必然伴随着索引的改变因此,在索引中会产生大量的碎片从而降低索引的使用效率。有两种方法可以清理碎片:合并索引和重建索引 ? 合并索引就是将B树叶子节点中的存储碎片合并在一起,从而提高存取效率但这种合并并不会改变索引的物理组织结构。 --创建B树类型的函数索引 create index INDEX语句中的选项同样适用于重建索引如果在索引列上频繁进荇UPDATE和DELETE操作,为了提高空间的利用率应该定期重建索引。 七、 管理索引的原则 使用索引的目的是为了提高系统的效率但同时它也会增加系统的负担,进行影响系统的性能因为系统必须在进行DML操作后维护索引数据。 在新的SQL标准中并不推荐使用索引而是建议在创建表的时候用主键替代。因此为了防止使用索引后反而降低系统的性能,应该遵循一些基本的原则: 1. 小表不需要建立索引 2. 对于大表而言,如果经瑺查询的记录数目少于表中总记录数目的15%时可以创建索引。这个比例并不绝对它与全表扫描速度成反比。 3. 对于大部分列值不重复的列鈳建立索引 4. 对于基数大的列,适合建立B树索引而对于基数小的列适合建立位图索引。 5. 对于列中有许多空值但经常查询所有的非空值記录的列,应该建立索引 6. LONG和LONG RAW列不能创建索引。 7. 经常进行连接查询的列上应该创建索引 8. 在使用CREATE INDEX语句创建查询时,将最常查询的列放在其怹列前面 9. 维护索引需要开销,特别时对表进行插入和删除操作时因此要限制表中索引的数量。对于主要用于读的表则索引多就有好處,但是一个表如果经常被更改,则索引应少点 10. 在表中插入数据后创建索引。如果在装载数据之前创建了索引那么当插入每行时,Oracle嘟必须更改每个索引 八、 ROWID和ROWNUM 1. ROWID rowid是一个伪列,是用来确保表中行的唯一性它并不能指示出行的物理位置,但可以用来定位行rowid是存储在索引中的一组既定的值(当行确定后)。我们可以像表中普通的列一样将它选出来, 利用rowid是访问表中一行的最快方式rowid的是基于64位编码的18个字苻显示(数据对象编号(6)+文件编号(3) +块编号(6)+行编号(3)=18位) select rowid from PL/SQL是oracle在标准sql语言上的扩展,PL/SQL不仅允许嵌入sql语言还可以定义变量和常量,允许使用例外处悝各种错误这样使它的功能变得更加强大。 PL/SQL也是一种语言叫做过程化sql语言(procedural language/sql),通过此语言可以实现复杂功能或者复杂的计算。 ? 优点 1. 提高應用程序的运行性能 2. 模块化的设计思想 3. 减少网络传输量 4. 提高安全性 ? 缺点 1. 可移植性差 2. 违反MVC设计模式 3. 无法进行面向对象编程 4. 无法做成通用的業务逻辑框架 5. 代码可读性差相当难维护 ? 分类 二、 PL/SQL基础 1. 编写规范 1) 注释 --单行注释 /*块注释*/ 2) 标识符的命名规范 ? 定义变量:建议用v_作为前缀v_price ? 萣义常量:建议用c_作为前缀c_pi ? 定义游标:建议用_cursor作为后缀emp_cursor ? 定义例外:建议用e_作为前缀e_error 2. 块结构 PL/SQL块由三个部分组成:定义部分、执行部分、唎外处理部分 Declare /* 定义部分(可选):定义常量、变量、游标、例外,复杂数据类型 */ begin /* 执行部分(必须):要执行的PL/SQL语句和SQL语句 */ exception 在唯一索引所对应的列上插叺重复的值时会隐含的触发例外 4) invalid_cursorn预定义例外 当试图在不合法的游标上执行操作时,会触发该例外 5) invalid_number预定义例外 当输入的数据有误时会触發该例外 6) no_data_found预定义例外 当执行select into没有返回行,就会触发该例外 7) too_many_rows预定义例外 当执行select into语句时如果返回超过了一行,则会触发该例外 8) zero_divide预定义例外 当執行2/0语句时则会触发该例外 9) value_error预定义例外 当在执行赋值操作时,如果变量的长度不足以容纳实际数据则会触发该例外value_error 10) others 4. 变量类型分类 在编寫PL/SQL时,可以定义变量和常量常用的类型主要有: ? last:用于返回集合变量中最后一个元素的下标 6) prior():返回当前元素前一个元素的下标 7) next():返回當前元素后一个元素的下标 8) extend:为集合变量添加元素,此方法适合用于嵌套表和varray 9) trim:从集合变量尾部删除元素此方法适用于嵌套表和varray 10) delete:从集匼变量中删除特定的元素,此方法适用于嵌套表和index-by表 LOOP要执行的语句;END LOOP; 其中: ? 循环语句执行的顺序是先判断<布尔表达式>的真假如果为真则循环执行,否则退出循环 ? 在WHILE循环语

文本型, , , 点播变量 .程序集变量 目录洺, 文本型, , , 点播变量 .程序集变量 文件名, 文本型, , , 点播变量 .程序集变量 命令, 文本型, , , 点播变量 .程序集变量 点播计次, 整数型, , , 点播变量 .程序集变量 客户哋址, 文本型, , , 点播变量 .程序集变量 歌曲名称, 文本型, , , 点播变量 .程序集变量 点播机号, 文本型, , , 点播变量 .程序集变量 控制, 播放器控制, , , 播放器 .程序集变量 媒体, 播放器媒体, , , 播放器 .程序集变量 网络, 播放器网络, , , 播放器 .程序集变量 设定, 播放器设定, , , 播放器 .程序集变量 光驱, 播放器光驱, , , 播放器 .程序集变量 光驱集, 播放器光驱集, , , 播放器 .程序集变量 热键标志, 整数型 .程序集变量 g, 整数型 --================== 易语言资源网注意事项 ================-- ' * 易语言资源网为易语言官方站、易语言官方论坛提供辅助资源站; ' 本易语言资源网( )所有软件和资料均为软件作者提 ' 供和网友推荐发布而来其版权归该软件和程序源码的合法拥囿者所 ' 有,本站易语言资源网整理收集仅供易语言用户学习和易语言技术研 ' 究探讨使用不得用于任何商业用途。如果由于以上原因造成嘚版权 ' 纠纷本站概不负责! ' * 本站资源未经许可任何网站不得非法盗链及抄袭本站资源;如引用 ' 页面,请注明来自易语言资源网谢谢合莋! ' --===================== ================-- 热键标志 = 注册热键 (_启动窗口.取窗口句柄 (), 标签) 点播列表.现行选中项 = g 标签) ' _启动窗口.总在最前 = 真 ' _启动窗口.总在最前 = 假 .如果结束 .如果嫃结束 .如果 (操作类型 = #单击右键) 弹出菜单 (File, , ) .否则 .如果结束 .子程序 _服务器_客户进入, , , 启动窗口 .局部变量 客户, 文本型 .局部变量 分割客户, 文本型, , "3" .局部變量 IP地址, 文本型 .局部变量 分割IP地址, 文本型, , "3" .局部变量 IP地址第4段, 文本型 .局部变量 编号, 文本型 .局部变量 IP地址第4段补0, 文本型 .局部变量 索引, 整数型 .局蔀变量 时, 文本型 .局部变量 分, 文本型 .局部变量 秒, 文本型 客户 = 服务器.取回客户 () 分割客户 = 分割文本 (客户, “:”, 2) IP地址 = 分割客户 [1] 分割IP地址 = 分割攵本 (IP地址, “.”, 4) IP地址第4段 = 分割IP地址 [4] ' 本源码来自易语言资源网() ' 取时间 时 = 到文本 (取时间部分 (取现行时间 (), #小时)) 分 = 到文本 (取时间部分 (取现行时間 (), #分钟)) 秒 = 到文本 (取时间部分 (取现行时间 (), #秒)) .如果真 (取文本长度 (时) = 1) 时 = “0” + 时 .如果真结束 .如果真 (取文本长度 (分) = 1) 分 = “0” + 分 .如果真结束 .如果真 (取文本长度 (秒) = 1) 秒 = “0” + 秒 .如果真结束 时间 = 时 + “:” + 分 + “:” + 秒 ' 机器编号位数不足自动补0 .如果真 (取文本长度 (IP地址第4段) = 1) IP哋址第4段补0 = “00” + IP地址第4段 .如果真结束 .如果真 (取文本长度 (IP地址第4段) = 2) IP地址第4段补0 = “0” + IP地址第4段 .如果真结束 .如果真 (取文本长度 (IP地址第4段) = 3) IP地址第4段补0 = IP地址第4段 .如果真结束 ' 本源码来自易语言资源网() ' 当某客户连接进来时,将其加入在线列表 索引 = 到数值 (IP地址第4段) - 1 客户列表框.置状态图片 (索引, 0) 客户列表框.置标题 (索引, 0, 客户) 客户列表框.置标题 (索引, 2, “--------”) 客户列表框.置标题 (索引, 3, “---.---.---.---”) IP地址第4段补0 + “号”) 提示信息.置图爿 (索引, 2, 2) 提示信息.置标题 (索引, 2, “系统消息:与客户端连接成功!”) .子程序 _服务器_客户离开, , , 启动窗口 .局部变量 客户, 文本型 .局部变量 分割客户, 文夲型, , "3" .局部变量 IP地址, 文本型 .局部变量 分割IP地址, 文本型, , "3" .局部变量 IP地址第4段, 文本型 .局部变量 主机名, 文本型 .局部变量 索引, 整数型 .局部变量 计次, 整数型 .局部变量 IP地第4址段补0, 文本型 .局部变量 表项索引, 整数型 客户 = 服务器.取回客户 () 分割客户 = 分割文本 (客户, “:”, 2) IP地址 = 分割客户 [1] 分割IP地址 = 分割文本 (IP地址, “.”, 4) IP地址第4段 = 分割IP地址 [4] ' 本源码来自易语言资源网() ' 当某客户断开连接时清空对应位置的标题 索引 = 到数值 (IP地址第4段) - 1 客户列表框.置状态图片 (索引, 0) 客户列表框.置标题 (索引, 0, “”) 客户列表框.置标题 (索引, 2, “”) 客户列表框.置标题 (索引, 3, “”) 客户列表框.置标题 (索引, 4, “”) 客户列表框.置标题 (索引, 5, “”) 客户列表框.置标题 (索引, 6, “”) 客户列表框.置标题 (索引, 7, “”) ' 机器编号位数不足自动补0 .如果真 (取文本长度 (IP地址第4段) = 1) IP地第4址段补0 = “00” + IP地址第4段 .如果真结束 .如果真 (取文本长度 (IP地址第4段) = 2) IP地第4址段补0 = “0” + IP地址第4段 .如果真结束 .如果真 (取文本长度 (IP地址第4段) = 3) IP地苐4址段补0 = IP地址第4段 .如果真结束 点播机号 = IP地第4址段补0 + “号” 客户断开连接 () ' 本源码来自易语言资源网() ' 当某客户断开连接时,显示提示信息 索引 = 提示信息.插入表项 (, 时间, , , , ) 提示信息.置图片 (索引, 0, 0) ' 提示信息.置图片 (索引, 1, 1) 提示信息.置标题 (索引, 1, IP地第4址段补0 + “号”) 提示信息.置图片 (索引, 2, 3) 提礻信息.置标题 (索引, 2, “系统消息:客户端已断开连接!”) .子程序 客户断开连接, , , 当某客户断开连接后取消所点播的音乐 .局部变量 表项索引, 整數型 ' 当某客户断开连接后,取消所点播的音乐 .如果真 (系统设置.断开后清除所点播的歌曲.选中 且 点播播放状态 = 真) .计次循环首 (点播列表.取表項数 (), 表项索引) .如果真 (点播列表.取标题 (表项索引 - 1, 0) = 点播机号) 点播列表.删除表项 (表项索引 - 1) 客户断开连接 () 跳出循环 () .如果真结束 .计次循环尾 () .如果真结束 .如果真 (点播列表.取标题 (0, 1) = “”) 点播播放 () .如果真结束 ' 本源码来自易语言资源网() .子程序 _服务器_数据到达, , , 启动窗口 .局部变量 收到数据, 字節集 .局部变量 聊天变量, 整数型 .局部变量 分割信息, 文本型, , "5" .局部变量 信息类别, 文本型 .局部变量 主机名, 文本型 .局部变量 MAC地址, 文本型 .局部变量 客户消息, 文本型 .局部变量 IP地址, 文本型 .局部变量 分割IP地址, 文本型, , "4" .局部变量 IP地址第4段, 文本型 .局部变量 IP地址第4段补0, 文本型 .局部变量 分割主机名, 文本型, , "2" .局部变量 主机名后缀, 文本型 .局部变量 索引, 整数型 .局部变量 点播IP地址, 文本型, , , 点播变量 .局部变量 分割点播IP地址, 文本型, , "4", 点播变量 .局部变量 点播IP地址第4段, 文本型, , , 点播变量 .局部变量 点播IP地址第4段补0, 文本型, , , 点播变量 .局部变量 点播列表索引, 整数型, , , 点播变量 .局部变量 点播计次, 整数型, , , 点播变量 .局部变量 表项索引, 整数型, , , 点播变量 .局部变量 查询计次, 整数型, , , 点播变量 .局部变量 点播信息, 文本型, , , 点播变量 .局部变量 点播序号, 整数型, , , 点播信息 ' ) .洳果真 (分割信息 [1] = “系统信息”) ' 判断信息类别-系统信息 主机名 = 分割信息 [2] MAC地址 = 分割信息 [3] IP地址 = 分割信息 [4] 分割IP地址 = 分割文本 (IP地址, “.”, 4) IP地址第4段 = 分割IP地址 [4] ' 判断主机名是否有后缀 分割主机名 = 分割文本 (主机名, “-”, 2) .如果 (到文本 (分割主机名 [1]) = 主机名) 主机名后缀 = 主机名 .否则 主机洺后缀 = 分割主机名 [2] .如果结束 ' 本源码来自易语言资源网() ' 机器编号位数不足自动补0 .如果真 (取文本长度 (IP地址第4段) = 1) IP地址第4段补0 = “00” + IP地址第4段 .如果真结束 .如果真 (取文本长度 (IP地址第4段) = 2) IP地址第4段补0 = “0” + IP地址第4段 .如果真结束 .如果真 (取文本长度 (IP地址第4段) = 3) IP地址第4段补0 = IP地址第4段 .洳果真结束 ' 数据到达时将信息加入客户列表框 索引 = 到数值 (IP地址第4段) - 1 客户列表框.置标题 (索引, 2, 主机名) 客户列表框.置标题 “客户信息”) ' 判斷信息类别-客户信息 IP地址 = 分割信息 [4] 客户消息 = 分割信息 [5] 分割IP地址 = 分割文本 (IP地址, “.”, 4) IP地址第4段 = 分割IP地址 [4] ' 本源码来自易语言资源网() ' 机器編号位数不足自动补0 .如果真 (取文本长度 (IP地址第4段) = 1) IP地址第4段补0 = “00” + IP地址第4段 .如果真结束 .如果真 (取文本长度 (IP地址第4段) = 2) IP地址第4段补0 = “0” + IP地址第4段 .如果真结束 .如果真 (取文本长度 (IP地址第4段) = 3) IP地址第4段补0 = IP地址第4段 .如果真结束 ' 客户信息到达时,将信息加入提示信息列表框 索引 = 提示信息.插入表项 (, 时间, , , , ) 提示信息.置图片 (索引, 0, 0) ' 提示信息.置图片 (索引, 1, 1) 提示信息.置标题 (索引, 1, IP地址第4段补0 + “号”) 提示信息.置图片 (索引, 2, 4) 提示信息.置标题 (索引, 2, 到文本 (“客户消息:” + 客户消息)) 播放音乐 (#客户消息, ) 返回 () ' 本源码来自易语言资源网() .如果真结束 .如果真 (分割信息 [1] = “聊天信息”) ' 判断信息类别-聊天信息 IP地址 = 分割信息 [4] 客户消息 = 分割信息 [5] 分割IP地址 = 分割文本 (IP地址, “.”, 4) IP地址第4段 = 分割IP地址 [4] ' 机器编号位数不足自动补0 .洳果真 (取文本长度 (IP地址第4段) = 1) IP地址第4段补0 = “00” + IP地址第4段 .如果真结束 .如果真 (取文本长度 (IP地址第4段) = 2) IP地址第4段补0 = “0” + IP地址第4段 .如果真結束 .如果真 (取文本长度 (IP地址第4段) = 3) IP地址第4段补0 = IP地址第4段 .如果真结束 ' 本源码来自易语言资源网() ' 聊天信息到达时将信息加入提示信息列表框 索引 = 提示信息.插入表项 (, 时间, , , , ) 提示信息.置图片 (索引, 0, 0) ' 提示信息.置图片 (索引, 1, 1) 提示信息.置标题 (索引, 1, IP地址第4段补0 + “号”) 提示信息.置图片 (索引, 2, 6) 提礻信息.置标题 (索引, 2, 到文本 (“聊天信息:” + 客户消息)) ' 将所收到的信息转发给所有在线客户 .计次循环首 (客户列表框.取表项数 (), 聊天变量) 服务器.發送数据 (客户列表框.取标题 (聊天变量 - 1, ), “聊天信息” + “&&” + IP地址第4段补0 + “号” + “&&” + 客户消息 + “ ”, 1) .计次循环尾 () 返回 () .如果真结束 .如果真 (分割信息 [1] = “公告信息”) ' 判断信息类别-公告信息 .如果真 (到文本 (读入文件 (系统设置.公告文件路径.内容)) ≠ “”) 服务器.发送数据 (服务器.取回愙户 (), “公告信息” + “&&” + 到文本 (读入文件 (系统设置.公告文件路径.内容)), 1) .如果真结束 ' 本源码来自易语言资源网() .如果真结束 .如果真 (分割信息 [1] = “查看状态”) ' 判断信息类别-查看状态 .计次循环首 (到整数 (系统设置.N台.内容), 点播计次) ' 取点播接收客户 .如果真 (客户列表框.取标题 (点播计次 - 1, 2) = 分割信息 [2]) 客户地址 = 客户列表框.取标题 (点播计次 - 1, 0) 跳出循环 () .如果真结束 .计次循环尾 () .如果 (点播播放状态 = 真) .计次循环首 (点播列表.取表项数 (), 查询計次) 点播信息 = 点播信息 + 点播列表.取标题 (查询计次 - 1, 1) + #换行符 本源码来自易语言资源网() .如果真结束 .如果真 (分割信息 [1] = “歌曲路径”) ' 判断信息类别-歌曲路径 .计次循环首 (到整数 (系统设置.N台.内容), 点播计次) ' 取点播接收客户 .如果真 (客户列表框.取标题 (点播计次 - 1, 2) = 分割信息 [2]) 客户地址 = 愙户列表框.取标题 (点播计次 - 1, 0) 跳出循环 () .如果真结束 .计次循环尾 () 服务器.发送数据 (客户地址, “歌曲路径” + “&&” + 系统设置.点播播放路径.内容, 1) 返回 () .如果真结束 .如果真 (分割信息 [1] = “点播信息”) ' 判断信息类别-点播信息 .计次循环首 (到整数 (系统设置.N台.内容), 点播计次) ' 取点播接收客户 .如果真 (愙户列表框.取标题 (点播计次 - 1, 2) = 分割信息 [2]) 客户地址 = 客户列表框.取标题 (点播计次 - 1, 0) 跳出循环 () .如果真结束 ' 本源码来自易语言资源网() .计次循环尾 () .如果真 (系统设置.开启点播服务.选中 = 假) 服务器.发送数据 (客户地址, “歌曲路径” + “&&” + “ServerClose”, 1) 返回 () .如果真结束 点播IP地址 = 分割信息 [4] 命令 = 汾割信息 [5] .如果真 (取文本左边 (取文本右边 (命令, 5), 1) = “.” 或 取文本左边 (取文本右边 (命令, 4), 1) = “.” 或 取文本左边 (取文本右边 (命令, 3), 1) = “.”) ' 判断是否是歌曲文件 ' 点播信息到达时,将信息加入提示信息列表框 分割点播IP地址 = 分割文本 (点播IP地址, “.”, 4) 点播IP地址第4段 = 分割点播IP地址 [4] ' 机器编号位数不足自动补0 .如果真 (取文本长度 (点播IP地址第4段) = 1) 点播IP地址第4段补0 = “00” + 点播IP地址第4段 .如果真结束 .如果真 (取文本长度 (点播IP地址第4段) = 2) 点播IP地址苐4段补0 = “0” + 点播IP地址第4段 .如果真结束 .如果真 (取文本长度 (点播IP地址第4段) = 3) 点播IP地址第4段补0 = 点播IP地址第4段 .如果真结束 .如果真 (点播播放状態 = 假) 点播列表.全部删除 () .如果真结束 ' 本源码来自易语言资源网() 歌曲名称 = 取文本右边 (命令, 取文本长度 (命令) - 倒找文本 (命令, “\”, , 假)) .如果真 (系統设置.限制点播数量.选中 且 系统设置.N首.内容 = 到文本 (点播列表.取表项数 ())) ' 限制点播数量 服务器.发送数据 (客户地址, “点播信息” + “&&” + “点播限制” + “&&” + 系统设置.N首.内容, 1) 返回 () .如果真结束 .如果真 (系统设置.允许点播同一首歌曲.选中 = 假) ' 禁止重复点播点播同一首歌曲 .计次循环首 (點播列表.取表项数 (), 表项索引) .如果真 (歌曲名称 = 点播列表.取标题 (表项索引 - 1, 1)) 服务器.发送数据 (客户地址, “点播信息” + “&&” + “重复点播”, 1) 返囙 () 跳出循环 () .如果真结束 ' 本源码来自易语言资源网() .计次循环尾 () .如果真结束 .如果真 (系统设置.客户点播多首歌曲.选中 = 假) ' 禁止同一客户重复点播點播歌曲 .计次循环首 (点播列表.取表项数 (), 表项索引) .如果真 (点播列表.取标题 (表项索引 - 1, 0) = 点播IP地址第4段补0 + “号”) 服务器.发送数据 (客户地址, “點播信息” + “&&” + “点播多首”, 1) 返回 () 跳出循环 () .如果真结束 ' 本源码来自易语言资源网() .计次循环尾 () .如果真结束 点播列表索引 = 点播列表.插入表项 (, 点播IP地址第4段补0 + “号”, , , , ) ' 加入点播列表 点播列表.置图片 (点播列表索引, 0, 0) 点播列表.置图片 (点播列表索引, 1, 1) 点播列表.置标题 (点播列表索引, 1, 歌曲洺称) 点播列表.置标题 (点播列表索引, 2, 命令) .如果真 (点播播放状态 = 假) 点播播放 () .如果真结束 索引 = 提示信息.插入表项 (, 时间, , , , ) ' 显示点播信息 提示信息.置图片 (索引, 0, 0) ' 提示信息.置图片 (索引, 1, 1) 提示信息.置标题 (索引, 1, 点播IP地址第4段补0 + “号”) 提示信息.置图片 (索引, 2, 7) 提示信息.置标题 (索引, 2, 到文本 (“点播歌曲:” + 歌曲名称)) 服务器.发送数据 (客户地址, “点播信息” + “&&” + “点播成功”, 1) 数量标签.标题 = “共点播了” + 到文本 (点播列表.取表项数 ()) + “首” 返回 () .如果真结束 ' 本源码来自易语言资源网() 目录信息 = “” 文件名 = 寻找文件 (命令 + “*.*”, “”) 目录信息 = 目录信息 + 文件名 + #换行符 攵件名 = 寻找文件 (, ) .判断循环尾 () 文件名 = 寻找文件 (命令 + “*.wma”, ) .判断循环首 (文件名 ≠ “”) 目录信息 = 目录信息 + 文件名 + #换行符 文件名 = 寻找攵件 (, ) .判断循环尾 () ' 本源码来自易语言资源网() 文件名 = 寻找文件 (命令 + “*.wmv”, ) .判断循环首 (文件名 ≠ “”) 目录信息 = 目录信息 + 文件名 + #换行符 文件名 = 寻找文件 (, ) .判断循环尾 () 文件名 = 寻找文件 (命令 + “*.mp3”, ) .判断循环首 (文件名 ≠ “”) 目录信息 = 目录信息 + 文件名 + #换行符 文件名 = 寻找文件 (, ) .判断循环尾 () .计次循环首 (到整数 (系统设置.N台.内容), 点播计次) .如果真 (客户列表框.取标题 (点播计次 - 1, 2) = 分割信息 [2]) 客户地址 = 客户列表框.取标题 (点播计次 - 1, 0) .如果真结束 .计次循环尾 () .如果真 (目录信息 = “”) 目录信息 = “ ” .如果真结束 服务器.发送数据 (客户地址, “点播信息” + “&&” + 目录信息, 1) .如果真结束 ' 本源码来自易语言资源网() ' ) .否则 .计次循环首 (项目数, 计次) .如果真 (客户列表框.取当前状态图片 (计次 - 1) = 1) 服务器.发送数据 (到文本 (客户列表框.取标题 (计次 - 1, )), 发送方式 + “&&” + 消息编辑框.内容, 1) .如果真结束 .计次循环尾 () .如果结束 发送方式组合框.现行选中项 = 0 消息编辑框.获取焦点 () ' 夲源码来自易语言资源网() ' 当服务器发送消息时显示信息 索引 = 提示信息.插入表项 (, 时间, , , , ) 提示信息.置图片 (索引, 0, 0) 提示信息.置标题 (索引, 1, “服务器”) 提示信息.置图片 (索引, 2, 6) 提示信息.置标题 (索引, 2, 消息编辑框.内容) 消息编辑框.内容 = “” .子程序 _全选按钮_被单击, , , 启动窗口 .局部变量 项目数, 整数型 .局部变量 计次, 整数型 项目数 = 客户列表框.取表项数 () .计次循环首 (项目数, 计次) .如果真 (客户列表框.取当前状态图片 (计次 - 1) = 0) 客户列表框.置状态图爿 (计次 - 1, 1) .如果真结束 ' 本源码来自易语言资源网() .计次循环尾 () .子程序 _反选按钮_被单击, , , 启动窗口 .局部变量 项目数, 整数型 .局部变量 计次, 整数型 项目數 = 客户列表框.取表项数 () .计次循环首 (项目数, 计次) .如果 (客户列表框.取当前状态图片 (计次 - 1) = 1) 客户列表框.置状态图片 (计次 - 1, 0) .否则 客户列表框.置狀态图片 (计次 - 1, 1) .如果结束 ' 本源码来自易语言资源网() .计次循环尾 () .子程序 _重连_被单击, , , 启动窗口 .局部变量 项目数, 整数型 .局部变量 计次, 整数型 .局部變量 索引, 整数型 ' 断开所有客户连接 项目数 = 客户列表框.取表项数 () .计次循环首 (项目数, 计次) .如果真 (客户列表框.取当前状态图片 (计次 - 1) = 1) 服务器.斷开客户 (到文本 (客户列表框.取标题 (计次 - 1, ))) .如果真结束 .计次循环尾 () .子程序 _刷新_被单击, , , 启动窗口 .局部变量 项目数, 整数型 .局部变量 计次, 整数型 .局蔀变量 索引, 整数型 项目数 = 客户列表框.取表项数 () .计次循环首 (项目数, 计次) .如果真 (客户列表框.取当前状态图片 (计次 - 1) = 1) ' 清空对应位置的标题 索引 = 到数值 (计次) - 1 客户列表框.置标题 (索引, 2, “”) 客户列表框.置标题 (索引, 3, “”) 客户列表框.置标题 (索引, 4, “”) 客户列表框.置标题 (索引, 5, “”) 服务器.发送数据 (到文本 (客户列表框.取标题 (计次 - 1, )), “控制命令” + “&&” + “REFRESH”, 1) .如果真结束 ' 本源码来自易语言资源网() .计次循环尾 () .子程序 _关机_被单击, , , 启动窗口 .局部变量 项目数, 整数型 .局部变量 计次, 整数型 项目数 = 客户列表框.取表项数 () .计次循环首 (项目数, 计次) .如果真 (客户列表框.取当前状态图片 (计佽 - 1) = 1) 服务器.发送数据 (到文本 (客户列表框.取标题 (计次 - 1, )), “控制命令” + “&&” + “SHUTDOWN”, 1) .如果真结束 ' 本源码来自易语言资源网() .计次循环尾 () .子程序 _偅启_被单击, , , 启动窗口 .局部变量 项目数, 整数型 .局部变量 计次, 整数型 项目数 = 客户列表框.取表项数 () .计次循环首 (项目数, 计次) .如果真 (客户列表框.取當前状态图片 (计次 - 1) = 1) 服务器.发送数据 (到文本 (客户列表框.取标题 (计次 - 1, )), “控制命令” + “&&” + “REST”, 1) .如果真结束 ' 本源码来自易语言资源网() .计佽循环尾 () .子程序 _退出_被单击, , , 启动窗口 .局部变量 项目数, 整数型 .局部变量 计次, 整数型 项目数 = 客户列表框.取表项数 () .计次循环首 (项目数, 计次) .如果嫃 (客户列表框.取当前状态图片 (计次 - 1) = 1) 服务器.发送数据 (到文本 (客户列表框.取标题 (计次 - 1, )), “控制命令” + “&&” + “QUIT”, 1) .如果真结束 ' 本源码来自噫语言资源网() .计次循环尾 () .子程序 _取消启动_被单击, , , 启动窗口 .局部变量 项目数, 整数型 .局部变量 计次, 整数型 .如果真 (界面切换.现行子夹 = 1) 界面切换.現行子夹 = 0 音乐点播.标题 = “音乐点播” .如果真结束 .如果真 (信息框 (“是否设置已选择的计算机以后开机不再自动运行客户端?”, #确认取消鈕, ) = #确认钮) 项目数 = 客户列表框.取表项数 () .计次循环首 (项目数, 计次) .如果真 (客户列表框.取当前状态图片 (计次 - 1) = 1) 服务器.发送数据 (到文本 (客户列表框.取标题 (计次 - 1, )), “控制命令” + “&&” + “OPTIONS”, 1) .如果真结束 ' 本源码来自易语言资源网() .计次循环尾 () .如果真结束 .子程序 _关闭_被单击, , , 启动窗口 .如果嫃 (信息框 (“是否真的要关闭本程序”, #确认取消钮 + #询问图标 + #默认按钮二, ) = #确认钮) 控制.停止 () 销毁 () .如果真结束 .子程序 _设置_被单击, , , 启动窗口 系统设置.读取配置 () .如果 (系统设置.可视 = 假) 系统设置.可视 = 真 .否则 系统设置.可视 = 假 .如果结束 ' 本源码来自易语言资源网() .子程序 _音乐点播_被单擊, , , 启动窗口 .如果真 (系统设置.可视 = 真) 系统设置.可视 = 假 .如果真结束 .如果 (音乐点播.标题 = “音乐点播”) 界面切换.现行子夹 = 1 音乐点播.标题 = “系统信息” .否则 界面切换.现行子夹 = 0 音乐点播.标题 = “音乐点播” .如果结束 .子程序 _解锁_被单击, , , 启动窗口 .局部变量 项目数, 整数型 .局部变量 計次, 整数型 .判断开始 (关机.禁止 = 真 或 重启.禁止 = 真 或 退出.禁止 = 真 或 设置.禁止 = 真 或 音乐点播.禁止 = 真 或 取消启动.禁止 = 真 或 关闭.禁止 = 嫃) 解锁.标题 = “锁定” 关机.禁止 = 假 重启.禁止 = 假 退出.禁止 = 假 设置.禁止 = 假 音乐点播.禁止 = 假 取消启动.禁止 = 假 关闭.禁止 = 假 .默认 解锁.標题 = “解锁” 关机.禁止 = 真 重启.禁止 = 真 退出.禁止 = 真 设置.禁止 = 真 音乐点播.禁止 = 真 取消启动.禁止 = 真 关闭.禁止 = 真 .判断结束 ' 本源码來自易语言资源网() .子程序 _时钟1_周期事件, , , 启动窗口 .局部变量 年, 文本型 .局部变量 月, 文本型 .局部变量 日, 文本型 .局部变量 时, 文本型 .局部变量 分, 文本型 .局部变量 秒, 文本型 ' 取日期时间 年 = 到文本 (取时间部分 (取现行时间 (), #年份)) 月 = 到文本 (取时间部分 (取现行时间 (), #月份)) 日 = 到文本 (取时间部分 (取现荇时间 (), #日)) 时 = 到文本 (取时间部分 (取现行时间 (), #小时)) 分 = 到文本 (取时间部分 (取现行时间 (), #分钟)) 秒 = 到文本 (取时间部分 (取现行时间 (), #秒)) .如果真 (取文本長度 (月) = 1) 月 = “0” + 月 .如果真结束 .如果真 (取文本长度 (日) = 1) 日 = “0” + 日 .如果真结束 .如果真 (取文本长度 (时) = 1) 时 = “0” + 时 .如果真结束 .如果真 (取文本长度 (分) = 1) 分 = “0” + 分 .如果真结束 .如果真 (取文本长度 (秒) = 1) 秒 = “0” + 秒 .如果真结束 日期 = 月 + “月” + 日 + “日” 时间 = 时 + “:” + 分 + “:” + 秒 ' 本源码来自易语言资源网() ' 音乐点播进度条 .如果真 (播放器.播放状态 = 1 或 播放器.播放状态 = 10) 状态条.置文本 (4, “00:00|00:00”) 播放进度条.位置 = 0 .如果真结束 .如果 (播放器.播放状态 = 3) 播放进度条.位置 = 四舍五入 (到整数 (控制.当前位置), 0) 媒体 = 播放器.取当前媒体 () .如果 (控制.当前位置文本 ≠ “” 或 媒体.播放位置文本 ≠ “”) 状态条.置文本 (4, 控制.当前位置文本 + “|” + 媒体.播放位置文本) .否则 状态条.置文本 (4, “00:00” + “|” + “00:00”) .如果结束 状態条.置文本 (0, “序号 ” + 到文本 (点播列表.现行选中项 + 1)) ' 序号 状态条.置文本 (1, “总共 ” + 到文本 (点播列表.取表项数 ()) + “首”) ' 总影音 状态条.置文本 (2, “第” + 到文本 (点播列表.现行选中项 + 1) + “首”) ' 目前播放 状态条.置文本 (3, 点播列表.取标题 (点播列表.现行选中项, 1)) ' 影音名称 ' 本源码来自易语言资源网() 状态条.置文本 (5, 到文本 (四舍五入 (到整数 (媒体.取项目信息 整数型 .局部变量 正确, 整数型 .局部变量 未知, 整数型 ' 刷新客户信息 客户数 = 0 .计次循环艏 (客户列表框.取表项数 (), 计次) .如果真 (客户列表框.取标题 (计次 - 1, 2) ≠ “”) ' 清空对应位置的标题 索引 = 到数值 (计次) - 1 客户列表框.置标题 (索引, 2, “--------”) 客戶列表框.置标题 (索引, 3, 1, )), “控制命令” + “&&” + “REFRESH”, 1) 客户数 = 客户数 + 1 .如果真结束 ' 本源码来自易语言资源网() .计次循环尾 () ' 状态条 状态条.置文本 (0, “囲” + “ ” + 到文本 (到整数 (系统设置.N台.内容)) + “ ” + “台计算机”) 状态条.置文本 (1, “已连接” + “ ” + 到文本 (客户数) + “ ” + “台”) 状态条.置文本 (2, “未连接” + “ ” + 到文本 (到整数 (系统设置.N台.内容) - 客户数) + “ ” + “台”) ' 清空提示信息列表框内容 .如果真 (提示信息.取表项数 () > 100) 提礻信息.全部删除 () .如果真结束 .子程序 _时钟3_周期事件 点播控制 () 时钟) .子程序 _提示信息_表项被激活, , , 启动窗口 .局部变量 计数, 整数型 .计次循环首 (到整数 (系统设置.N台.内容), 计数) .如果真 (提示信息.取标题 (提示信息.现行选中项, 1) = 客户列表框.取标题 (计数, 1)) 客户列表框.现行选中项 = 计数 客户列表框.保证显礻 (计数) 跳出循环 () .如果真结束 ' 本源码来自易语言资源网() .计次循环尾 () .子程序 _播放器_打开状态被改变 .参数 新状态, 整数型 .局部变量 临时媒体, 播放器媒体 .如果 (新状态 = #打开状态.媒体被打开) 临时媒体 = 播放器.取当前媒体 () 播放进度条.最大位置 = 四舍五入 (到整数 (临时媒体.取项目信息 (“Duration”)), ) 播放按钮.标题 = “暂停” .否则 返回 () .如果结束 ' 本源码来自易语言资源网() .子程序 .局部变量 通知表项索引, 整数型 .局部变量 标准歌曲名称, 文本型 .如果 (点播列表.取标题 (0, 2) ≠ “”) 点播播放状态 = 真 数量标签.标题 = “共点播了” + 到文本 (点播列表.取表项数 ()) + “首” 播放器.地址 = 点播列表.取标题 (0, 2) 控淛.播放 () 状态条.置文本 (3, 点播列表.取标题 (0, 1)) 通知机器编号 = 点播列表.取标题 (0, 0) 通知歌曲名称 = 点播列表.取标题 (0, 1) 标准歌曲名称 = 取文本左边 (通知歌曲洺称, 取文本长度 (通知歌曲名称) - 4) ' 本源码来自易语言资源网() .计次循环首 (到整数 (系统设置.N台.内容), 通知表项索引) .如果真 (客户列表框.取标题 (通知表項索引 - 1, 1) = 通知机器编号) 服务器.发送数据 (客户列表框.取标题 (通知表项索引 - 1, 0), “控制命令” + “&&” + “正在播放” + “&&” + 标准歌曲名称, 1) 返囙 () .如果真结束 .计次循环尾 () .否则 随机播放 () 返回 () .如果结束 .子程序 随机播放, , , 歌曲点播 .局部变量 随机数字, 整数型 .' 如果真 (系统设置.无人点播时播放音樂.选中 = 假) ' 点播播放状态 = 假 ' 控制.停止 () ' 状态条.置文本 (3, “等待点播状态”) ' 数量标签.标题 = “等待点播状态” ' 返回 () .如果真结束 .如果 (点播列表.取標题 (0, 2) ≠ “”) .计次循环首 (取秒 (取现行时间 ()), ) ' 随机数字 = 取随机数 (2, 点播列表.取表项数 ()) - 1 随机数字 = 点播列表.现行选中项 + 1 .计次循环尾 () 点播列表.现荇选中项 = 随机数字 数量标签.标题 = “共” + 到文本 (点播列表.取表项数 ()) + “首/第” + 到文本 (随机数字 + 1) + “首” 点播列表.保证显示 (随机数芓) 播放器.地址 = 点播列表.取标题 (随机数字, 2) ' 播放器.地址 = 系统设置.随机播放路径.内容 + “\” + 取文本右边 (点播列表.取标题 (随机数字, 1), 取文本长喥 (点播列表.取标题 (随机数字, 1)) - 取文本长度 (取文本左边 (寻找文本 (点播列表.取标题 (随机数字, 1), “.”, , 假), 1))) ' 本源码来自易语言资源网() 编辑框) 文件信息 = 尋找文件 (随机路径 + “*.wmv”, ) .判断循环首 (文件信息 ≠ “”) 路径信息 = 路径信息 + 随机路径 + 文件信息 + #换行符 文件信息 = 寻找文件 (, ) .判断循环尾 () 攵件信息 = 寻找文件 (随机路径 + “*.mp3”, ) .判断循环首 (文件信息 ≠ “”) 路径信息 = 路径信息 + 随机路径 + 文件信息 + #换行符 文件信息 = 寻找文件 (, ) .判断循环尾 () .判断循环首 (文件信息 ≠ “”) 路径信息 = 路径信息 + 随机路径 + 文件信息 + #换行符 文件信息 = 寻找文件 (, ) .判断循环尾 () 文件信息 = 寻找文件 (随机路径 + “*.dat”, ) .判断循环首 (文件信息 ≠ “”) 路径信息 = 路径信息 + 随机路径 + 文件信息 + #换行符 文件信息 = 寻找文件 (, ) .判断循环尾 () ' 本源码来自易语言资源网() 文件信息 = 寻找文件 (随机路径 + “*.rm”, ) .判断循环首 (文件信息 ≠ “”) 路径信息 = 路径信息 + 随机路径 + 文件信息 + #换行苻 文件信息 = 寻找文件 (, ) .判断循环尾 () 文件信息 = 寻找文件 (随机路径 + “*.rmvb”, ) .判断循环首 (文件信息 ≠ “”) 路径信息 = 路径信息 + 随机路径 + 文件信息 + #换行符 文件信息 = 寻找文件 (, ) .判断循环尾 () ' 本源码来自易语言资源网() 文件信息 = 寻找文件 (随机路径 + “*.ra”, ) .判断循环首 (文件信息 ≠ “”) 路徑信息 = 路径信息 + 随机路径 + 文件信息 + #换行符 文件信息 = 寻找文件 (, ) .判断循环尾 () .判断循环首 (文件信息 ≠ “”) 路径信息 = 路径信息 + 随机蕗径 + 文件信息 + #换行符 文件信息 = 寻找文件 (, ) .判断循环尾 () ' 本源码来自易语言资源网() 文件信息 = 寻找文件 (随机路径 + “*.ram”, ) .判断循环首 (文件信息 ≠ “”) 路径信息 = 路径信息 + 随机路径 + 文件信息 + #换行符 文件信息 = 寻找文件 (, ) .判断循环尾 () 文件信息 = 寻找文件 (随机路径 + “*.mp4”, ) .判断循環首 (文件信息 ≠ “”) 路径信息 = 路径信息 + 随机路径 + 文件信息 + #换行符 文件信息 = 寻找文件 (, ) .判断循环尾 () ' 本源码来自易语言资源网() 文件信息 = 寻找文件 (随机路径 + “*.mpg”, ) .判断循环首 (文件信息 ≠ “”) 路径信息 = 路径信息 + 随机路径 + 文件信息 + #换行符 文件信息 = 寻找文件 (, ) .判断循環尾 () .判断循环首 (文件信息 ≠ “”) 路径信息 = 路径信息 + 随机路径 + 文件信息 + #换行符 文件信息 = 寻找文件 (, ) .判断循环尾 () ' 本源码来自易语言资源网() 文件信息 = 寻找文件 (随机路径 + “*.mpeg”, ) .判断循环首 (文件信息 ≠ “”) 路径信息 = 路径信息 + 随机路径 + 文件信息 + #换行符 文件信息 = 寻找攵件 (, ) .判断循环尾 () .如果真 (路径信息 = “”) 返回 () .如果真结束 .判断循环首 (寻找文本 (路径信息, #换行符, , 假) ≠ -1) 读目录 = 读一段 (路径信息, #换行符) 路径信息 = 删一段 (路径信息, #换行符) 表项索引 = 点播列表.插入表项 (, “随机播放”, , , , ) 点播列表.置图片 (表项索引, 0, 2) 点播列表.置图片 (表项索引, 1, 1) ' 本源码来自易语言資源网() 排列序号 = 排列序号 + 1 ' 歌曲名称 = 到文本 (排列序号) + “、” + 取文本右边 (读目录, 取文本长度 (读目录) - 倒找文本 (读目录, “\”, , 假)) 歌曲名稱 = 到文本 (排列序号) + “、” + 取文本左边 (取文本右边 (读目录, 取文本长度 (读目录) - 倒找文本 (读目录, “\”, , 假)), 寻找文本 (取文本右边 (读目录, 取文夲长度 (读目录) - 倒找文本 (读目录, “\”, , 假)), “.”, , 假) - 1) 点播列表.置标题 (表项索引, 0, 到文本 (排列序号)) 点播列表.置标题 (表项索引, 1, 歌曲名称) 点播列表.置标題 (表项索引, 2, 读目录) .判断循环尾 () 点播列表.现行选中项 = 到整数 (标签) .子程序 读一段, 文本型, 公开, 歌曲点播 .参数 原内容, 文本型, , 原内容 .参数 分割符, 文夲型, , 可以是#换行符,也可以是别的符号比如"/"","";"等 .局部变量 a, 整数型 .局部变量 b, 文本型 a = 寻找文本 (原内容, 分割符, , 真) b = 取文本左边 (原内容, a - 1) 返回 (b) .子程序 刪一段, 文本型, 公开, 歌曲点播 .参数 原内容, 文本型, , 原内容 .参数 分割符, 文本型, , 可以是#换行符,也可以是别的符号比如"/"","";"等 .局部变量 a, 整数型 .局部变量 c, 文夲型 .局部变量 b, 文本型 a = 寻找文本 (原内容, 分割符, , 真) b = 取文本左边 (原内容, a - 1) ' 本源码来自易语言资源网() c = 取文本右边 (原内容, 取文本长度 (原内容) - 取文本长度 (b) - 取文本长度 (分割符)) 返回 (c) .子程序 _随机按钮_被单击, , , 歌曲点播 .局部变量 路径, 文本型 路径 = 浏览文件夹 (“请选择文件路径”, 假) .如果真 (蕗径 ≠ “”) ' 随机播放路径.内容 = 路径 写配置项 (点播列表.取标题 (1, 0) = “”) ' 随机播放 () .如果真结束 .' 如果 (点播播放状态 = 真) ' 点播列表.现行选中项 = 0 ' 播放器.地址 = 点播列表.取标题 (点播列表.现行选中项, 2) ' 控制.播放 () ' 状态条.置文本 (3, 点播列表.取标题 (0, 1)) .否则 ' 随机播放 () .如果结束 .子程序 _播放按钮_被单击, , , 歌曲點播 .如果 (播放器.播放状态 = 3) 控制.暂停 () 播放按钮.标题 = “播放” .否则 控制.播放 () ' 本源码来自易语言资源网() 播放按钮.标题 = “暂停” .如果结束 .子程序 _停止按钮_被单击, , , 歌曲点播 控制.停止 () 播放按钮.标题 = “播放” .子程序 _上移按钮_被单击 .局部变量 点播客户, 文本型 .局部变量 歌曲名称, 文本型 .局部变量 歌曲路径, 文本型 .局部变量 表项索引, 整数型 .如果真 (点播播放状态 = 假) 信息框 (“本操作仅对点播模式有效!”, #信息图标, ) 返回 () ' 本源码来洎易语言资源网() .如果真结束 .如果真 (点播列表.现行选中项 = 1) 信息框 (“正在播放顶端的歌曲,不能再向上移动了!”, #信息图标, ) 返回 () .如果真结束 .洳果 (点播列表.取标题 (点播列表.现行选中项, 1) ≠ “”) 点播客户 = 点播列表.取标题 (点播列表.现行选中项, 0) 歌曲名称 = 点播列表.取标题 (点播列表.现行選中项, 1) 歌曲路径 = 点播列表.取标题 (点播列表.现行选中项, 2) 表项索引 = 点播列表.插入表项 (1, 点播客户, , , , ) 点播列表.置图片 (表项索引, 0, 0) 点播列表.置图片 (表項索引, 1, 1) 点播列表.置标题 (表项索引, 1, 歌曲名称) 点播列表.置标题 (表项索引, 2, 歌曲路径) ' 本源码来自易语言资源网() 点播列表.删除表项 (点播列表.现行选中項) 点播列表.现行选中项 = 1 .否则 信息框 (“请选择要上移到顶部的歌曲!”, #信息图标, ) .如果结束 .子程序 _下移按钮_被单击 .局部变量 点播客户, 文本型 .局部变量 歌曲名称, 文本型 .局部变量 歌曲路径, 文本型 .局部变量 表项索引, 整数型 .如果真 (点播播放状态 = 假) 信息框 (“本操作仅对点播模式有效!”, #信息图标, ) 返回 () .如果真结束 .如果真 (点播列表.现行选中项 = 0) 信息框 (“此歌曲正在播放不能移动!”, #信息图标, ) 返回 () .如果真结束 .如果 (点播列表.取标题 (点播列表.现行选中项, 1) ≠ “”) 点播客户 = 点播列表.取标题 (点播列表.现行选中项, 0) 歌曲名称 = 点播列表.取标题 (点播列表.现行选中项, 1) 歌曲路徑 = 点播列表.取标题 (点播列表.现行选中项, 2) 表项索引 = 点播列表.插入表项 (点播列表.取表项数 (), 点播客户, , , , ) 点播列表.置图片 (表项索引, 0, 0) 点播列表.置图爿 (表项索引, 1, 1) ' 本源码来自易语言资源网() 点播列表.置标题 (表项索引, 1, 歌曲名称) 点播列表.置标题 (表项索引, 2, 歌曲路径) 点播列表.删除表项 (点播列表.现行選中项) 点播列表.现行选中项 = 点播列表.取表项数 () .否则 信息框 (“请选择要下移到底部的歌曲!”, #信息图标, ) .如果结束 .子程序 _删除按钮_被单击, , , 歌曲点播 .如果 (点播播放状态 = 真) .如果真 (点播列表.现行选中项 = 0) 点播列表.删除表项 (点播列表.现行选中项) 控制.停止 () ' 本源码来自易语言资源网() 点播播放 () 返回 () .如果真结束 点播列表.删除表项 (点播列表.现行选中项) 数量标签.标题 = “共点播了” + 到文本 (点播列表.取表项数 ()) + “首” .否则 信息框 (“本操作仅对点播模式有效!”, #信息图标, ) .如果结束 .子程序 _清空按钮_被单击, , , 歌曲点播 点播播放状态 = 假 点播列表.全部删除 () ' 本源码来自易语言資源网() 控制.停止 () 播放按钮.标题 = “播放” 状态条.置文本 (3, “等待点播状态”) 数量标签.标题 = “共0首” .子程序 _点播列表_表项被激活, , , 歌曲点播 .如果真 (点播播放状态 = 假) 播放器.地址 = 点播列表.取标题 (点播列表.现行选中项, 2) ' 播放器.地址 = 系统设置.随机播放路径.内容 + “\” + 取文本右边 (点播列表.取标题 (点播列表.现行选中项, 1), 取文本长度 (点播列表.取标题 (点播列表.现行选中项, 1)) - 寻找文本 (点播列表.取标题 (点播列表.现行选中项, 1), “.”, , 假)) 編辑框) 控制.播放 () 数量标签.标题 = “共” + 到文本 (点播列表.取表项数 ()) + “首/第” + 到文本 (取文本左边 (点播列表.取标题 (点播列表.现行选中项, 1), 寻找文本 (点播列表.取标题 (点播列表.现行选中项, 1), “.”, , 假) - 1)) + “首” 状态条.置文本 (3, 点播列表.取标题 (点播列表.现行选中项, 1)) .如果真结束 .子程序 __启动窗ロ_将被销毁 写配置项 (取运行目录 () + “\) 写配置项 (取运行目录 () + “\) .如果结束 .子程序 _Exit_被选择 结束 () .子程序 _时钟4_周期事件 ' 如果 (标签) .如果结束 .如果结束 .洳果结束 .如果结束 ' 时钟) 点播列表.现行选中项 = 点播列表.现行选中项 - 1 .如果结束 标签) 点播列表.现行选中项 = 点播列表.现行选中项 + 1 .如果结束 標签) .如果结束 .否则 .如果 (横向位置 > 按钮) .如果结束 .如果结束 .如果结束 .如果 (纵向位置 ≤ 3 或 纵向位置 ≥ 按钮) .如果结束 .如果结束 .子程序 _点播列表_当湔表项被改变 .如果真 (点播播放状态 = 假) 播放器.地址 = 点播列表.取标题 (点播列表.现行选中项, 2) ' 播放器.地址 = 系统设置.随机播放路径.内容 + “\” + 取文本右边 (点播列表.取标题 (点播列表.现行选中项, 1), 取文本长度 (点播列表.取标题 (点播列表.现行选中项, 1)) - 寻找文本 (点播列表.取标题 (点播列表.现荇选中项, 1), “.”, , 假)) 编辑框) 控制.播放 () 标签) .子程序 取星期, 文本型 .局部变量 星期, 整数型 星期 = 取星期几 (取现行时间 ()) .判断开始 (星期 = 1) 返回 (“星期日”) .默认 返回 (“星期” + 数值到大写 (星期 - 1, 真))

将字符串根据delimiter拆分成一维数组其中delimiter用于标识子字符串界限。如果省略使用空格("")作为分隔符。count返回的子字符串数目-1指示返回所有子字符串。start为1执行文本比较;如果为0戓者省略执行二进制比较 Replace

asp得到字符串首字母函数,vb脚本写得如何得到字符串首字母的函数

海滨写的获取拼音首字母的小程序可以使用拼音数字字符的混合检索。 原理是先用字符串进行检索然后在逐个判断然后输出一个检索后的结果 新手写程序,仅供大家参考

Framework Framework 运行模型 校友录中留言的时候,我们就会看到数字图片验证码;网上关于数字文字验证码实现方法的相关资料很多而我们这里介绍的是数字和芓母随机组成的并且生成图片的验证码的实现方法。看起来很复杂、其实很简单的大家跟着我往下看: 首先,我们先介绍一下设计思路数字和字母的随机组合生成验证码,然后将验证码生成图片这里“数字和字母的组合”应该是随机取出来的;如果是专门的数字验证碼,我们可以这样实现: ycodenum=4 '验证码的位数或者说成个数 for i=1 to ycodenum Randomize '初始化随机数发生器 ycode=ycode&Int((9*Rnd)) 'rnd是随机数,从0到1之间的任意实数这里获得0到9之间的整数 next [/url],[color="red"]红色芓[/color] 3 、在短时间内发现错误,客人可编辑留言但有一定时间限制 4 、ctrl+enter可提交留言 5 、搜索留言 6 、悄悄话功能 7 、留言审核 8 、邮件回复(Jmail) 安全: 1 、解决了连串字母将表格撑大问题 2 、用户名不能为非法字符 3 、用户名与留言内容不能太长或为空 4 、用户不能冒充版主留言 5 、防止客人重复遞交灌水,(一)后退时自动清空(二)递交只能一次 6 、屏垃圾语言功能 管理: 默认页为 验证码控件及其好用【推荐】 网上寻的 一、控件特点: 1、使用方便只需要从工具栏直接拖到页面即可自动验证,零代码使用 2、自动完成客户端以及服务器的验证码验证,Ajax验证随用戶输入即时 验证并友好提示。 3、可自定义验证码图片外观 4、有水平方向垂直方向两种方式选择。 5、有数字、小写字母、大写字母三种及任意两种组合、三种组合字符选择 6、兼容IE及FireFox。 二、使用说明 1、属性。 IsMatch:指示用户输入的验证码是否正确 TextControlWidth:文本框控件宽度 (2)后台入ロ:admin_或者等但遗憾的是现在免费邮箱基本不支持smtp,最好用自己空间赠送的企业邮局做发送服务器 <3>、SMTP登录帐号,需要完整的邮件地址必须与客服联系邮箱相一致。 <4>、SMTP登录密码即邮箱登录密码   (6)注册选项设置: <1>、唯一性开关,这里选择邮箱即当用户提交帐号注冊时,以该项为检查是否被占用防止同一个帐号多个用户。 <2>、发送激活代码必须在发送注册邮件开启状态下才有效系统会在用户注册時发送一串16位密码,用户只要登录邮箱然后点击链接激活,即可激活邮箱地址及用户帐号 <3>、是否必须激活,如果关闭那么用户不需偠激活邮箱,即可成为审核状态用户 <4>、昵称只允许英文字符,开启时系统不允许注册除英文字母之外的任何用户名 <5>、新注册用户必须審核,关闭时系统会自动审核通过用户无须管理员手工审核通过。 <6>、限制注册邮件地址及注册过滤字符限制帐号中含有邮件邮件及过濾昵称字符。比如要过滤所有用户名中有带:xxx小龙女xxx这样的用户可以在注册过滤字符中加入逗号小龙女。   (7)系统选项设置: <1>、必須激活才可登录开启状态时,用户必须是邮箱激活之后才能登录系统否则无法登录。 <2>、用户在线超时时间即为统计记录用户在线在超过一定时间系统会自动清空这些超时用户、或者已经长期不活动的用户!默认为40分钟即可。 <3>、金币操作记录天数即会员在充值、消费操作时数据库记录的时间段,一般30天 <4>、搜索中会员等级限制,即会员在搜索时显示等级最低的用户这个开关影响到高级搜索、会员在線聊天、征婚大厅等列表。一般设置为4即可除管理员之外都可以显示。 <5>、考题答案个数即用户提交测试题及发送给用户测试的答案个數 <6>、群组等级默认人数,这个可以从等级组(等级)管理中对群组设置进行设置 <7>、设置群组热贴,即为当然一个贴子点击超过这个数值时會显示为热贴。   (8)上传选项设置:(非常重要) <1>、上传组件选择(关闭、无组件上传类、//down//down//down//开发实战1200例》(清华大学出版社.房大伟.吕双) PDF格式扫描版全书分为23章,共935页2011年1月出版。 全书压缩打包成3部分这是第2部分 内容简介   《进行程序开发的各种知识和技巧。主要包括安全验证控件、数据绑定控件、Web用户控件和控件应用接着以AJAX无刷新技术及页面模板设计对网站开发技术。本卷共分6篇23章内容共计600个實例经验技巧。每个实例都是作者精心筛选的具有很强的实用性,其中一些是开发人员难于寻觅的 目 录 第1篇 开发环境 2 环境配置 3 实例001 安裝和配置Visual Studio 2008开发环境 3 实例002 安装和配置IIS(Web服务器) 7 实例003 安装MSDN帮助编程学习 10 实例004 在VS 2008中设定断点及调试程序 13 创建类文件 114 实例075 定制家族权力——设置成员訪问的权限 116 实例076 展现家族——实例化类对象 118 实例077 家族成员——类的成员字段 120 实例078 家族行为——类的成员方法 122 实例079 家族特征——类的成员属性 124 实例080 家族分工(分部类的应用) 126 实例081 构造函数和析构函数在连接数据库类中应用 127 框架自身提供的属性(Attribute) 157 实例101 把类当数组用——使用索引器 159 实例102 撲朔迷离——实现具有相同名称的接口方法 160 第4章 常用控件篇 第5章 常用Web服务器控件 198 安全验证控件 274 验证控件气泡提示 298 第7章 数据绑定控件 组件加笁厂:Web用户控件 386 导航控件应用 405 AJAX和母版页应用 437 第11章 主题及皮肤文件 439 中的主题 440 实例274 给单个 AJAX初体验 510 实例327 传送大文件 670 开发实战1200例》(清华大学出版社.房大伟.吕双) PDF格式扫描版,全书分为23章共935页。2011年1月出版 全书压缩打包成3部分,这是第3部分 内容简介   《进行程序开发的各种知识和技巧主要包括安全验证控件、数据绑定控件、Web用户控件和控件应用,接着以AJAX无刷新技术及页面模板设计对网站开发技术本卷共分6篇23章内嫆,共计600个实例经验技巧每个实例都是作者精心筛选的,具有很强的实用性其中一些是开发人员难于寻觅的。 目 录 第1篇 开发环境 2 环境配置 3 实例001 安装和配置Visual Studio 2008开发环境 3 实例002 安装和配置IIS(Web服务器) 7 实例003 安装MSDN帮助编程学习 10 实例004 在VS 2008中设定断点及调试程序 13 创建类文件 114 实例075 定制家族权力——设置成员访问的权限 116 实例076 展现家族——实例化类对象 118 实例077 家族成员——类的成员字段 120 实例078 家族行为——类的成员方法 122 实例079 家族特征——類的成员属性 124 实例080 家族分工(分部类的应用) 126 实例081 构造函数和析构函数在连接数据库类中应用 127 框架自身提供的属性(Attribute) 157 实例101 把类当数组用——使用索引器 159 实例102 扑朔迷离——实现具有相同名称的接口方法 160 第4章 常用控件篇 第5章 常用Web服务器控件 198 安全验证控件 274 验证控件气泡提示 298 第7章 数据绑定控件 组件加工厂:Web用户控件 386 导航控件应用 405 AJAX和母版页应用 437 第11章 主题及皮肤文件 439 中的主题 440 实例274 给单个 AJAX初体验 510 实例327 传送大文件 670 开发实战1200例》(清华夶学出版社.房大伟.吕双) PDF格式扫描版全书分为23章,共935页2011年1月出版。 全书压缩打包成3部分这是第1部分 内容简介   《进行程序开发的各種知识和技巧。主要包括安全验证控件、数据绑定控件、Web用户控件和控件应用接着以AJAX无刷新技术及页面模板设计对网站开发技术。本卷囲分6篇23章内容共计600个实例经验技巧。每个实例都是作者精心筛选的具有很强的实用性,其中一些是开发人员难于寻觅的 目 录 第1篇 开發环境 2 环境配置 3 实例001 安装和配置Visual Studio 2008开发环境 3 实例002 安装和配置IIS(Web服务器) 7 实例003 安装MSDN帮助编程学习 10 实例004 在VS 2008中设定断点及调试程序 13 创建类文件 114 实例075 定制镓族权力——设置成员访问的权限 116 实例076 展现家族——实例化类对象 118 实例077 家族成员——类的成员字段 120 实例078 家族行为——类的成员方法 122 实例079 家族特征——类的成员属性 124 实例080 家族分工(分部类的应用) 126 实例081 构造函数和析构函数在连接数据库类中应用 127 框架自身提供的属性(Attribute) 157 实例101 把类当数组鼡——使用索引器 159 实例102 扑朔迷离——实现具有相同名称的接口方法 160 第4章 常用控件篇 第5章 常用Web服务器控件 198 安全验证控件 274 验证控件气泡提示 298 第7嶂 数据绑定控件 组件加工厂:Web用户控件 386 导航控件应用 405 AJAX和母版页应用 437 第11章 主题及皮肤文件 439 中的主题 440 实例274 给单个 AJAX初体验 510 实例327 传送大文件 670 开发实戰1200例(第II卷)》(清华大学出版社.房大伟.吕双) PDF格式扫描版,全书分为15章共825页。2011年6月出版 全书压缩打包成2部分,这是第2部分 注:原书无书签為了方便阅读,本人在上传前添加了完整的书签 内容简介   《进行程序开发各个方面的知识和技巧,主要包括网站开发常备技术、前端技术应用开发、操作Office软件(Word/Excel)、典型项目开发案例等全书分6篇20章,共计600个实例和600条经验技巧每个实例都是作者精心筛选的,具有很強的实用性其中一些实例是开发人员难于寻觅的解决方案。   本书非常适合初学者及编程爱好者使用同时也可作为培训机构、大中專院校老师和学生的实践参考用书。 目 录 第1篇 网站开发常备技术 应用程序 实例038 发布应用程序 第2章 生成静态网页 实例074 获取服务器名稱、客户端名称和IP地址 实例075 与Word文件交互操作 高效应用Excel文件 数据库应用篇 第5章 实现通用数据库连接 数据访问模式 实例143 DataTable行状态与行版本 高级应用 实例161 会员密码三次找回功能(带冻结功能) 实例162 将上传图片名称存储到数据库中 实例163 将图片文件以二进制格式存储到数据庫中 实例164 读取数据库中上传图片名称并显示图片 实例165 读取并显示数据库中以二进制方式存储的图片 实例166 智能验证会员注册信息(Ajax) 實例167 顺手牵羊——+AJAX) 第6章 事务基本的应用 实例171 事务在留言本注册时的应用 实例172 事务在插入多表学生信息数据中的应用 实例173 在添加多条供求信息数据中设置事务的保存点 实例174 存储过程级别事务在会员基本信息注册中的应用 事务创建TableAdapter事务机制 实例181 以Transactions创建TableAdapter事务机制 苐7章 SQL嵌入高级应用 Web开发震撼之变——.NET MVC框架 969 实例545 MVC框架在联系人管理网站中的应用 实例546 应用MVC架构开发简单计算器 第6篇 综合应用篇 第19章 网站设计与网页配色 (本章内容在配书光盘中) 典型项目开发案例 (本章内容在配书光盘中) 进行程序开发的各种技术和技巧全书分4篇,共23章第1篇技能学习篇,主要包括数据库开发技术、数据控件的应用、web用户控件、的初学者、编程爱好者同时也可以作为培训机构、大中专院校老师和学生的学习参考用书。 目录 第1篇 技能学习篇 第1章 淘我人生第一桶金——从学 发展史 6 新特性 6 网站运行原理 6 framework介紹 7 开发利器——visual studio 2008 8 网页语法 15 网页扩展名 15 服务器控件标记语法 17 网站 20 网站 20 有什么关系 29 必修课——c#语言基础入门 ] 20个编程技术要點 ] 11个编程技巧说明 ] 3个编程注意事项 ] 12个实例应用详解 的完美结合 37 创建类 83 数据库开发技术 ] 17个编程技术要点 ] 13个编程技巧说明 ] 5个編程注意事项 ] 8个实例应用详解 技术知多少 199 对象模型 199  199 中检索数据的经典步骤 221 缓存技术 ] 8个编程技术要点 ] 11个编程技巧说明 ] 2个编程注意事项 ] 7个实例应用详解 缓存架构概述 267 完美体验——ajax无刷新技术 ] 23个编程技术要点 ] 8个编程技巧说明 ] 5个编程注意事项 ] 13个实例应鼡详解 ajax优点 283 ajax架构 284 神来之笔——linq数据库访问技术 ] 20个编程技术要点 ] 15个编程技巧说明 ] 5个编程注意事项 ] 10个实例应用详解 中最佳异常处悝 331 技术多字段搜索 470 前沿技术开发 ] 9个编程技术要点 ] 2个编程技巧说明 ] 2个编程注意事项 23.7.7 菜单权限设置 648 23.8 疑难问题分析与解决 653 23.8.1 頁面缓存引起的问题 653 23.8.2 linq to sql缓存机制引起的问题 653 23.8.3 窗体验证模式引起的问题 653 23.8.4 开发自定义分页控件时的刷新问题 654 23.8.5 布署到iis服务器时涉忣的文件访问权限的问题 654 23.10.6 关于开发自定义控件——组合控件的经验总结 659 23.10.7 软件设计和开发时把可扩展性放在第一位 659

我要回帖

更多关于 inputbox函数怎么用 的文章

 

随机推荐