发布新日志

  • 超详细的SQL语句语法

    2008-07-28 17:43:56

    简单的Transact-SQL查询只包括选择列表、FROM子句和WHERE子句
      一、 简单查询

      简单的Transact-SQL查询只包括选择列表、FROM子句和WHERE子句。它们分别说明所查询列、查询的表或视图、以及搜索条件等。

      例如,下面的语句查询testtable表中姓名为“张三”的nickname字段和email字段。   SELECT nickname,email
      FROM testtable
      WHERE name='张三'


      (一) 选择列表

      选择列表(select_list)指出所查询列,它可以是一组列名列表、星号、表达式、变量(包括局部变量和全局变量)等构成。

      1、选择所有列

      例如,下面语句显示testtable表中所有列的数据:   SELECT *
      FROM testtable 


      2、选择部分列并指定它们的显示次序

      查询结果集合中数据的排列顺序与选择列表中所指定的列名排列顺序相同。

      例如:   SELECT nickname,email
      FROM testtable


      3、更改列标题

      在选择列表中,可重新指定列标题。定义格式为:

      列标题=列名

      列名 列标题

      如果指定的列标题不是标准的标识符格式时,应使用引号定界符,例如,下列语句使用汉字显示列标题:   SELECT 昵称=nickname,电子邮件=email
      FROM testtable


      4、删除重复行

      SELECT语句中使用ALL或DISTINCT选项来显示表中符合条件的所有行或删除其中重复的数据行,默认为ALL。使用DISTINCT选项时,对于所有重复的数据行在SELECT返回的结果集合中只保留一行。

      5、限制返回的行数

      使用TOP n [PERCENT]选项限制返回的数据行数,TOP n说明返回n行,而TOP n PERCENT时,说明n是表示一百分数,指定返回的行数等于总行数的百分之几。

      例如: SELECT TOP 2 *FROM testtable SELECT TOP 20 PERCENT * FROM testtable

    9、说明:in 的使用方法
    select * from table1 where a [not] in (‘值1’,’值2’,’值4’,

    ’值6’)

    10、说明:两张关联表,删除主表中已经在副表中没有的信息
    delete from table1 where not exists ( select * from table2

    where table1.field1=table2.field1 )

    11、说明:四表联查问题:
    select * from a left inner join b on a.a=b.b right inner join

    c on a.a=c.c inner join d on a.a=d.d where .....

    12、说明:日程安排提前五分钟提醒
    SQL: select * from 日程安排 where datediff('minute',f开始时

    间,getdate())>5

    13、说明:一条sql 语句搞定数据库分页
    select top 10 b.* from (select top 20 主键字段,排序字段 from 表

    名 order by 排序字段 desc) a,表名 b where b.主键字段 = a.主键字

    段 order by a.排序字段

    14、说明:前10条记录
    select top 10 * form table1 where 范围

    15、说明:选择在每一组b值相同的数据中对应的a最大的记录的所有信息(

    类似这样的用法可以用于论坛每月排行榜,每月热销产品分析,按科目成绩排

    名,等等.)
    select a,b,c from tablename ta where a=(select max(a) from

    tablename tb where tb.b=ta.b)

    16、说明:包括所有在 TableA 中但不在 TableB和TableC 中的行并消除

    所有重复行而派生出一个结果表
    (select a from tableA ) except (select a from tableB) except

    (select a from tableC)

    17、说明:随机取出10条数据
    select top 10 * from tablename order by newid()

    18、说明:随机选择记录
    select newid()

    19、说明:删除重复记录
    Delete from tablename where id not in (select max(id) from

    tablename group by col1,col2,...)

    20、说明:列出数据库里所有的表名
    select name from sysobjects where type='U'

    21、说明:列出表里的所有的
    select name from syscolumns where id=object_id('TableName')

    22、说明:列示type、vender、pcs字段,以type字段排列,case可以方便

    地实现多重选择,类似select 中的case。
    select type,sum(case vender when 'A' then pcs else 0

    end),sum(case vender when 'C' then pcs else 0 end),sum(case

    vender when 'B' then pcs else 0 end) FROM tablename group by

    type
    显示结果:
    type vender pcs
    电脑 A 1
    电脑 A 1
    光盘 B 2
    光盘 A 2
    手机 B 3
    手机 C 3

    23、说明:初始化表table1
    TRUNCATE TABLE table1

    24、说明:选择从10到15的记录
    select top 5 * from (select top 15 * from table order by id

    asc) table_别名 order by id desc
      
    随机选择数据库记录的方法(使用Randomize函数,通过SQL语句实现)
      对存储在数据库中的数据来说,随机数特性能给出上面的效果,但它们

    可能太慢了些。你不能要求ASP“找个随机数”然后打印出来。实际上常见

    的解决方案是建立如下所示的循环:
    Randomize
    RNumber = Int(Rnd*499) +1
     
    While Not objRec.EOF
    If objRec("ID") = RNumber THEN
    ... 这里是执行脚本 ...
    end if
    objRec.MoveNext
    Wend
     
      这很容易理解。首先,你取出1到500范围之内的一个随机数(假设500

    就是数据库内记录的总数)。然后,你遍历每一记录来测试ID 的值、检查

    其是否匹配RNumber。满足条件的话就执行由THEN 关键字开始的那一块代码

    。假如你的RNumber 等于495,那么要循环一遍数据库花的时间可就长了。

    虽然500这个数字看起来大了些,但相比更为稳固的企业解决方案这还是个

    小型数据库了,后者通常在一个数据库内就包含了成千上万条记录。这时候

    不就死定了?
      采用SQL,你就可以很快地找出准确的记录并且打开一个只包含该记录

    的recordset,如下所示:
    Randomize
    RNumber = Int(Rnd*499) + 1
     
    SQL = "SELECT * FROM Customers WHERE ID = " & RNumber
     
    set ōbjRec = ObjConn.Execute(SQL)
    Response.WriteRNumber & " = " & objRec("ID") & " " &

    objRec("c_email")
     
      不必写出RNumber 和ID,你只需要检查匹配情况即可。只要你对以上代

    码的工作满意,你自可按需操作“随机”记录。Recordset没有包含其他内

    容,因此你很快就能找到你需要的记录这样就大大降低了处理时间。
    再谈随机数
      现在你下定决心要榨干Random 函数的最后一滴油,那么你可能会一次

    取出多条随机记录或者想采用一定随机范围内的记录。把上面的标准Random

    示例扩展一下就可以用SQL应对上面两种情况了。
      为了取出几条随机选择的记录并存放在同一recordset内,你可以存储

    三个随机数,然后查询数据库获得匹配这些数字的记录:
    SQL = "SELECT * FROM Customers WHERE ID = " & RNumber & " OR

    ID = " & RNumber2 & " OR ID = " & RNumber3
     
      假如你想选出10条记录(也许是每次页面装载时的10条链接的列表),

    你可以用BETWEEN 或者数学等式选出第一条记录和适当数量的递增记录。这

    一操作可以通过好几种方式来完成,但是 SELECT 语句只显示一种可能(这

    里的ID 是自动生成的号码):
    SQL = "SELECT * FROM Customers WHERE ID BETWEEN " & RNumber &

    " AND " & RNumber & "+ 9"

      注意:以上代码的执行目的不是检查数据库内是否有9条并发记录。

     
    随机读取若干条记录,测试过
    Access语法:SELECT top 10 * From 表名 ORDER BY Rnd(id)
    Sql server:select top n * from 表名 order by newid()
    mysqlelect * From 表名 Order By rand() Limit n
    Access左连接语法(最近开发要用左连接,Access帮助什么都没有,网上没有

    Access的SQL说明,只有自己测试, 现在记下以备后查)
    语法elect table1.fd1,table1,fd2,table2.fd2 From table1 left

    join table2 on table1.fd1,table2.fd1 where ...
    使用SQL语句 用...代替过长的字符串显示
    语法:
    SQL数据库:select case when len(field)>10 then left(field,10)

    +'...' else field end as news_name,news_id from tablename
    Access数据库:SELECT iif(len(field)>2,left(field,2)

    +'...',field) FROM tablename;
     
    Conn.Execute说明
    Execute方法
      该方法用于执行SQL语句。根据SQL语句执行后是否返回记录集,该方法

    的使用格式分为以下两种:
        1.执行SQL查询语句时,将返回查询得到的记录集。用法为:
        Set 对象变量名=连接对象.Execute("SQL 查询语言")
       Execute方法调用后,会自动创建记录集对象,并将查询结果存储在

    该记录对象中,通过Set方法,将记录集赋给指定的对象保存,以后对象变

    量就代表了该记录集对象。

        2.执行SQL的操作性语言时,没有记录集的返回。此时用法为:
        连接对象.Execute "SQL 操作性语句" [, RecordAffected][,

    Option]
          ·RecordAffected 为可选项,此出可放置一个变量,SQL语

    句执行后,所生效的记录数会自动保存到该变量中。通过访问该变量,就可

    知道SQL语句队多少条记录进行了操作。
          ·Option 可选项,该参数的取值通常为adCMDText,它用于

    告诉ADO,应该将Execute方法之后的第一个字符解释为命令文本。通过指定

    该参数,可使执行更高效。

    ·BeginTrans、RollbackTrans、CommitTrans方法
      这三个方法是连接对象提供的用于事务处理的方法。BeginTrans用于开

    始一个事物;RollbackTrans用于回滚事务;CommitTrans用于提交所有的

    事务处理结果,即确认事务的处理。
      事务处理可以将一组操作视为一个整体,只有全部语句都成功执行后,

    事务处理才算成功;若其中有一个语句执行失败,则整个处理就算失败,并

    恢复到处里前的状态。
      BeginTrans和CommitTrans用于标记事务的开始和结束,在这两个之间

    的语句,就是作为事务处理的语句。判断事务处理是否成功,可通过连接对

    象的Error集合来实现,若Error集合的成员个数不为0,则说明有错误发生

    ,事务处理失败。Error集合中的每一个Error对象,代表一个错误信息。
    以下是MS SQL

    SQL分类:
    DDL—数据定义语言(CREATE,ALTER,DROP,DECLARE)
    DML—数据操纵语言(SELECT,DELETE,UPDATE,INSERT)
    DCL—数据控制语言(GRANT,REVOKE,COMMIT,ROLLBACK)

    首先,简要介绍基础语句:
    1、说明:创建数据库
    CREATE DATABASE database-name
    2、说明:删除数据库
    drop database dbname
    3、说明:备份sql server
    --- 创建 备份数据的 device
    USE master
    EXEC sp_addumpdevice 'disk', 'testBack',

    'c:mssql7backupMyNwind_1.dat'
    --- 开始 备份
    BACKUP DATABASE pubs TO testBack
    4、说明:创建新表
    create table tabname(col1 type1 [not null] [primary key],col2

    type2 [not null],..)
    根据已有的表创建新表:
    A:create table tab_new like tab_old (使用旧表创建新表)
    B:create table tab_new as select col1,col2… from tab_old

    definition only
    5、说明:删除新表drop table tabname
    6、说明:增加一个列
    Alter table tabname add column col type
    注:列增加后将不能删除。DB2中列加上后数据类型也不能改变,唯一能改

    变的是增加varchar类型的长度。
    7、说明:添加主键: Alter table tabname add primary key(col)
    说明:删除主键: Alter table tabname drop primary key(col)
    8、说明:创建索引:create [unique] index idxname on tabname(col

    ….)
    删除索引:drop index idxname
    注:索引是不可更改的,想更改必须删除重新建。
    9、说明:创建视图:create view viewname as select statement
    删除视图:drop view viewname
    10、说明:几个简单的基本的sql语句
    选择:select * from table1 where 范围
    插入:insert into table1(field1,field2) values(value1,value2)
    删除:delete from table1 where 范围
    更新:update table1 set field1=value1 where 范围
    查找:select * from table1 where field1 like ’%value1%’ --

    -like的语法很精妙,查资料!
    排序:select * from table1 order by field1,field2 [desc]
    总数:select count * as totalcount from table1
    求和:select sum(field1) as sumvalue from table1
    平均:select avg(field1) as avgvalue from table1
    最大:select max(field1) as maxvalue from table1
    最小:select min(field1) as minvalue from table1
    11、说明:几个高级查询运算词
    A: UNION 运算符
    UNION 运算符通过组合其他两个结果表(例如 TABLE1 和 TABLE2)并消去

    表中任何重复行而派生出一个结果表。当 ALL 随 UNION 一起使用时(即

    UNION ALL),不消除重复行。两种情况下,派生表的每一行不是来自

    TABLE1 就是来自 TABLE2。
    B: EXCEPT 运算符
    EXCEPT 运算符通过包括所有在 TABLE1 中但不在 TABLE2 中的行并消除所

    有重复行而派生出一个结果表。当 ALL 随 EXCEPT 一起使用时 (EXCEPT

    ALL),不消除重复行。
    C: INTERSECT 运算符
    INTERSECT 运算符通过只包括 TABLE1 和 TABLE2 中都有的行并消除所有

    重复行而派生出一个结果表。当 ALL 随 INTERSECT 一起使用时

    (INTERSECT ALL),不消除重复行。
    注:使用运算词的几个查询结果行必须是一致的。
    12、说明:使用外连接
    A、left outer join:
    左外连接(左连接):结果集几包括连接表的匹配行,也包括左连接表的所

    有行。
    SQL: select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN

    b ON a.a = b.c
    B:right outer join:
    右外连接(右连接):结果集既包括连接表的匹配连接行,也包括右连接表的

    所有行。
    C:full outer join:
    全外连接:不仅包括符号连接表的匹配行,还包括两个连接表中的所有记录

    其次,大家来看一些不错的sql语句
    1、说明:复制表(只复制结构,源表名:a 新表名:b) (Access可用)
    法一:select * into b from a where 1<>1
    法二:select top 0 * into b from a

    2、说明:拷贝表(拷贝数据,源表名:a 目标表名:b) (Access可用)
    insert into b(a, b, c) select d,e,f from a;

    3、说明:跨数据库之间表的拷贝(具体数据使用绝对路径) (Access可用)
    insert into b(a, b, c) select d,e,f from a in ‘具体数据库’

    where 条件
    例子:..from b in '"&Server.MapPath(".")&"data.mdb" &"'

    where..

    4、说明:子查询(表名1:a 表名2:b)
    select a,b,c from a where a IN (select d from b ) 或者:

    select a,b,c from a where a IN (1,2,3)

    5、说明:显示文章、提交人和最后回复时间
    select a.title,a.username,b.adddate from table a,(select

    max(adddate) adddate from table where table.title=a.title) b

    6、说明:外连接查询(表名1:a 表名2:b)
    select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON

    a.a = b.c

    7、说明:在线视图查询(表名1:a )
    select * from (SELECT a,b,c FROM a) T where t.a > 1;

    8、说明:between的用法,between限制查询数据范围时包括了边界值,not

    between不包括
    select * from table1 where time between time1 and time2
    select a,b,c, from table1 where a not between 数值1 and 数值2

    9、说明:in 的使用方法
    select * from table1 where a [not] in (‘值1’,’值2’,’值4’,

    ’值6’)

    10、说明:两张关联表,删除主表中已经在副表中没有的信息
    delete from table1 where not exists ( select * from table2

    where table1.field1=table2.field1 )

    11、说明:四表联查问题:
    select * from a left inner join b on a.a=b.b right inner join

    c on a.a=c.c inner join d on a.a=d.d where .....

    12、说明:日程安排提前五分钟提醒
    SQL: select * from 日程安排 where datediff('minute',f开始时

    间,getdate())>5

    13、说明:一条sql 语句搞定数据库分页
    select top 10 b.* from (select top 20 主键字段,排序字段 from 表

    名 order by 排序字段 desc) a,表名 b where b.主键字段 = a.主键字

    段 order by a.排序字段

    14、说明:前10条记录
    select top 10 * form table1 where 范围

    15、说明:选择在每一组b值相同的数据中对应的a最大的记录的所有信息(

    类似这样的用法可以用于论坛每月排行榜,每月热销产品分析,按科目成绩排

    名,等等.)
    select a,b,c from tablename ta where a=(select max(a) from

    tablename tb where tb.b=ta.b)

    16、说明:包括所有在 TableA 中但不在 TableB和TableC 中的行并消除

    所有重复行而派生出一个结果表
    (select a from tableA ) except (select a from tableB) except

    (select a from tableC)

    17、说明:随机取出10条数据
    select top 10 * from tablename order by newid()

    18、说明:随机选择记录
    select newid()

    19、说明:删除重复记录
    Delete from tablename where id not in (select max(id) from

    tablename group by col1,col2,...)

    20、说明:列出数据库里所有的表名
    select name from sysobjects where type='U'

    21、说明:列出表里的所有的
    select name from syscolumns where id=object_id('TableName')

    22、说明:列示type、vender、pcs字段,以type字段排列,case可以方便

    地实现多重选择,类似select 中的case。
    select type,sum(case vender when 'A' then pcs else 0

    end),sum(case vender when 'C' then pcs else 0 end),sum(case

    vender when 'B' then pcs else 0 end) FROM tablename group by

    type
    显示结果:
    type vender pcs
    电脑 A 1
    电脑 A 1
    光盘 B 2
    光盘 A 2
    手机 B 3
    手机 C 3

    23、说明:初始化表table1
    TRUNCATE TABLE table1

    24、说明:选择从10到15的记录
    select top 5 * from (select top 15 * from table order by id

    asc) table_别名 order by id desc
      
    随机选择数据库记录的方法(使用Randomize函数,通过SQL语句实现)
      对存储在数据库中的数据来说,随机数特性能给出上面的效果,但它们

    可能太慢了些。你不能要求ASP“找个随机数”然后打印出来。实际上常见

    的解决方案是建立如下所示的循环:
    Randomize
    RNumber = Int(Rnd*499) +1
     
    While Not objRec.EOF
    If objRec("ID") = RNumber THEN
    ... 这里是执行脚本 ...
    end if
    objRec.MoveNext
    Wend
     
      这很容易理解。首先,你取出1到500范围之内的一个随机数(假设500

    就是数据库内记录的总数)。然后,你遍历每一记录来测试ID 的值、检查

    其是否匹配RNumber。满足条件的话就执行由THEN 关键字开始的那一块代码

    。假如你的RNumber 等于495,那么要循环一遍数据库花的时间可就长了。

    虽然500这个数字看起来大了些,但相比更为稳固的企业解决方案这还是个

    小型数据库了,后者通常在一个数据库内就包含了成千上万条记录。这时候

    不就死定了?
      采用SQL,你就可以很快地找出准确的记录并且打开一个只包含该记录

    的recordset,如下所示:
    Randomize
    RNumber = Int(Rnd*499) + 1
     
    SQL = "SELECT * FROM Customers WHERE ID = " & RNumber
     
    set ōbjRec = ObjConn.Execute(SQL)
    Response.WriteRNumber & " = " & objRec("ID") & " " &

    objRec("c_email")
     
      不必写出RNumber 和ID,你只需要检查匹配情况即可。只要你对以上代

    码的工作满意,你自可按需操作“随机”记录。Recordset没有包含其他内

    容,因此你很快就能找到你需要的记录这样就大大降低了处理时间。
    再谈随机数
      现在你下定决心要榨干Random 函数的最后一滴油,那么你可能会一次

    取出多条随机记录或者想采用一定随机范围内的记录。把上面的标准Random

    示例扩展一下就可以用SQL应对上面两种情况了。
      为了取出几条随机选择的记录并存放在同一recordset内,你可以存储

    三个随机数,然后查询数据库获得匹配这些数字的记录:
    SQL = "SELECT * FROM Customers WHERE ID = " & RNumber & " OR

    ID = " & RNumber2 & " OR ID = " & RNumber3
     
      假如你想选出10条记录(也许是每次页面装载时的10条链接的列表),

    你可以用BETWEEN 或者数学等式选出第一条记录和适当数量的递增记录。这

    一操作可以通过好几种方式来完成,但是 SELECT 语句只显示一种可能(这

    里的ID 是自动生成的号码):
    SQL = "SELECT * FROM Customers WHERE ID BETWEEN " & RNumber &

    " AND " & RNumber & "+ 9"

      注意:以上代码的执行目的不是检查数据库内是否有9条并发记录。

     
    随机读取若干条记录,测试过
    Access语法:SELECT top 10 * From 表名 ORDER BY Rnd(id)
    Sql server:select top n * from 表名 order by newid()
    mysqlelect * From 表名 Order By rand() Limit n
    Access左连接语法(最近开发要用左连接,Access帮助什么都没有,网上没有

    Access的SQL说明,只有自己测试, 现在记下以备后查)
    语法elect table1.fd1,table1,fd2,table2.fd2 From table1 left

    join table2 on table1.fd1,table2.fd1 where ...
    使用SQL语句 用...代替过长的字符串显示
    语法:
    SQL数据库:select case when len(field)>10 then left(field,10)

    +'...' else field end as news_name,news_id from tablename
    Access数据库:SELECT iif(len(field)>2,left(field,2)

    +'...',field) FROM tablename;
     
    Conn.Execute说明
    Execute方法
      该方法用于执行SQL语句。根据SQL语句执行后是否返回记录集,该方法

    的使用格式分为以下两种:
        1.执行SQL查询语句时,将返回查询得到的记录集。用法为:
        Set 对象变量名=连接对象.Execute("SQL 查询语言")
       Execute方法调用后,会自动创建记录集对象,并将查询结果存储在

    该记录对象中,通过Set方法,将记录集赋给指定的对象保存,以后对象变

    量就代表了该记录集对象。

        2.执行SQL的操作性语言时,没有记录集的返回。此时用法为:
        连接对象.Execute "SQL 操作性语句" [, RecordAffected][,

    Option]
          ·RecordAffected 为可选项,此出可放置一个变量,SQL语

    句执行后,所生效的记录数会自动保存到该变量中。通过访问该变量,就可

    知道SQL语句队多少条记录进行了操作。
          ·Option 可选项,该参数的取值通常为adCMDText,它用于

    告诉ADO,应该将Execute方法之后的第一个字符解释为命令文本。通过指定

    该参数,可使执行更高效。

    ·BeginTrans、RollbackTrans、CommitTrans方法
      这三个方法是连接对象提供的用于事务处理的方法。BeginTrans用于开

    始一个事物;RollbackTrans用于回滚事务;CommitTrans用于提交所有的

    事务处理结果,即确认事务的处理。
      事务处理可以将一组操作视为一个整体,只有全部语句都成功执行后,

    事务处理才算成功;若其中有一个语句执行失败,则整个处理就算失败,并

    恢复到处里前的状态。
      BeginTrans和CommitTrans用于标记事务的开始和结束,在这两个之间

    的语句,就是作为事务处理的语句。判断事务处理是否成功,可通过连接对

    象的Error集合来实现,若Error集合的成员个数不为0,则说明有错误发生

    ,事务处理失败。Error集合中的每一个Error对象,代表一个错误信息。
    Access基本操作


    Access基本操作

    一、数据库的基本概念和设计方法

    所谓数据库实际上是关于某一特定主题或目标的信息集合。它把大量数据按一定的结构进行存储,集中管理和统一使用这些数据,实现数据共享。在Access中,数据库不仅包含用于存放加工过的信息的表,还包含以表中所存放的信息为操作对象的查询、窗体、报表、页等数据库对象。

    一般地,数据库的设计应遵循以下几个步骤:

    1、确定创建数据库所要完成的目的。

    2、确定创建数据库中所需要的表。

    3、确定表中所需要的字段。

    4、明确有唯一值的主关键字段。

    5、确定表之间的关系。

    6、优化设计。

    7、输入数据并创建其他数据库对象。
    二、创建数据库

    在Access中既可以使用人工的方法按照自己的要求来建立数据库,也可以使用软件为用户提供的各种数据库向导,前者更为自由而后者则显然要方便一些。

    A、自行创建数据库

    使用人工的方法按照自己的要求来建立数据库,首先应创建一个空数据库,然后再将对象加入到数据库中。创建空数据库的步骤为:

    1、在启动Access后的Microsoft Access对话框中选择“空Access数据库”选项。

    2、在弹出的“文件新建数据库”对话框中选择数据库存放的位置、输入数据库的名称并单击“创建”按钮,进入Access数据库窗口,即完成了空数据库的创建。

    B、使用数据库向导创建数据库

    Access为用户提供了多种数据库向导,使用数据库向导可以方便地完成数据库的创建工作。具体步骤如下:

    1、在启动Access后的Microsoft Access对话框中选择“Access数据库向导、数据页和项目”选项。

    2、在弹出“新建”对话框后单击“数据库”选项卡,选择一种数据库。

    3、在弹出的“文件新建数据库”对话框中,选择数据库存放的位置,输入数据库的名称并单击“创建”按钮。

    4、依次在数据库向导窗口中为数据库中的各个表选择字段、选择显示样式、确定打印报表所用的样式、输入所建数据库的标题、确定是否在所有报表上加一幅图片,最后启动该数据库,至此就完成了使用向导创建数据库的工作。
    三、表的基本概念

    表是数据库中存储数据的最基本的对象,常称为“基础表”,是构成数据库的一个重要组成部分。表由若干记录组成,每一行称为一个记录,对应着一个真实的对象;每一列称为一个字段,对应着对象的一个属性信息。每个表的关键字(关键字可以为一个字段或多个字段)使表中的记录唯一。在表内还可以定义索引,当表内存放大量数据时可以加速数据的查找。

    Access中的所有数据都存放在数据表中。表是一个数据库系统的基础,只有建立表后,才可以建立查询、窗体和报表等其他项目,逐步完善数据库。
    四、创建表

    Access提供了三种创建新表的方法:

    1、使用数据库向导,在一个操作中创建整个数据库所需的全部表、窗体及报表。

    2、使用表向导来选择表的字段,这些字段可以从其他已定义好的表中选择。

    3、使用设计视图创建表。

    不管使用哪一种方法来创建表,随时都可以使用表设计试图来进一步自定义表。由于第一种方法已包含在使用数据库向导创建数据库的内容之中,这里着重说明后两种方法的实现。

    A、利用表向导创建表

    利用表向导创建新表,一般情况下能满足数据库开发者的要求,至于多余的字段可以用其他的方法将其删除。利用表向导创建表的步骤如下:

    1、在数据库窗口中,单击“对象”列表中的“表”,双击“使用向导创建表”。

    2、在弹出的“表向导”对话框中单击“表向导”并单击“确定”按钮。

    3、在弹出的对话框中选择要使用的表并添加所需要的字段(可以重命名)后单击“下一步”按钮。

    4、为表指定名称并确认主键,单击“下一步”按钮。

    5、选择创建完表后的动作,然后单击“完成”按钮。

    B、利用设计视图创建表

    使用设计器建立表的方法有两种:一种方法是直接使用设计器来创建新表,另一种方法是使用表向导来构造一个结构相近的表,然后在设计器中打开修改。下面介绍使用设计器来创建新表的步骤:

    1、在数据库窗口中,单击对象列表中的“表”,双击“使用设计器创建表”的按钮,进入“新建表”对话框。

    2、在各栏中输入字段名称、选择数据类型,然后设置字段属性。

    3、接着选中要设置为关键字的字段,单击“编辑”菜单中“主键”命令,设置“主关键字”,此时在所选字段左边行选定器上出现钥匙标记。

    4、保存所设计的表。
    五、关于主关键字与建立表间关系

    A、设置主关键字

    为了提高Access在查询、窗体和报表操作中的快速查找能力和组合保存在各个不同表中信息的性能,必须为建立的表指定一个主关键字。主关键字可以包含一个或多个字段,以保证每条记录都有唯一的值。设定主关键字的目的就在于保证表中的所有记录都能够被唯一识别。如果表中没有可以用作唯一识别表中记录的字段,则可以使用多个字段来组合成主关键字。其设置步骤如下:

    1、在表设计器中,单击字段名称左边的字段选择按钮,选择要作为主关键字的字段。单击字段选择按钮的同时按住Ctrl键可以同时选择多个字段。

    2、单击“编辑”菜单中的“主键”命令,则在该字段的左边显示钥匙标记。

    B、建立表间关系

    在表中定义主关键字除了可以保证每条记录可以被唯一识别外,更重要的作用在于多个表间的连接。当数据库中包含多个表时,需要通过主关键字的连接来建立表间的关系,使各表协同工作。

    要在两个表间建立关系,必须在这两个表中拥有相同数据类型的字段。其设置步骤如下:

    1、打开表所在的数据库窗口。

    2、单击“工具”菜单中的“关系”命令,弹出“显示表”对话框。

    3、选择要建立关系的表,然后单击“添加”按钮,依次添加完所需要的表后,单击“关闭”按钮。

    4、在关系对话框中选择其中一表中的主关键字,拖曳到另一表中相同的主关键字,释放鼠表键后,弹出“编辑关系”对话框。

    5、若在“编辑关系”对话框中选中“实施参照完整性”和“级联更新相关字段”复选框,则使在更新主表中记录的同时更新关系表中的相关记录。

    6、若在“编辑关系”对话框中选中“实施参照完整性”和“级联删除相关字段”复选框,则使在删除主表中记录的同时删除关系表中的相关记录。

    7、接着单击“联接类型”按钮,弹出“联接属性”对话框,在此选择联接的方式。

    8、在“编辑关系”对话框中单击“创建”按钮,即在创建关系的表之间有一条线将其连接起来,表示已创建好表之间的关系。

    9、关闭关系对话框,按需要选择是否保存关系的设定。

    编辑或修改关联性的操作是直接用鼠标在这一条线上双击,然后在弹出的“编辑关系”对话框中进行修改。删除关联性的操作是先用鼠标在这一条线上单击,然后再按Delete键删除。
    六、记录的基本操作

    Access只允许每次操作一个记录,正在操作的记录在行选定器上显示一个“三角图标”用于标记当前记录。当改变当前记录的数据但又没有保存时,行选定器上显示一个“笔型图标”。

    记录的基本操作包括添加记录、修改记录和删除记录。

    A、添加记录

    打开表的数据视图画面时,表的最末端有一条空白的记录,在记录的行选定器上显示一个星花图标,标示可以从这里开始增加新的记录。单击“插入”菜单中的“新记录”或直接选定该行即可添加记录。输入完数据后,移到另一个记录时会自动保存该记录。

    B、修改记录

    可用Tab键或直接用鼠标移到要修改的字段进行修改。

    C、删除记录

    选择一条或多条记录后按Delete键删除所有选中的记录。
    七、总结

    读过本文之后,相信您应该可以轻松地创建一个小型的数据库了,然而相比于Access强大而繁多的功能,这篇文章涉及的仅仅是最最简单和基本的一些操作,关于查询、窗体、报表、页以及宏与模块的内容将比表的基础操作更为复杂,有兴趣的读者可以查询其它的资料,以便顺利地设计和制作出高质量的应用系统。

  • SQL 的一些实例技巧

    2008-07-28 17:43:56

    -- 返回一个表中所有的字段
    select name from syscolumns where id=object_id('tb_usertable_online')


    -- 获取最近添加的标识列的值
    set @rs = @@identity

    -- 
    print len('abcdef')
    -- 大小写转换
    print lower('ABCDEF')
    print upper('abcdef')
    -- 去空格
    print ltrim('    abcd  dfd  df  ')
    print rtrim('    abcd  dfd  df  ')
    -- 求绝对值
    print abs(-12)

    -- 幂
    --
     3 的 2 次方
    print power(3,2)
    print power(3,3)
    -- 随机数
    --
     0 - 1000 之间的随机数
    print convert(int,rand() * 10 )
    -- 获取圆周率
    print pi()

    -- 获取系统时间
    print getdate()

    -- 获取3天前的时间
    print dateadd(day-3 , getdate())
    -- 获取3天后的时间
    print dateadd(day3 , getdate())
    -- 获取3年前的时间
    print dateadd(year-3 , getdate())
    -- 获取3年后的时间
    print dateadd(year3 , getdate())

    -- 获取3月后的时间
    print dateadd(month3 , getdate())
    -- 获取9小时后的时间
    print dateadd(hour, 9 , getdate())
    -- 获取9分钟后的时间
    print dateadd(minute, 9 , getdate())

    -- 获取指定时间之间相隔多少年
    print datediff(year'2005-01-01''2008-01-01')
    -- 获取指定时间之间相隔多少月
    print datediff(month'2005-01-01''2008-01-01')
    -- 获取指定时间之间相隔多少天
    print datediff(day'2005-01-01''2008-01-01')

    -- 字符串合并
    print 'abc' + 'def'

    print 'abcder'

    print 'abc' + '456'
    print 'abc' + 456

    -- 类型转换
    print 'abc' + convert(varchar(10), 456)

    select title_id, type, price from titles
    -- 字符串连接必须保证类型一致(以下语句执行将会出错)
    --
     类型转换
    select title_id + type + price from titles
    -- 正确
    select title_id + type + convert(varchar(10), price) from titles

    print '123' + convert(varchar(3), 123)
    print '123' + '123'


    -- 是否可以定义一个函数
    --
     将作者编号作为参数统计其作品数量并将其返回
    select au_id, au_lname, dbo.GetTitleCountByAuID(au_id) as TitleCount 
    from authors
    order by TitleCount

    -- 根据给定的作者编号获取其相应的作品数量
    create function GetTitleCountByAuID(@au_id varchar(12))
    returns int
    begin
     
    return (select count(title_id) 
      
    from titleauthor
      
    where au_id = @au_id)
    end


    -- 查看表结构
    sp_help titles
    -- 查看存储过程的定义内容
    sp_helptext GetRankByTitleId
    sp_helptext sp_helptext 
    sp_helptext xp_cmdshell


    -- 声明
    declare cur_titles cursor
    for select title, price from titles
    -- 打开
    open cur_titles
    declare @title varchar(80)
    declare @price numeric(9,4)
    declare @title_temp varchar(80)
    declare @price_temp numeric(9,4)
    -- 提取
    fetch cur_titles into @title@price
    fetch cur_titles into @title_temp@price_temp
    while @@fetch_status = 0
    begin
     
    if @price < @price_temp
     
    begin
      
    set @price = @price_temp
      
    set @title = @title_temp
     
    end 
     
    fetch cur_titles into @title_temp@price_temp
    end
    -- 关闭
    close cur_titles
    -- 释放
    deallocate cur_titles

    假设有张学生成绩表(CJ)如下
    Name Subject Result
    张三 语文 
    80
    张三 数学 
    90
    张三 物理 
    85
    李四 语文 
    85
    李四 数学 
    92
    李四 物理 
    82

    想变成 
    姓名 语文 数学 物理
    张三 
    80 90 85
    李四 
    85 92 82

    declare @sql varchar(4000)
    set @sql = 'select Name'
    select @sql = @sql + ',sum(case Subject when '''+Subject+''' then Result end) ['+Subject+']'
    from (select distinct Subject from CJ) as a
    select @sql = @sql+' from test group by name'
    exec(@sql)

    2. 行列转换--合并

    有表A,
    id pid
    1 1
    1 2
    1 3
    2 1
    2 2
    3 1
    如何化成表B:
    id pid
     
    1 1,2,3
     
    2 1,2
     
    3 1

    创建一个合并的函数
    create function fmerg(@id int)
    returns varchar(8000)
    as
    begin
    declare @str varchar(8000)
    set @str=''
    select @str=@str+','+cast(pid as varcharfrom 表A where id=@id set @str=right(@str,len(@str)-1)
    return(@str)
    End
    go

    --调用自定义函数得到结果
    select distinct id,dbo.fmerg(id) from 表A


    查询某一个表的字段和数据类型
    select column_name,data_type from information_schema.columns
    where table_name = '表名' 


    3.取回表中字段:
    declare @list varchar(1000),@sql nvarchar(1000
    set @list = ''
    --set @sql = ''
    select @list=@list+','+b.name from sysobjects a,syscolumns b where a.id=b.id and a.name='tb_user_msg'
    set @sql='select '+right(@list,len(@list)-1)+' from tb_user_msg' 
    -- print @sql
    exec sp_ExecuteSql @sql

    4.查看硬盘分区:
    EXEC master..xp_fixeddrives

    5.比较A,B表是否相等:
    if (select checksum_agg(binary_checksum(*)) from A)
        
    =
       (
    select checksum_agg(binary_checksum(*)) from B)
    print '相等'
    else
    print '不相等'

    6.杀掉所有的事件探察器进程:
    DECLARE hcforeach CURSOR GLOBAL FOR SELECT 'kill '+RTRIM(spid) FROM master.dbo.sysprocesses
    WHERE program_name IN('SQL profiler',N'SQL 事件探查器')
    EXEC sp_msforeach_worker '?'


    10:获取某一个表的所有字段
    select name from syscolumns where id=object_id('表名')

    11:查看与某一个表相关的视图、存储过程、函数
    select a.* from sysobjects a, syscomments b where a.id = b.id and b.text like '%表名%'

    9:获取当前数据库中的所有用户表
    select Name from sysobjects where xtype='u' and status>=0

    12:查看当前数据库中所有存储过程
    select name as 存储过程名称 from sysobjects where xtype='P'

    14:查询某一个表的字段和数据类型
    select column_name,data_type from information_schema.columns
    where
  • LoadRunner常用函数

    2007-11-16 10:43:53

    •   LoadRunner常用函数......

    1.         Intweb_reg_save_param("参数名","LB=左边界","RB=右边界",LAST);/注册函数,在参数值出现的前面使用,注册成功时返回值为0,注册失败时返回值为1。左右边界需根据TreeView里相关步骤的SeverResponse代码来确定。用以上函数能获取第一个符合条件的数值。

    2.         web_reg_save_param("参数名”,"LB=左边界”,"RB=右边界","Ord=All",LAST);/当参数有多个值时,加上"Ord=All”后可获取所有的数值。注册成功后,{参数名_count}表示取得的数值个数,{参数名_1}为第一个数值,{参数名_2}为第二个数值。

    3.         lr_save_string(“字符串变量”,"参数名")/将字符变量里的值传递给指定参数。通过该函数来改变DataFile类型参数的数值。

    4.         lr_eval_string("{参数名}")/取得参数的数值。可取得已注册参数或DataFile类型参数的数值。eval就是evaluation(估价, 评价, 赋值)的缩写。

    5.         int sprintf(char * string , const char*format_string[,args]);/字符串赋值函数

    Action()

    {

    int index=56;

    charfilename[64],*suffix="txt";

    sprintf(filename,"log_%d.%s",index,suffix);

    lr_output_message("Thenewfilenameis%s",filename);

    return 0;

    }

    OutputThenewfilenameislog_56.txt

    6.         char*strcat(char*to,constchar*from);/将一字符串追加到另一字符串后面

    7.         web_find("find_time","What=2006-03-0118:21:16.882",LAST);/增加检查点,检查“2006-03-0118:21:16.882”这个字符串是否出现在当前页面上。find_time为自己任意输入的检查点名称。

    8.       事务函数

    lr_end_sub_transaction/标记子事务的结束以便进行性能分析

    lr_end_transaction/标记LoadRunner事务的结束

    lr_end_transaction_instance/标记事务实例的结束以便进行性能分析

    lr_fail_trans_with_error/将打开事务的状态设置为LR_FAIL并发送错误消息

    lr_get_trans_instance_duration/获取事务实例的持续时间(由它的句柄指定)

    lr_get_trans_instance_wasted_time/获取事务实例浪费的时间(由它的句柄指定)

    lr_get_transaction_duration/获取事务的持续时间(按事务的名称)

    lr_get_transaction_think_time/获取事务的思考时间(按事务的名称)

    lr_get_transaction_wasted_time/获取事务浪费的时间(按事务的名称)

    lr_resume_transaction/继续收集事务数据以便进行性能分析

    lr_resume_transaction_instance/继续收集事务实例数据以便进行性能分析

    lr_set_transaction_instance_status/设置事务实例的状态

    lr_set_transaction_status/设置打开事务的状态

    lr_set_transaction_status_by_name/设置事务的状态

    lr_start_sub_transaction/标记子事务的开始

    lr_start_transaction/标记事务的开始

    lr_start_transaction_instance/启动嵌套事务(由它的父事务的句柄指定)

    lr_stop_transaction/停止事务数据的收集

    lr_stop_transaction_instance/停止事务(由它的句柄指定)数据的收集

    lr_wasted_time/消除所有打开事务浪费的时间

    lr_end_sub_transaction/标记子事务的结束以便进行性能分析

    r_end_transaction/标记LoadRunner事务的结束

    lr_end_transaction_instance/标记事务实例的结束以便进行性能分析

    lr_fail_trans_with_error/将打开事务的状态设置为LR_FAIL并

     

    9.      命令行分析函数

    lr_get_attrib_double/检索脚本命令行中使用的double类型变量

    lr_get_attrib_long/检索脚本命令行中使用的long类型变量

    lr_get_attrib_string/检索脚本命令行中使用的字符串

    10.  信息性函数

    lr_user_data_point/记录用户定义的数据示例

    lr_whoami/将有关Vuser脚本的信息返回给Vuser脚本

    lr_get_host_name/返回执行Vuser脚本的主机名

    lr_get_master_host_name/返回运行LoadRunnerController的计算机名

    11.  字符串函数

    lr_eval_string/用参数的当前值替换参数

    lr_save_string/将以NULL结尾的字符串保存到参数中

    lr_save_var/将变长字符串保存到参数中

    lr_save_datetime/将当前日期和时间保存到参数中

    lr_advance_param/前进到下一个可用参数

    lr_decrypt/解密已编码的字符串

    lr_eval_string_ext/检索指向包含参数数据的缓冲区的指针

    lr_eval_string_ext_free/释放由lr_eval_string_ext分配的指针

    lr_save_searched_string/在缓冲区中搜索字符串实例,并相对于该字符串实例,该缓冲区的一部分保存到参数中

    12.  消息函数

    lr_debug_message/将调试消息发送到输出窗口

    lr_error_message/将错误消息发送到输出窗口

    lr_get_debug_message/检索当前的消息类

    lr_log_message/将输出消息直接发送到output.txt文件,此文件位于Vuser脚本目录中。该函数有助于防止输出消息干扰TCP/IP通信。

    lr_output_message/将消息发送到输出窗口

    lr_set_debug_message/为输出消息设置消息类

    lr_vuser_status_message/生成格式化输出并将其打印到ControllerVuser状态区域。

    lr_message/将消息发送到Vuser日志和输出窗口

    13.  操作函数

    web_custom_request允许您使用HTTP支持的任何方法来创建自定义HTTP请求
    web_image
    在定义的图像上模拟鼠标单击
    web_link
    在定义的文本链接上模拟鼠标单击
    web_submit_data
    执行无条件无上下文的表单
    web_submit_form
    模拟表单的提交
    web_url
    加载由“URL”属性指定的URL

    14.  身份验证函数

    身份验证函数web_set_certificate使Vuser使用在InternetExplorer注册表中列出的特定证书
    身份验证函数web_set_certificate_ex指定证书和密钥文件的位置和格式信息
    身份验证函数web_set_user指定Web服务器的登录字符串和密码,用于Web服务器上已验证用户身份的区域

    15.  缓存函数

    缓存函数web_cache_cleanup清除缓存模拟程序的内容

    16.  检查函数

    检查函数web_findHTML页内搜索指定的文本字符串
    检查函数web_global_verification在所有后面的HTTP请求中搜索文本字符串
    检查函数web_image_check验证指定的图像是否存在于HTML页内
    检查函数web_reg_find在后面的HTTP请求中注册对HTML源或原始缓冲区中文本字符串的搜索

    17.  连接定义函数

    连接定义函数web_disable_keep_alive禁用Keep-AliveHTTP连接
    连接定义函数web_enable_keep_alive启用Keep-AliveHTTP连接
    连接定义函数web_set_connections_limit设置Vuser在运行脚本时可以同时打开连接的最大数目

    18.  并发组

    web_concurrent_end标记并发组的结束
    web_concurrent_start
    标记并发组的开始

    19.  cook函数

    web_add_cookie添加新的Cookie或修改现有的Cookie
    web_cleanup_cookies
    删除当前由Vuser存储的所有
    Cookie
    web_remove_cookie
    删除指定的Cookie

    20.  关联函数

    web_create_html_paramHTML页上的动态信息保存到参数中。(LR6.5及更低版本)
    web_create_html_param_ex
    基于包含在HTML页内的动态信息创建参数(使用嵌入边界)(LR6.5及更低版本)。
    关联函数 查看(2078) 评论(1) 收藏 分享 管理

  • Loadrunner中参数设置详细分析(转)

    2007-11-16 10:32:45

    Loadrunner中参数设置详细分析
    做负载或者压力测试时,很多人选择使用了Loadrunner测试工具。该工具的基本流程是先将用户的实际操作录制成脚本,然后产生数千个虚拟用户运行脚本(虚拟用户可以分布在局域网中不同的PC机上),最后生成相关的报告以及分析图。但是在录制脚本的过程中会遇到很多实际的问题,比如不同的用户有不同的使用数据,这就牵涉到参数的设置问题。本文就Loadrunner中参数的设置进行说明,希望对大家有所帮助。
       
    在录制程序运行的过程中, VuGen (脚本生成器)   自动生成了包含录制过程中实际用到的数值的脚本。如果你企图在录制的脚本中使用不同的数值执行脚本的活动(如查询、提交等等),那么你必须用参数值取代录制的数值。这个过程称为参数化脚本。
       
    本文主要包括如下内容:理解参数的局限性、建立参数、定义参数的属性、理解参数的类型、为局部数据类型设置参数的属性、为数据文件设置参数的属性、从已经存在的数据库中引入数据。
       
    除了 GUI ,以下的内容适合于各种类型的用户脚本。

    一、关于参数的定义
       
    在你录制程序运行的过程中,脚本生成器自动生成由函数组成的用户脚本。函数中参数的值就是在录制过程中输入的实际值。

       
    例如,你录制了一个 Web 应用程序的脚本。脚本生成器生成了一个声明,该声明搜索名称为“ UNIX ”的图书的数据库。当你用多个虚拟用户和迭代回放脚本时,也许你不想重复使用相同的值“ UNIX ”。那么,你就可以用参数来取代这个常量。结果就是你可以用指定的数据源的数值来取代参数值。数据源可以是一个文件,也可以是内部产生的变量。
       
    用参数表示用户的脚本有两个优点:
      可以使脚本的长度变短。
      可以使用不同的数值来测试你的脚本。例如,如果你企图搜索不同名称的图书,你仅仅需要写提交函数一次。在回放的过程中,你可以使用不同的参数值,而不只搜索一个特定名称的值。
       
    参数化包含以下两项任务:
      在脚本中用参数取代常量值。
      设置参数的属性以及数据源。
       
    参数化仅可以用于一个函数中的参量。你不能用参数表示非函数参数的字符串。另外,不是所有的函数都可以参数化的。

     

    二、参数的创建
       
    可以指定名称和类型来创建参数。不存在对脚本中参数个数的限制。在 Web 程序的用户脚本中,你可以使用如下过程在基于文本的脚本视图中创建参数。或者,也可以在基于图标的树形视图中创建参数。

       
    在基于文本的脚本视图中创建一个参数:
    1
      将光标定位在要参数化的字符上,点击右键。打开弹出菜单。
    2
      在弹出菜单中,选择“ Replace with a Parameter ”。选择或者创建参数的对话框弹出。
    3
      在“ Parameter name ”中输入参数的名称,或者选择一个在参数列表中已经存在的参数。
    4
      在“ Parameter type ”下拉列表中选择参数类型。
    5
      点击“ OK ”,关闭该对话框。脚本生成器便会用参数中的值来取代脚本中被参数化的字符,参数用一对“ {} ”括住。
       
    注意:在参数化 CORBA 或者 General-Java  用户脚本的时候,必须参数化整个字符串,而不是其中的部分。另外注意:除了 Web 或者 WAP ,缺省的参数括号对于任何脚本都是   {} ”。你可以在“ General Options ”对话框中的“ Parameterization ”标签( Tools>General Options )中定义参数括号种类。
    6
      用同样的参数替换字符的其余情况,选中参数,点击右键,弹出菜单。从弹出的菜单中,选择“ Replace More Occurrences
    ”。搜索和替换对话框弹出。“ Find What ”中显示了你企图替换的值。“ Replace With ”中显示了括号中参数的名称。选择适当的检验框来匹配整个字符或者大小写。如果要搜索规则的表达式( . ! ? 等等),选中“ Regular Expression ”检验框,然后点击“ Replace ”或者“ Replace All ”。

       
    注意:小心使用“ Replace All ”,尤其替换数字字符串的时候。脚本生成器将会替换字符出现的所有情况。
    7
      如果想用以前定义过的参数来替换常量字符串的话,选中该字符串,点击右键,然后选择“ Use Existing Parameter ”,子菜单“ Use Existing Parameters ”弹出。从子菜单“ Use Existing Parameters ”选择参数,或者用“ Select from Parameter List ”来打开参数列表对话框。
       
    注意:如果用以前定义过的参数来替换常量字符串的话,那么,使用“ Parameter List ”非常方便。同时,还可以查看和修改该参数的属性。
    8
      对于已经用参数替换过的地方,如果想取回原来的值,那么,就在参数上点击右键,然后选择“ Restore Original value ”。
       
    Web 用户脚本的树形视图中创建参数:
    1
    、将光标定位在企图参数化的地方,点击右键,从弹出的菜单中选择“ Properties ”。则相关的属性对话框打开。

    2
    、点击在要参数化的参量的旁边的“ ABC ”形状的图标。“ Select or Create Parameter ”对话框打开。
    3
    、在“ Parameter name ”中输入参数的名称,或者从列表中选择一个已经存在的参数。
    4
    、在“ Parameter type ”中输入参数的类型。
    5
    、点击“ OK ”关闭该对话框。用户脚本生成器会用参数来替换最初的字符串常量,并用一个表格形状的图标替换“ ABC ”形状的图标。
    6
    、要恢复参数化以前的值,点击图标,然后从弹出的菜单中选择“ Undo Parameter ”,则以前的值便会重现。

     

    三、定义参数的属性
       
    创建参数完成后,就可以定义其属性了。参数的属性定义就是定义在脚本执行过程中,参数使用的数据源。在 Web 用户脚本中,你既可以在基于文本的脚本视图中定义参数属性,也可以在基于图标的树形视图中定义参数属性。下面的过程将教你如何在基于本文的脚本视图中定义参数属性。

       
    在基于文本的脚本视图中定义参数属性步骤:
    1
      在参数上点击右键,有菜单弹出。
    2
      在弹出的菜单中,选择“ Parameter Properties ”。参数属性对话框打开,显示和当前参数类型相关的属性。
    3
      输入参数的属性值。
    4
      点击“ Close ”关闭参数属性对话框。
        
    Web 用户脚本的树形视图中定义参数的属性:
    1
      将关标定位在参数上,然后点击右键,选择“ Properties ”。属性对话框打开。
    2
      点击要定义属性的参数旁边的表格形状按钮,点击右键,选择“ Parameter Properties ”。参数属性对话框打开,和参数类型相关的属性显示出来。
    3
      输入参数的属性。
    4
      点击“ Close ”关闭参数属性对话框。
       
    使用参数列表:
      使用参数列表可以在任意时刻查看所有的参数,创建新的参数、删除参数,或者修改已经存在参数的属性。
    1
      点击参数列表按钮或者用“ Vuser>Parameter List ”。参数列表对话框打开。
    2
      要创建新的参数,点击“ New ”按钮。新的参数则被添加在参数树中,该参数有一个临时的名字,你可以给它重新命名,然后回车。设置参数的类型和属性,点击“ OK ”,关闭参数列表对话框。
       
    注意:不要将一个参数命名为“ unique ”,因为这个名称是用户脚本生成器本身的。用户脚本生成器创建新的参数,但是不会自动用该参数在脚本中替换任意选中的字符串。
      要删除已有的参数,那么,要先从参数树中选择该参数,点击“ Delete ”,然后确认你的行为即可。
    4
      要修改已有参数,那么,要先从参数树中选择该参数,然后编辑参数的类型和属性。

    四、理解参数的类型
      在你定义参数属性的时候,要指定参数值的数据源。你可以指定下列数据源类型的任何一种:

    Internal Data
    ――   虚拟用户内部产生的数据。
    Data Files 
    ――存在于文件中的数据。可能是已存在的文件或者是用脚本生成器新创建的。
    User-Defined Functions
    ――   调用外部 DLL 函数生成的数据
       Internal Data 包括以下几种:
    1
     Date/Time
       Date/Time 用当前的日期 / 时间替换参数。要指定一个 Date/Time 格式,你可以从菜单列表中选择格式,或者指定你自己的格式。这个格式应该和你脚本中录制的 Date/Time 格式保持一致。

    2
     Group Name
       Group Name  用虚拟用户组名称替换参数。在创建 scenario 的时候,你可以指定虚拟用户组的名称。当从用户脚本生成器运行脚本的时候,虚拟用户组名称总是 None

    3
     Load Generator Name
       Load Generator Name 用脚本负载生成器的名称替换参数。负载生成器是虚拟用户在运行的计算机。

    4. Iteration Number
       Iteration Number 用当前的迭代数目替换参数。
    5
     Random Number
       Random Number 用一个随机数替换参数。通过指定最大值和最小值来设置随机数的范围。

    6
     Unique Number
       Unique Number 用一个唯一的数字来替换参数。你可以指定一个起始数字和一个块的大小。

    7
     Vuser ID
       Vuser ID 用分配给虚拟用户的 ID 替换参数, ID 是由 Loadrunner 的控制器在 scenario 运行时生成的。如果你从脚本生成器运行脚本的话,虚拟用户的 ID 总是 -1

    五、数据文件
      数据文件包含着脚本执行过程中虚拟用户访问的数据。局部和全局文件中都可以存储数据。可以指定现有的 ASCII 文件、用脚本生成器创建一个新的文件或者引入一个数据库。在参数有很多已知值的时候数据文件非常有用。数据文件中的数据是以表的形式存储的。一个文件中可以包含很多参数值。每一列包含一个参数的数据。列之间用分隔符隔开,比如说,用逗号。

      对数据文件设置参数属性
      如果使用文件作为参数的数据源,必须指定以下内容:文件的名称和位置、包含数据的列、文件格式,包括列的分隔符、更新方法。
      如果参数的类型是“ File ”,打开参数属性( Parameter Properties )对话框,设置文件属性如下:
    1
      在“ File path ”中输入文件的位置,或者点击“ Browse ”指定一个已有文件的位置。缺省情况下,所有新的数据文件名都是“ parameter_name.dat ”,注意,已有的数据文件的后缀必须是 .dat
    2
      点击“ Edit ”。记事本打开,里面第一行是参数的名称,第二行是参数的初始值。使用诸如逗号之类的分隔符将列隔开。对于每一新的表行开始一行新的数据。
      注意:在没有启动记事本的情况下如果想添加列,就在参数属性对话框中点击“ Add Col ”,那么“ Add new column ”对话框就会弹出。输入新列的名称,点击“ OK ”。脚本生成器就会添加该列到表中,并显示该列的初始值。
    3
      在“ Select Column ”部分,指明包含当前参数数据的列。你可以指定列名或者列号。列号是包含你所需要数据的列的索引。列名显示在每列的第一行( row 0 )。
    4
      在“ Column delimiter ”中输入列分隔符,你可以指定逗号、空格符等等。
    5
      在“ First data line ”中,在脚本执行的时候选择第一行数据使用。列标题是第 0 行。若从列标题后面的第一行开始的话,那就在“ First data line ”中输入 1 。如果没有列标题,就输入 0
    6
      查看(711) 评论(0) 收藏 分享 管理