萧萧的枫林,萧萧的我

发布新日志

  • Lua中的数学库

    2010-05-28 09:01:14

    Lua5.1中数学库的所有函数如下表:

    math.pi 为圆周率常量 = 3.14159265358979323846

    abs

    取绝对值

    math.abs(-15)

    15

    acos

    反余弦函数

    math.acos(0.5)

    1.04719755

    asin

    反正弦函数

    math.asin(0.5)

    0.52359877

    atan2

    x / y的反正切值

    math.atan2(90.0, 45.0)

    1.10714871

    atan

    反正切函数

    math.atan(0.5)

    0.463647609

    ceil

    不小于x的最大整数

    math.ceil(5.8)

    6

    cosh

    双曲线余弦函数

    math.cosh(0.5)

    1.276259652

    cos

    余弦函数

    math.cos(0.5)

    0.87758256

    deg

    弧度转角度

    math.deg(math.pi)

    180

    exp

    计算以e为底x次方值

    math.exp(2)

    2.718281828

    floor

    不大于x的最大整数

    math.floor(5.6)

    5

    fmod (mod)

    取模运算

    math.mod(14, 5)

    4

    frexp

    把双精度数val分解为数字部分(尾数)和以2为底的指数n,即val=x*2n

    math.frexp(10.0)

    0.625    4

    ldexp

    计算value * 2的n次方

    math.ldexp(10.0, 3)

    80 = 10 * (2 ^3)

    log10

    计算以10为基数的对数

    math.log10(100)

    2

    log

    计算一个数字的自然对数

    math.log(2.71)

    0.9969

    max

    取得参数中最大值

    math.max(2.71, 100, -98, 23)

    100

    min

    取得参数中最小值

    math.min(2.71, 100, -98, 23)

    -98

    modf

    把数分为整数和小数

    math.modf(15.98)

    15    98

    pow

    得到x的y次方

    math.pow(2, 5)

    32

    rad

    角度转弧度

    math.rad(180)

    3.14159265358

    random

    获取随机数

    math.random(1, 100)
    math.random(100)

    获取1-100的随机数

    randomseed

    设置随机数种子

    math.randomseed(os.time())

    在使用math.random函数之前必须使用此函数设置随机数种子

    sinh

    双曲线正弦函数

    math.sinh(0.5)

    0.5210953

    sin

    正弦函数

    math.sin(math.rad(30))

    0.5

    sqrt

    开平方函数

    math.sqrt(16)

    4

    tanh

    双曲线正切函数

    math.tanh(0.5)

    0.46211715

    tan

    正切函数

    math.tan(0.5)

    0.5463024

  • QTP中Index,CreationTime属性特点的总结

    2009-07-22 21:15:04

    在QTP中我们常常会看到Index,CreationTime属性出现在对象中,
    但是往往我们无法正确理解这2个属性的含义和变化规律,就会给我们的测试带来很多困惑.
    (曾经我也深深困惑过!还求助无门)

    下面我就来说说我使用过程中的总结吧,相信用QTP做WEB测试的人,一定都有这方面的困惑

    总结1:
        Index和CreationTime属性的特点是一样的,唯一不同的地方是,index一般用来表示页面中的对象,元素的先后创建,CreationTime只用来表达浏览器(还有其他的window)相对于QTP启动时间上的顺序关系.

    总结2:
        index是一个辅助识别属性
    (有时可以没有"在已经唯一标识一个对象的情况下"有时又必须"某些对象什么属性都相同")
    这就决定了在"相同描述的对象"出现多个的情况下就一定有index,在一个对象现有"描述属性"已经能唯一标识一个对象的情况下,index是不会出现的.此时的index属性QTP里面标识为"none"
    比如"性别=男"这个"描述属性"在"全家"里因为有多个,所以就一定要Index来辅助描述.
    那么"称呼=爸爸"这个"描述属性"在"全家"里只有1个,所以我们说"爸爸"就马上知道是谁

    总结2:
        index在对象是唯一的情况下,没有任何意义和价值
    也就是说,只要这个对象在这个页面中确实是唯一的,那么无论你的index是什么值都能够正确识别这个对象
    比如当前页面中只有一个叫"风景"的图片,那么这个"风景"图片在任何index属性下都能正确识别

    总结3:
        当index,CreationTime属性在对象库中为none的时候,不能使用SetTOProperty赋值index属性,
    这个现象的原因目前还不明,不过现象是赋值能够成功,
    但是你无法使用赋值后index属性来正确识别你想像中的对象.


    总结4:
        index属性是QTP自己标识的.和程序编程里的index无关.
    学过编程的人,容易带入编程里面的概念,然而在QTP中,index属性是QTP自动生成的,和程序编程的时候使用的index是没有任何关系的,
    index属性的生成是按照相同对象出现的顺序来排列的,就是你用ChildObjects方法获得的对象集合中item(i)索引的顺序.

    总结5:
        index属性我们只能尝试改变对象库中的,不能改变实际对象
    因为index属性是由QTP自动标识的,而实际对象是没有index属性的,所以我们不能使用SetROProperty方法尝试改变实际对象的index属性,只能使用SetTOProperty方法改变对象库中的对象,让QTP识别.

    最后希望对那些还困惑在其中的同仁有少许帮助,我以前在index为none时候用SetTOProperty方法无效上面可是花了好多时间理解

  • QTP中Excel文件无法导入问题的解决办法

    2009-07-02 08:31:19

    最近用QTP导入EXCEL文件的时候常遇到excel文件无法导入的问题.
    找了很久论坛也问过了,都没有根本解决,一天突发奇想既然excel文件导入不了,那么QTP导出来的excel文件总应该可以使用吧

    于是写脚本,直接从excel文件中取出数据,写入DataTable然后从DataTable中导出成excel文件.就可以使用Import导入了.

    代码如下:(其实代码不复杂,关键是要有解决理路)

    ''***********************************************************
    '功能说明:把无法正确导入到QTP中的excel文件,转换为可以导入到QTP中的excel文件
    '脚本说明:excel文件中,如果第一行的某列没有内容,将自动停止转换.
    'excel中任何一列中间掺杂空白表格,将从此空白表格处停止转换下方的内容.
    '输出文件和源文件在同一个目录
    '脚本必须放在QTP中执行
    '***********************************************************

    Dim row,row2
    row=2        '设置开始转换的行
    row2=1       '设置开始转换的列
    tablename=""
    workbookurl=Select_File("D:\")
    If workbookurl="" Then
     msgbox("没有选择文件.程序将退出")
     exitrun
    end if


    Set ExcelObj = CreateObject("Excel.Application")     ' 创建excle工作表对象
    ExcelObj.Visible = False    '不显示打开的excel窗体      
    Set xlsWorkBook = ExcelObj.Workbooks.Open(workbookurl)  '打开excle文件
    Set NewSheet = xlsWorkBook.Sheets(1) '选择添加数据的工作表


    Do  '列循环开始
       If NewSheet.Cells(1,row2) = "" then'如果纵单元格第一行没有内容,就说明不需要转换了.
      Exit do
     else
      tablename=NewSheet.Cells(1,row2)
       tablename=DataTable.GetSheet("Global").AddParameter(tablename,"").Name '新建导入数据的字段名称.并赋值内容""
     end if
     row=2      '初始化开始的行
     Do         '行循环开始
      tmp=NewSheet.Cells(row,row2)
      If tmp = "" then'如果列中某单元格为空,则进入下一列开始转换
       Exit do
      end if
      datatable.GlobalSheet.GetParameter(tablename).ValueByRow(row-1)=tmp'写入数据到datatable中
      row=row+1
     loop
     row2=row2+1
    loop


    xlsWorkBook.close  '关闭工作表
    Set xlsWorkBook = Nothing
    datatable.Export(workbookurl&"-转换后的.xls")
    msgbox("转换完成")


    '选择文件函数
    Function Select_File(From_FilePath)
    If not existed(From_FilePath,"^[A-Za-z]:.*") Then
      From_FilePath="C:\"
    End If

    Set bjDialog = CreateObject("UserAccounts.CommonDialog")
    objDialog.Filter = "Excel文件|*.xls"
    objDialog.InitialDir = From_FilePath
    intResult = objDialog.ShowOpen
    Select_File=objDialog.FileName
    End Function

    '正则表达式函数
    Public Function Existed(Exist_String,Reg_Pattern)
     Dim re
     Set re = New RegExp
     re.Pattern = Reg_Pattern 
     re.IgnoreCase=True
     Existed=re.test(Exist_String)
     Set re=Nothing
    end Function


    '结束脚本
    ExitRun

  • QTP中正则表达式搜索/匹配字符串方法

    2009-06-14 15:38:51

    由于QTP是使用的vb语言,所以其实就是VB中正则表达式的使用,
    我稍微总结下喽!其中加入了我的理解,也正是由于我充分理解了正则表达式对象,所以在QTP中对于很多情况的判断游刃有余,希望每一个看到这篇文章的希望在QTP上有所深入的人,认真,仔细的理解正则表达式,它是一个非常强大的东西.
      
    第一.首先正则表达式使用如下对象.
    1. RegExp 这是使用正则表达式匹配模式的主要对象了
      属性:
      Pattern:一个字符串,用来定义正则表达式<匹配规则>。
      IgnoreCase如果True,则忽略英文字母大小的匹配,False对大小写进行匹配。
      Global:设置True则必须匹配整个<匹配规则>,设置False只匹配第一个<匹配规则>。
      MultiLine:设置True则在多行中搜索。设置False则在换行时停止
      方法:
      Execute:返回一个 MatchCollection 对象,该对象包含每个成功匹配的 Match 对象。
      Replace返回一个将符合<匹配规则>的字符串替换为指定字符串。
      Test:返回一个布尔值,该值指示正则表达式是否与字符串成功匹配。

    2. MatchCollection 是集合对象,该对象包含每个成功匹配的 Match 对象。

       属性:
      Count:匹配对象的总数。
      Item:匹配对象的索引。

    3. Match 是成功匹配的对象。

        属性:
      FirstIndex:匹配对象所匹配字符串的起始位置。
      Length:匹配对象所匹配字符串的字符长度。
      SubMatches:匹配对象所匹配结果的子项。也就是<匹配规则>中下一个匹配项"一般一个()代表一个匹配项"
      Value:匹配对象所匹配的值。

     

    第二. RegExp对象的Test方法:测试字符串是否符合匹配规则

    Function RTest(s, p)
        
    Set re = New RegExp
         re.IgnoreCase =
    False '设置是否忽略大小写
         re.Pattern = p
         RTest= re.Test(s)
    End Function

    一般我们在QTP中使用正则表达式来匹配字符串的话,会编写如上面那样的一个函数.使用方法如下
        s = "我的邮箱: test@163.com 。
    欢迎致电!" '用来匹配的字符串,也就是实际上我们要测试的内容

         '检查测试字符串中是否包含数字
        p = "\d+"  '测试是否包含数字的匹配规则
        
    MsgBox RTest(s, p)

        
    '检查测试字符串是否全是由数字组成:
         p = "^\d+$"
        
    MsgBox RTest(s, p)

        
    '检查测试字符串是否有大写字母:
         p = "[A-Z]+"
        
    MsgBox RTest(s, p)
        

    第三. RegExp的Replace方法:把测试字符串中符合匹配规则的字符串替换为指定内容

    Function StrReplace(s , p , r )
        
    Set re = New RegExp
         re.IgnoreCase =
    True '设置忽略大小写
         re.Global =
    True  '设置必须匹配整个规则
         re.Pattern = p
         StrReplace = re.Replace(s, r)
    End Function

    上面的就是一般情况下使用这个方法所需要编写的一个函数,下面的就是如何使用

      
    '以下是如何使用这个方法替换邮箱地址   
         s = "我的E-mail: Test@163.com 。欢迎致电!"
         p = "\w+@\w+\.(com|cn|net)"
         r = "E_Mail@sohu.net"
         s = StrReplace(s, p, r)
         MsgBox s
        
    '结果:我的E-mail: E_Mail@sohu.net 。欢迎致电!

    第四. Match的SubMatches属性:下一个匹配项的匹配内容

    仔细看下面这段代码的含义...
        inpStr = "我的E-mail: lucky@163.com 。欢迎致电!"
        
    Set re = New RegExp
        re.Pattern = "(\w+)@(\w+).(\w+)" 
    '注意!这个匹配规则有3个(),一个()代表一个匹配项

        Set mhs = re.Execute(inpStr)
        
    Set mh = mhs(0)             '根据上面的匹配规则可以计算出只有一个匹配结果
        
        MsgBox  "电子邮件地址是:"&mh.Value                
    '这里是匹配的内容
        MsgBox  "用户名是:"&mh.SubMatches(0)  '第一个括号<匹配项>中的内容
        MsgBox  "邮箱是:"&mh.SubMatches(1)  '第二个括号<匹配项>中的内容
        MsgBox  "域名是:"&mh.SubMatches(2)  '第三个括号<匹配项>中的内容
        

  • TD 中工作流的应用

    2009-02-09 14:59:15

    前言:
    我使用TD时间也不是非常长,和牛人相比那是天壤之别!只是我有幸配置TD。相信不是哪么多测试人员有这种锻炼的机会!
    在我配置的过程中,发现关于工作流(workflow)的资料非常之少,给我配置起来带来了很大时间上的浪费。可是工作流却是TD功能宽度和自定义级别最大的,如果不学会来使用,TD很多应该能实现的功能都可能大打折扣或者不能使用。当然,本着对初学者和不太懂的人以借鉴的思想,我尽量写的简便通俗易懂点
    ­
    一、基础篇:    
    为了能够更好的开始讲解工作流,我先说明些东西。这些内容是基础。请耐心看,如果你已经知道可以跳过。
    1.作流其实就是TD中提供的一种可以达到编程效果的一个编辑器。我们可以直接编辑脚本,不用单独编译。
    2.工作流脚本是使用VB语言编写的,所以它支持如msgbox类的输入输出函数。
    3.您需要明确知道你想在什么时候执行你的脚本。比如Defects_Bug_New里面的语句只在你新建缺陷的时候执行,其他时候是不执行的。
          再比如Defects_Bug_FieldChange就是在缺陷内容发生改变了的时候执行的语句。
    4.一般默认的东西我们不要乱作修改。如:
    ­
        Sub Defects_Bug_FieldChange(FieldName)
            On Error GoTo 0
        End Sub
    ­
        这些内容我们就要保留。
    5.同样的Sub可以存在多个,也就是说如Sub Defects_Bug_FieldChange(FieldName)这样的函数我们可以编写几个,不必要修改系统原来的Sub Defects_Bug_FieldChange(FieldName)
    6.文中提到的,TD数据库中使用的字段(如BG_BUG_ID)。是那里来的?
    它是在你需要输入USER IDPassword那个页面(/start_a.htm),右上角有个叫CUSTOMIZE的链接,点击下,用admin用户登陆,在“Customize Project Entities” -> “DEFECT”里面的System Fields或者User Fields里面随便选择一个字段,右边查看里面“Field Name”后面的就是数据库中使用的字段了的名字了。比如你选择Subject,对应的Field Name就是BG_SUBJECT.
    7.工作流中的GoTo语句不能像VB里面那样使用。因为标签是无效的。
    8.理论上来讲,TD中的大部分功能东西都能通过这里编辑,比如按钮。事件。当然前提是你够熟悉。
    9.如果要脚本起作用,只要退出再登陆进TD.脚本就会立刻起作用。
    ­
    二、工作流的实践一  --新建缺陷时候的默认值
    需求说明:我们在打开添加缺陷的页面的时候(特别是使用了自定义字段的时候)我们最希望的就是给这些不是非常重要的,但是又不希望没有内容的字段,有些默认值。哪么我们第一个来做的就是这个需求。请先看代码。
    ­
       Sub Defects_Bug_New
            On Error Resume Next
                Bug_Fields("BG_DETECTION_VERSION").Value = "Ehome 2.0"
        On Error GoTo 0
        End Sub
    ­
        这段代码,你只要复制到工作流脚本中去,哪么你在添加缺陷的时候,版本这个字段里面就会自动有一个内容Ehome 2.0。这段代码中的Defects_Bug_New代表新建缺陷的时候执行的脚本,Bug_Fields("BG_DETECTION_VERSION")具体缺陷字段。这是最简单的工作流脚本了。你明白了没有?
    ­
    三、工作流的实践二   --记录修改人和修改时间
    需求说明:我们希望在开发修改了一个缺陷的状态为“修改完成“的时候,记录下修改他的人,和修改时间。方便我们管理。同样,请先看代码:
    ­
        Sub Defects_Bug_FieldChange(FieldName)
            On Error Resume Next
            if FieldName = "BG_STATUS" Then
                if Bug_Fields("BG_STATUS").Value = "P1-修改完成待验证" then
                    Bug_Fields("BG_RESPONSIBLE").Value = User.UserName
                    Bug_Fields("BG_USER_02").Value = now()
                end if
            end if
            On Error GoTo 0
        End Sub
    ­
    这段代码内容就多了几行,里面Defects_Bug_FieldChange(FieldName)代表的是缺陷字段发生改变的时候执行的语句。里面的BG_STATUS代表缺陷状态,BG_RESPONSIBLE代表负责人(Syestem Fields表里的),BG_USER_02代表用户自定义字段(User Fields里的)。User.UserName代表当前操作的用户名,now()代表当前时间。剩下的东西就很容易看懂了吧。
    ­
    三、工作流的实践三  --不修改我的缺陷必须说理由
    需求说明:有时候开发很懒,不喜欢写说明,哪么对我们测试来说,没有任何说明就返回我们。使我们很不好处理问题。哪么我们希望当程序员如果修改缺陷状态为”不修改””遗留”的时候,让程序员必须输入说明。
    ­
        Sub Defects_Bug_FieldChange(FieldName)
            On Error Resume Next
    ­
            dim i
            i=""
            msg1 ="遗留或不修改此缺陷需要输入说明!"
            title1 ="输入说明"
    ­
             If FieldName = "BG_STATUS" Then
                 if (Bug_Fields("BG_STATUS").Value = "P2-待遗留" or Bug_Fields("BG_STATUS").Value = "P3-暂时不修改") and Bug_Fields("BG_DEV_COMMENTS").Value = "" then
                     do
                         i= InputBox(msg1,title1)
                         if i="" then
                             msgbox"必须输入说明"
                         else exit do
                         end if
                     loop
                     Bug_Fields("BG_DEV_COMMENTS").Value = i
                  end if
              end if
            On Error GoTo 0
        End Sub
    ­
        这段代码内容就稍微多了点点,并且使用了VB的函数。我就简单的说下思路吧,具体解释,只要你看懂了上面的工作流。相信这个里面的代码也不是很复杂。
    1.开始声明和定义一些需要使用的变量。和内容。
    2.判断修改的字段是不是缺陷状态(BG_STATUS
    3.再判断修改成的内容是不是遗留或者不修改    
    4.最后判断说明(BG_DEV_COMMENTS)里面是不是没有内容
    5.如果是的话,就打开输入函数输入说明(InputBox(msg1,title1)
    6.做个循环,如果没有输入说明,就提示必须输入说明(msgbox"必须输入说明"
    7.最后吧输入的内容赋值给保存说明的字段(BG_DEV_COMMENTS
    ­
    最后,由于时间有限,没有写更多的内容。有需要讨论的可以发邮件给我,我的邮箱是onlonely@163.com
  • TD中配置自定义发送邮件的一些总结

    2009-01-19 13:57:20

    前言:前前后后快一天时间了,总算是理解了TD中发送邮件格式自定义设置的一些方法,和里面字段的含义。
    觉得有必要留下点什么,也方便方便以后遇到此类情况的人,有所参考,现在网络上真是很难搜索到配置发送邮件格式的文章。

    当然,在开头呢,还需要解释下,我文中提到的,TD数据库中使用的字段。是那里来的!
    在你需要输入USER IDPassword那个页面(/start_a.htm),右上角有个叫CUSTOMIZE的链接,点击下,用admin用户登陆,在“Customize Project Entities” -> “DEFECT”里面的System Fields随便选择一个,右边查看里面“Field Name”后面的就是数据库中使用的字段了的名字了。比如你选择Subject,对应的Field Name就是BG_SUBJECT.

    总结一、使用html格式发送的邮件,自定义邮件标题的方法。
    操作:
    1.点"开始"->"运行"。输入"mecury.ini"或者""mercury.ini回车,打开名为mecury.ini的配置文件
    2.在文档的末尾加上如下面类似的配置代码

    [SAQFORMAT]
    ehome=TD中有问题等待您的处理!缺陷编号:?BG_BUG_ID

    说明:1.其中“ehome”为你建立项目数据库时候使用的项目名称。
    2. “=”后面就是你需要使用的邮件标题,如果你需要使用变量替换的话按照“?BG_BUG_ID”这样的方法,其中“”不能省略,BG_BUG_ID为TD中字段在数据库中的名称。
    3.最近发现TD8.0 SP2版本配置文件名称改为"mercury.ini"

    这个方法可以解决TD中发送的缺陷标题如果过长,发送的邮件标题乱码的问题,另外这个方法最初是一个牛人用英文回复在一个论坛上的,可看的我头晕。

    总结二、在TD的邮件配置文件中使用中文。达到汉化发送邮件中的某些无法通过修改TD字段来汉化的内容。
    操作:
    1.打开目录:C:\Program Files\Common Files\Mercury Interactive\DomsInfo\StyleSheets
    如果你的TD安装的目录不同,请相应修改地址
    2.用记事本打开(一定记住用记事本,其他的我还没发现可以简单修改编码格式)BUG_TEXT.xsl或者BUG_HTML.xsl文件。(这两个分别对于发送text格式和html格式邮件的配置文件)
    3.在配置文件中汉化需要汉化的各个在邮件中的英文,比如“History
    4,在菜单中点“文件”->“另存为!在“编码”里面选择“UTF-8”。确定保存。

    这个方法很好,很强大,是受一个同事启发的。开始我直接在头文件中加入encoding=“UTF-8”发现依然解释不成功。后来发现保存格式才是根本。最后解释下,为什么修改保存的文件格式后就可以解析呢,因为原来的那个配置文件保存的编码是ANSI,这个编码格式根本就不支持中文,自然在配置文件里面不能存在中文内容了。
    总结三、解决HTML格式发送的邮件使用foxmail收取是乱码问题。
    操作。
    1,打开BUG_HTML.xsl
    2,把其中的
    <xsl:attribute name="CONTENT">        <xsl:value-of select="//@td_lang"/></xsl:attribute>
    修改为
    <xsl:attribute name="CONTENT">text/html;CHARSET=GB2312</xsl:attribute>
     
    这个问题是编码问题造成的,其实你用foxmail收到邮件后,在邮件里面点右键选择编码->GB2312其实也是可以看到正常的文字的。

    总结四、解决TD使用html格式发送的邮件缺陷标题如果过长,发送的邮件内容是源代码的问题。
    操作:
    1.首先你看上面的《总结二》打开那个目录下的BUG_HTML.xsl
    2.从顶部开始看文件,或者搜索第一个<TABLE align="center"注意,这个文件里面很多TABLE标签,一定要是从顶向下开始数的第一个)
    3.修改这个TABLE标签后面的属性,把width="90%"这个属性去掉。就可以了!

    这个缺陷标题过长,显示源代码的问题,花的时间最长了。原因就是配置文件里面固定死了缺陷标题的宽度。我在网上搜索相关文档,大多只能解决邮件标题显示问题,对于邮件内容显示源代码问题的解决方案就没有了。我虽然不敢说我是第一个解决,不过我的确没搜索到解决方法。同样是我理解配置文件的时候而然想到的解决方法,希望以后出现这个问题的人能找到这个文章解决他的问题。

    总结五、text格式邮件配置文件怎么修改显示内容。
    操作:
    1.首先你看上面的《总结二》打开那个目录下的BUG_TEXT.xsl
    2.查找<xsl:apply-templates select="item_field[@dbid='BG_BUG_ID'][@IsActive='Y']"/>  
    你就会发现有很多条类似的内容
    3.如果你要修改是否显示就把[@IsActive='Y']中的Y改为N
    4.如果你要修改显示的顺序,就移动整行的排列顺序,在第一行的邮件中就是第一个显示。
    5.如果你需要增加显示的内容,就复制一行<xsl:apply-templates select="item_field[@dbid='BG_BUG_ID'][@IsActive='Y']"/>BG_BUG_ID改为TD数据库中使用的字段。
    6.需要注意的是,最后一行的含义是比较多点,你可以搜索搜索[@dbid!='BG_BUG_ID']带有这个的就是我说的最后一样配置显示,这行的代表是,除了BG_BUG_ID等(有好多个)是否显示。
    7.如果你需要修改历史记录,让间隔更小点,你可以搜索History<br/>看到没有,历史记录里面的配置有很多个<br/>你删除多余的,在New Value那留一个<br/>就可以让发送的邮件中历史记录中的换行减少,但是又不能没有一个<br/>那样显示就太密集了。

    说明:HTML格式邮件配置文件里面的也是异曲同工。

    作者语:这个总结我感觉写的不是哪么浅显易懂,当然如果有需要解释的地方可以发送邮件给我onlonely@163.com。但是有一定配置TD基础的人就容易看懂了。不过最后总算发现发送的邮件比较自定义了,还是比较高兴的。
  • TD 项目移植的要点《acess类型数据库》

    2008-10-29 10:14:20

    备份 

    1. 复制,C:\Program Files\Common Files\Mercury Interactive\DomsInfo

    2. 复制 TD_Dir\default 文件夹中需要项目的文件夹如我的是《ehome》

    还原

    1.  打开DomsInfo文件夹里的doms.mdb文件,密码tdtdtd。--需要安装office2003

    2. 修改Params表:修改ACISERVER SITESCOPEURL的内容。《主要是计算机名改成要还原的电脑的计算机名》

    3. 复制修改好的DomsInfo文件夹到要还原电脑的同样地方覆盖。重启电脑《重启电脑很关键,不能省略》

    4. 进入Site Administrator,删除并新建一次你要移植的项目,《比如我的是ehome,就删掉ehome,再新建一个ehome》,--这步也是很关键,不删掉原来的项目你复制文件去就会提示项目没有初始化。

    5. 最后一步就是复制你的项目目录《我们开始备份的另一个文件夹》到TD_Dir\default,重启电脑就好了。--这里是不是一定要重启就不知道了。除现在这步外的步骤都是还原用户视图和数据的内容。这步才是还原项目,如果你不需要原来项目的用户和权限设置,直接做这步就可以了。

  • 空间开通啦

    2008-04-30 19:02:54

    今天总算开通空间了,

    来到51testing也有点时间了,了解了些。开通了空间,

    特意发篇日志来,我比较少时间来写。

    也就只能转些我看了,觉得好的文章来了

Open Toolbar