软件是用纯vbs脚本写的,要求本机安装有sqlserver,如果你的浏览器 本地站点的权限不够高的话,是无法执行的,会报错,因为代码里用了一个用<objdct>标签声明的ado.connection对象,你不让它执行的话,这个软件也无法执行,你可以把.html文件改成.hta或者在IE选项里做一些修改就可以用了,别瞧不起脚本,脚本也很厉害的。哈哈,懂行的给看看撒

解决方案 »

  1.   

    还要装SQL SERVER?
    算了
      

  2.   

    只支持sqlserver呀,呵呵,我把代码贴给大家吧。
    <HTML>
    <HEAD>
    <TITLE> 代码生成器 </TITLE>
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312"></HEAD>
    <style type="text/css">
    <!--
    body {
    margin-left: 0px;
    margin-top: 0px;
    margin-right: 0px;
    margin-bottom: 0px;
    }
    td {
    font-size: 12px;
    }
    INPUT
    {
        FONT-FAMILY: 宋体;
        FONT-SIZE: 9pt;
    }
    INPUT.button
    {
        Height:20px;
        BACKGROUND-COLOR: #C6D7EF;
        COLOR: #000080;
        LINE-HEIGHT: 9pt;
        PADDING-LEFT: 0px;
        PADDING-RIGHT: 0px;
        PADDING-TOP: 2px;
        PADDING-BOTTOM: 2px;
        CURSOR: hand;
        border-width:1px;
        border-style:solid;
        FONT-FAMILY: 宋体;
        FONT-SIZE: 9pt;
    }
    INPUT.input
    {
        BACKGROUND-COLOR: #ffffff;
        BORDER-STYLE:solid solid solid solid;
        border-width:1px 1px 1px 1px;
        border-color:#888888;
        HEIGHT:18px;
        LEFT: 0px;
        TOP: 0px;
        VERTICAL-ALIGN: center
    }
    .Corporation{
    FONT-SIZE: 9pt;
    COLOR:RED;
    }
    .unnamed1 {
    color: #FFFFFF;
    background-color: #003399;
    font-weight: bold;
    }
    -->
    </style>
    <SCRIPT LANGUAGE="javaScript">
    //根据字段的数据类型返回.net中相应的数据类型字符串
    function getdonetType(s)
    {
    switch(s.toLowerCase( ))
    {
    case "bigint":
    return "Int64";
    case "binary":
    return "System.Byte[]";
    case "bit" :
    return "Boolean";
    case "char" :
    return "String";
    case "datetime" :
    return "System.DateTime";
    case "decimal" :
    return "System.Decimal";
    case "float" :
    return "System.Double";
    case "image" :
    return "System.Byte[]";
    case "int" :
    return "Int32";
    case "money" :
    return "System.Decimal";
    case "nchar" :
    return "String";
    case "ntext" :
    return "String";
    case "numeric" :
    return "System.Decimal";
    case "nvarchar" :
    return "String";
    case "real" :
    return "System.Single";
    case "smalldatetime" :
    return "System.DateTime";
    case "smallint" :
    return "Int16";
    case "smallmoney" :
    return "System.Decimal";
    case "sql_variant" :
    return "String";
    case "text" :
    return "String";
    case "timestamp" :
    return "System.DateTime";
    case "tinyint" :
    return "System.Byte";   
    case "uniqueidentifier" :
    return "System.Guid";
    case "varbinary" :
    return "System.Byte[]";
    case "varchar" :
    return "String";
    default : break;
    }
    return "";
    }
    //根据字段的数据类型返回.net中相应的sqldb数据类型字符串
    function getSqlType(s)
    {
    switch(s.toLowerCase( ))
    {
    case "bigint":
    return "System.Data.SqlDbType.BigInt";
    case "binary":
    return "System.Data.SqlDbType.Binary";
    case "bit" :
    return "System.Data.SqlDbType.Bit";
    case "char" :
    return "System.Data.SqlDbType.Char";
    case "datetime" :
    return "System.Data.SqlDbType.DateTime";
    case "decimal" :
    return "System.Data.SqlDbType.Decimal";
    case "float" :
    return "System.Data.SqlDbType.Float";
    case "image" :
    return "System.Data.SqlDbType.Image";
    case "int" :
    return "System.Data.SqlDbType.Int";
    case "money" :
    return "System.Data.SqlDbType.Money";
    case "nchar" :
    return "System.Data.SqlDbType.NChar";
    case "ntext" :
    return "System.Data.SqlDbType.NText";
    case "numeric" :
    return "System.Data.SqlDbType.Decimal";
    case "nvarchar" :
    return "System.Data.SqlDbType.NVarChar";
    case "real" :
    return "System.Data.SqlDbType.Real";
    case "smalldatetime" :
    return "System.Data.SqlDbType.SmallDateTime";
    case "smallint" :
    return "System.Data.SqlDbType.SmallInt";
    case "smallmoney" :
    return "System.Data.SqlDbType.SmallMoney";
    case "sql_variant" :
    return "System.Data.SqlDbType.Variant";
    case "text" :
    return "System.Data.SqlDbType.Text";
    case "timestamp" :
    return "System.Data.SqlDbType.Timestamp";
    case "tinyint" :
    return "System.Data.SqlDbType.TinyInt";
    case "uniqueidentifier" :
    return "System.Data.SqlDbType.UniqueIdentifier";
    case "varbinary" :
    return "System.Data.SqlDbType.VarBinary";
    case "varchar" :
    return "System.Data.SqlDbType.VarChar";
    default : break;
    }
    return "";
    }
    function get_p_isout(s){
    if(s==1){return "ParameterDirection.Output"} else{return "ParameterDirection.Input"}
    }
    //根据字段类型返回此字段是否是数字类型,主要是在生成sql语句的时候数字字段不需要用单引号括住
    function isnumber(s)
    {
    switch(s.toLowerCase( ))
    {
    case "bigint":
    return 1;
    case "binary":
    return 0;
    case "bit" :
    return 1;
    case "char" :
    return 0;
    case "datetime" :
    return 0;
    case "decimal" :
    return 1;
    case "float" :
    return 1;
    case "image" :
    return 0;
    case "int" :
    return 1;
    case "money" :
    return 1;
    case "nchar" :
    return 0;
    case "ntext" :
    return 0;
    case "numeric" :
    return 0;
    case "nvarchar" :
    return 0;
    case "real" :
    return 0;
    case "smalldatetime" :
    return 0;
    case "smallint" :
    return 1;
    case "smallmoney" :
    return 1;
    case "sqlvariant" :
    return 0;
    case "text" :
    return 0;
    case "timestamp" :
    return 1;
    case "tinyint" :
    return 1;
    case "uniqueidentifier" :
    return 0;
    case "varbinary" :
    return 0;
    case "varchar" :
    return 0;
    default : break;
    }
    return 1;
    }
    //根据字段类型返回此字段是否是字符串类型,主要是在生成sql语句的时候数字字段不需要用单引号括住
    function isstring(s)
    {
    switch(s.toLowerCase( ))
    {
    case "bigint":
    return 0;
    case "binary":
    return 1;
    case "bit" :
    return 0;
    case "char" :
    return 1;
    case "datetime" :
    return 1;
    case "decimal" :
    return 0;
    case "float" :
    return 0;
    case "image" :
    return 1;
    case "int" :
    return 0;
    case "money" :
    return 0;
    case "nchar" :
    return 1;
    case "ntext" :
    return 1;
    case "numeric" :
    return 1;
    case "nvarchar" :
    return 1;
    case "real" :
    return 1;
    case "smalldatetime" :
    return 1;
    case "smallint" :
    return 0;
    case "smallmoney" :
    return 0;
    case "sqlvariant" :
    return 1;
    case "text" :
    return 1;
    case "timestamp" :
    return 0;
    case "tinyint" :
    return 0;   
    case "uniqueidentifier" :
    return 1;
    case "varbinary" :
    return 1;
    case "varchar" :
    return 1;
    default : break;
    }
    }
    </SCRIPT>
      

  3.   

    <script language="VBScript">
    '默认数据库链接字符串,因为有的地方所链接的数据库是不确定的,所以要定义一个CONNSTR_LEFT和CONNSTR_RIGHT
    Const CONNSTR = "Provider = Sqloledb; Trusted_Connection=yes;Initial Catalog =Master; Data Source = 127.0.0.1;"
    Const CONNSTR_LEFT = "Provider = Sqloledb; Trusted_Connection=yes; Initial Catalog ="
    Const CONNSTR_RIGHT = "; Data Source = 127.0.0.1;"'是否正在调试,设置为1就是调试模式,在调用Trace方法的时候可以输出警告框信息
    Const ISDEBUG = 1
    '当前所使用数据表的名称,选择表格下拉框的时候更新它的值
    Dim tableName
    '当前正在使用的数据表的字段数组,选择表格下拉框的时候更新它的值
    Dim arrcol()
    redim arrcol(0)
    '字段1数组,选择字段1下拉框的时候更新它的值
    Dim arrcol1()
    redim arrcol1(0)
    '字段2数组,选择字段2下拉框的时候更新它的值
    Dim arrcol2()
    redim arrcol2(0)
    '存储过程参数数组,选择存储过程下拉框的时候更新它的值
    Dim arrSP()
    redim arrSP(0)
    '当前代码模板的路径,模板配置文件的根节点
    Dim CodeTempleate,TempleateRoot 
    '调试过程,在调试模式下可以弹出警告框信息
    Sub Trace(s1,s2)
    If IsDebug Then
    divTraceOutput.innerHTML = divTraceOutput.innerHTML & s1 & s2 &"<br>"
    End If
    End Sub
    '显示错误
    Sub ShowErr(err_)
    Dim strErr
    strErr="Description:"& err_.Description & vbcrlf _ 
    & "HelpContext:"& err_.HelpContext  & vbcrlf _ 
    & "HelpFile:"& err_.HelpFile  & vbcrlf _
    & "Number:"& err_.Number & vbcrlf _
    & "Source:"& err_.Source & vbcrlf _
    & "很不幸,程序运行出错了,你可以发电子邮件到[email protected]来反馈此错误"
    msgbox(strErr)
    End Sub
    dim arrtype '当前正在处理的数组类型是字段还是存储过程参数
    dim gobal_sp_name
    dim gobal_connstr
    '数据字段类,保存有字段的名字,数据类型,长度
    class colField
    public colName,colType,colLength
    end class
    '存储过程的参数类,保存有参数的名字,数据类型,长度,是否是输出参数
    Class Parameter
    public name,xtype,length,isout
    end class
    '更改代码模板路径,在选择模板下拉框的时候触发
    Sub ChangeTempleate(strTemID)
    Dim Templeate,help,doc,root,divhelp
    set Templeate = TempleateRoot.selectSingleNode("//templeate[@id="&strTemID&"]")
    CodeTempleate = Templeate.Text
    Trace "对应的模板路径为:",CodeTempleate
    set doc = Createobject("Microsoft.XMLDOM")
    doc.load(CodeTempleate)
    set root = doc.documentElement
    set help = root.selectSingleNode("//help")
    divhelp = document.getElementsByName("help")
    divhelp.innerText  = help.Text
    End Sub
    '绑定代码模板下拉框的值,在程序加载时触发
    Sub BindListTemp()
    Dim doc,TempleateList,i,oSelect,oOption
    oSelect = document.getElementsByName("ListTempleate")
    oSelect.length = 0
    Set doc = Createobject("Microsoft.XMLDOM")
    doc.load("Config.xml")
    Set TempleateRoot = doc.documentElement
    Set TempleateList = TempleateRoot.selectNodes("//templeate")
    For i = 0 to TempleateList.length - 1
    set oOption = document.createElement("OPTION")
    oSelect.options.add(oOption)
    oOption.innerText = TempleateList(i).getAttribute("name")
    oOption.value = TempleateList(i).getAttribute("id")
    Next
    End Sub
    '使用可信任连接,连接并打开Master库,然后取出本地所有的数据库来填充数据库下拉框
    sub openconnection()
    if ISDEBUG = 0 then on error resume next
    conn.ConnectionString =  CONNSTR

    conn.Open
    if err.number <> 0 then
    err.Clear
    ShowErr(err)
    end if
    dim sql,rs,oOption,oSelect
    oSelect = document.getElementsByName("ListDataBase")
    sql="select name from dbo.sysdatabases"
    if ISDEBUG = 0 then on error resume next
    set rs = conn.execute(sql)
    if err.number <> 0 then
    err.Clear
    ShowErr(err)
    end if
    do while not rs.eof
    set oOption = document.createElement("OPTION")
    oSelect.options.add(oOption)
    oOption.innerText = rs(0)
    oOption.value = rs(0)
    rs.MoveNext
    loop
    End sub
    '打开选择的数据库,在选择数据库下拉框的时候触发,并调用bindlist1方法来绑定两个字段下拉框
    sub openconnectiondb(strDB)
    if ISDEBUG = 0 then on error resume next
    If conn.State = 1 Then conn.close
    conn.ConnectionString =  CONNSTR_LEFT & strDB & CONNSTR_RIGHT
    gobal_connstr =CONNSTR_LEFT & strDB &  CONNSTR_RIGHT
    conn.Open
    if err.number <> 0 then
    msgbox(err.description)
    err.Clear
    end if
    bindlist1
    End sub
    '绑定数据表下拉框和存储过程下拉框,清除两个字段下拉框,并填充全局字段数组,和全局存储过程数组
    sub bindlist1()
    dim sql,rs,oOption,oSelect
    oSelect = document.getElementsByName("ListDataTable")
    sql="select name from sysobjects where xtype = 'u' or xtype='v'"
    if ISDEBUG = 0 then on error resume next
    set rs = conn.execute(sql)
    '填充数据表下拉框
    oSelect.length = 0
    do while not rs.eof
    set oOption = document.createElement("OPTION")
    oSelect.options.add(oOption)
    oOption.innerText = rs(0)
    oOption.value = rs(0)
    rs.MoveNext
    loop
    '填充存储过程下拉框
    oSelect = document.getElementsByName("ListSP")
    sql="select name from sysobjects where xtype = 'P' order by name"
    set rs = conn.execute(sql)
    oSelect.length = 0
    do while not rs.eof
    set oOption = document.createElement("OPTION")
    oSelect.options.add(oOption)
    oOption.innerText = rs(0)
    oOption.value = rs(0)
    rs.MoveNext
    loop
    '清空两个字段下拉框
    oSelect = document.getElementsByName("ListCol1")
    oSelect.length = 0
    oSelect = document.getElementsByName("ListCol2")
    oSelect.length = 0
    if err.number <> 0 then
    msgbox(err.Description)
    err.Clear
    end if
    end sub
    '系统初始化函数,在程序加载的时候运行,主要是打开数据库填充数据库下拉框并打开Config.xml填充模板下拉框
    sub init()
    openconnection()
    BindListTemp()
    end sub
    '改变数据表,用表中的字段填充ListCol1和ListCol2两个下拉框以及全局数组arrcol
    sub ChangeDataTable()
    dim sql,rs,oOption,oSelect,oListColl,i
    oSelect = document.getElementsByName("ListDataTable")
    oListColl = document.getElementsByName("ListCol1")
    oListCol2 = document.getElementsByName("ListCol2")
    oListColl.length = 0
    oListCol2.length = 0
    tableName = oSelect.options(oSelect.selectedIndex).value
    sql="SELECT  c.name as FieldName,t.name as FieldType, c.length as FieldLength FROM SYSCOLUMNS c inner join  systypes t on c.xusertype=t.xusertype WHERE c.ID = OBJECT_ID('"&tableName&"')"
    set rs = conn.execute(sql)
    i =0
    Trace "记录集的连接字符串" , rs.ActiveConnection.ConnectionString
    Trace "记录集状态:" , rs.State
    Trace "sql字符串" , sql
    if not(rs.bof and rs.eof) then
    do while not rs.eof
    set oOption = document.createElement("OPTION")
    oListColl.options.add(oOption)
    oOption.innerText = rs(0)
    oOption.value = rs(0)
    i = i+1
    rs.MoveNext
    loop
    Else
    msgbox("这个表里没有字段")
    end if
    Trace "记录数目:" , i
    rs.movefirst
    Redim arrcol(i)
    rs.movefirst
    do while not rs.eof
    set oOption = document.createElement("OPTION")
    oListCol2.options.add(oOption)
    oOption.innerText = rs(0)
    oOption.value = rs(0)
    rs.MoveNext
    loop
    i = 0
    rs.movefirst
    do while not rs.eof
    dim col
    set col = new colField
    col.colName = rs(0)
    col.colType = rs(1)
    '如果是text或ntext,decimal等,长度不能设置成默认值,应该设置成SQL参数对应的模式
    select case rs(1)
    case "text","ntext","sql_variant","bigint","bit","datetime","float","image","money","real","smalldatetime","smallint","smallmoney","timestamp","tinyint","uniqueidentifier","int"
    col.colLength = ""
    case "decimal","numeric"
    col.colLength = "(" & rs(2) &",0)"
    case else
    col.colLength = "(" & rs(2) &")"
    end select
    set arrcol(i) = col
    i = i + 1
    rs.movenext
    loop
    rs.close
    end sub
    '改变所选择的字段,在选择两个字段下拉框的时候触发,用来更新两个全局字段数组
      

  4.   

    function ChangeCol(drop,n)
    dim i,j,k
    j = 0
    for i= 0 to (drop.length-1)
    if drop.options(i).selected then
    j = j + 1
    end if
    next
    if n=1 then
    Erase arrcol1
    redim arrcol1(j)
    end if
    if n=2 then
    Erase arrcol2
    redim arrcol2(j)
    end if
    k = 0
    if n =1 then
    for i= 0 to (drop.length-1)
    if drop.options(i).selected then
    for j = 0 to (ubound(arrcol) - 1)
    if arrcol(j).colname = drop.options(i).value then
    set arrcol1(k) = arrcol(j)
    end if
    next
    k = k + 1
    end if
    next
    else
    for i= 0 to (drop.length-1)
    if drop.options(i).selected then
    for j = 0 to (ubound(arrcol) - 1)
    if arrcol(j).colname = drop.options(i).value then
    set arrcol2(k) = arrcol(j)
    end if
    next
    k = k + 1
    end if
    next
    end if
    end function
    function ChangeSp(oSelect)
    dim sql,rs,i
    sql="select a.name as p_name,b.name as p_type,a.length as p_length,a.isoutparam as p_isout  from syscolumns a, systypes b where a.xtype=b.xtype and b.name<>'sysname' and id = (select id from sysobjects where name = '"&oSelect.options(oSelect.selectedIndex).value&"')"
    Trace "存储过程信息语句",sql
    gobal_sp_name = oSelect.options(oSelect.selectedIndex).value
    set rs = conn.execute(sql)
    i = 0
    do while not rs.eof
    i = i + 1
    rs.movenext
    loop
    Erase arrsp
    redim arrsp(i)
    if i>0 then
    rs.movefirst
    i =0
    do while not rs.eof
    dim param
    set param = new Parameter
    param.Name = mid(rs(0),2) '去掉左边的拳儿
    param.xtype = rs(1)
    param.Length = rs(2)
    param.isout =rs(3)
    set arrsp(i) = param
    i = i + 1
    rs.movenext
    loop
    end if
    rs.close
    set rs=nothing
    end function
    '显示代码函数
    sub showcoad() '循环变量,循环变量,循环变量,是否有cyc属性,生成代码字符串,代码模板文档对象,文档的根节点,txt节点的cyc循环节点,临时字符串,txt的err节点,txt的arr节点,使用的全局数组
    dim i,j,k,bcyc,strcode,doc,root,txtnote,cyc,str,attArr,arr
    strcode = "" 
    '打开代码模板并取出所有的"txt"节点列表
    set doc = Createobject("Microsoft.XMLDOM")
    doc.load(CodeTempleate)
    set root = doc.documentElement
    set txtnote = doc.getElementsByTagName("txt")
    '遍历节点列表
    for i = 0 to txtnote.length -1
    '测试当前txt节点的arr属性,并通过它确定本次循环中使用的全局字段数组是arrcol1还是arrcol2
    attArr = txtnote(i).getAttribute("arr") 
    if not isnull(attArr) then
    select Case attArr
    Case "arrcol1"
    arrtype="col" '设置全局变量arrtype
    arr = arrcol1
    Case "arrcol2"
    arrtype="col"
    arr = arrcol2
    Case "arrsp"
    arrtype="sp"
    arr = arrsp
    End Select
    Else
    arr = arrcol1 '默认使用arrcol1
    end if
    '测试当前的txt节点的cyc属性,并通过它来确定本节点是否要循环它子节点,当cyc属性为1时,必须要含有arr属性
    set cyc = txtnote(i).attributes.getNamedItem("cyc")
    if Not(cyc Is Nothing) then
    if cyc.value <> "1" then
    bcyc = false
    else
    bcyc = true
    end if
    else
    bcyc = false '默认为不循环
    end if
    '如果本节点要循环子节点的话,就把当前节点的子节点循环处理
    if bcyc then
    set tnote = txtnote(i).getElementsByTagName("t") '获取子节点t的节点列表
    '遍历当前使用的字段数组
    for j = 0 to ubound(arr) -1
    str ="" '给临时字符串赋默认值
    '遍历t子节点列表
    for k =0 to tnote.length - 1
    '调用ExecuteNouts函数处理子节点
    str = str &ExecuteNouts(tnote(k),arr,arr(j),j)
    next
    '替换占位符
    str = ReplaceStr(str,arr(j))
    strcode = strcode & str
    next
    else
    str =""
    str = txtnote(i).text
    str = replace(str,"$table",tableName)
    str = replace(str,"$sp_name",gobal_sp_name)
    str = replace(str,"$connstr",gobal_connstr)
    str = replace(str,"$collistlength",ubound(arr))
    strcode = strcode & str
    end if
    next
    document.all("txtsql").value = strcode
    end sub
    '替换占位符
      

  5.   

    Private Function ReplaceStr(str_p,arr_j_p)
    if ISDEBUG = 0 then on error resume next
    select case arrtype
    case "col"
    str_p = replace(str_p,"$colName",arr_j_p.colname)
    str_p = replace(str_p,"$colType",arr_j_p.colType)
    str_p = replace(str_p,"$col_netype",getdonetType(arr_j_p.colType))
    str_p = replace(str_p,"$col_SqlDb",getSqlType(arr_j_p.colType))
    str_p = replace(str_p,"$colLength",arr_j_p.colLength)
    str_p = ReplaceUIstr(str_p,arr_j_p)
    case "sp"
    str_p = replace(str_p,"$sp_p_col_name",arr_j_p.name)
    str_p = replace(str_p,"$sp_p_col_netype",getdonetType(arr_j_p.xtype))
    str_p = replace(str_p,"$sp_p_col_netdbtype",getSqlType(arr_j_p.xtype))
    str_p = replace(str_p,"$sp_p_col_length",arr_j_p.length)
    str_p = replace(str_p,"$sp_p_col_isout",get_p_isout(arr_j_p.isout))
    end select
    if err.number<> 0 then ShowErr(err)
    ReplaceStr = str_p
    End Function
    Private Function ReplaceUIstr(str_p,arr_j_p)
    Dim doc,UIRoot,DataBaseName,TableName,UI_field_list,oSelect,i,j
    oSelect = document.getElementsByName("ListDataBase")
    DataBaseName = oSelect.options(oSelect.selectedIndex).value
    oSelect = document.getElementsByName("ListDataTable")
    TableName = oSelect.options(oSelect.selectedIndex).value
    Set doc = Createobject("Microsoft.XMLDOM")
    doc.load("UITemplate/UI.xml")
    Set UIRoot = doc.documentElement
    '用xpath语法获取当前数据库的当前表的所有显示字段列表
    Set UI_field_list = UIRoot.selectNodes ("//database[@name="""&DataBaseName&"""]/table[@name="""&TableName&"""]/field")
    For i = 0 to UI_field_list.length - 1
    If arr_j_p.colname = UI_field_list(i).getAttribute("name") then
    Select Case UI_field_list(i).getAttribute("display")
    Case "input"
    str_p = replace(str_p,"$UI_colName","<input type=""text"" name="""&arr_j_p.colname&""">")
    Case "select"
    strTemp = "<select name="""&arr_j_p.colname&""">"
    For j = 0 To UI_field_list(i).childNodes.length-1
    strTemp = strTemp & UI_field_list(i).childNodes(j).xml
    Next
    strTemp = strTemp & "</select>"
    str_p = replace(str_p,"$UI_colName",strTemp)
    End Select
    End If
    Next
    ReplaceUIstr = str_p
    End Function
    '处理循环节点t的私有函数
    private Function ExecuteNouts(note_k_p,arr_p,arr_j_p,j_p)
    Dim t_att_exp,str_i
    t_att_exp = note_k_p.getAttribute("expression") '获取当前t节点的expression属性
    if not isnull(t_att_exp) then
    select case(t_att_exp)
    case "nomax"
    if(j_p<>(ubound(arr_p)-1)) then
    str_i = str_i & note_k_p.text
    end if
    case "isnumber"
    if(isnumber(arr_j_p.colType)) then
    str_i = str_i & note_k_p.text
    end if
    case "isstring"
    if(isstring(arr_j_p.colType)) then
    str_i = str_i & note_k_p.text
    end if
    case "p_noout"
    if(arr_j_p.isout=0) then
    str_i = str_i & note_k_p.text
    end if
    case else
    str_i = str_i & note_k_p.text
    end select
    else
    str_i = str_i & note_k_p.text
    end if
    ExecuteNouts = str_i
    End Function
    </script>
    <BODY onload="vbscript:init">
     <form>
     <table width="98%"  border="0" cellspacing="0" cellpadding="0">
       <tr>
         <td width="7%" rowspan="5" valign="top"><table width="100%"  border="0" cellspacing="0" cellpadding="0">
           <tr>
             <td class="unnamed1">选择模板</td>
           </tr>
           <tr>
             <td><select name="ListTempleate" size="20" class="input" id="ListTempleate" onChange="ChangeTempleate(this.options(this.selectedIndex).value)">
             </select></td>
           </tr>
         </table></td>
         <td width="11%" class="unnamed1">数据库</td>
         <td width="11%" class="unnamed1">数据表</td>
         <td width="16%" class="unnamed1">字段1</td>
         <td width="19%" class="unnamed1">字段2</td>
         <td width="36%" class="unnamed1">存储过程</td>
       </tr>
       <tr>
         <td valign="top"><select name="ListDataBase" size="10" class="input" id="ListDataBase" onChange="openconnectiondb(this.options(this.selectedIndex).value)">
         </select></td>
         <td valign="top"><select name="ListDataTable" size="10" class="input" id="ListDataTable" onChange="ChangeDataTable()" >
              </select></td>
         <td width="16%" valign="top"><select name="ListCol1" size="10" multiple class="input" onChange="ChangeCol(this,1)" >
         </select></td>
         <td width="19%" valign="top"><select name="ListCol2" size="10" multiple class="input" onChange="ChangeCol(this,2)" >
         </select></td>
         <td width="36%" valign="top"><select name="ListSP" size="10" class="input" id="ListSP" onChange="ChangeSp(this)">
         </select></td>
       </tr>
       <tr>
         <td colspan="5"><input name="ShowCode" type="button" class="button" onClick="showcoad()" value="生成代码">
           <input type="button" name="showTrace" value="显示跟踪" class="button" onClick="divTraceOutput.style.display=divTraceOutput.style.display=='none'?'block':'none'"> <input type="button" name="CleanTrace" value="清除跟踪" class="button" onClick="divTraceOutput.innerHTML = ''">
       </td>
       </tr>
       <tr>
         <td colspan="5"><textarea name="txtsql" cols="50" rows="10" class="input" id="txtsql" style="width:100%; "></textarea></td>
       </tr>
       <tr>
         <td colspan="5"><div class="unnamed1">代码帮助</div><textarea name="help" cols="50" rows="10" class="input" id="help" style="width:100%; ">------------------wawacoder代码生成器简介----------------------
    可以肯定,写这个小软件费了很多力气,但是也可以肯定,如果合理的用这个小软件会提高不少工作效率.大
    家都用过codeplus和codesmith吧,其实在实际软件编码过程中,尤其是写数据库应用程序,有太多的代码是
    枯燥的重复,一点儿技术含量也没有,有时候我们甚至为写这些重复的代码而烦恼.这个小软件也许会改变
    你这种情况.
    之所以用vbscript来写这个程序,本来是想写好了,用vb编译一下用来保护源码的,可是后来我改变主意了,
    为了增强程序的灵活性和可扩展性,我决定把源码公开了,以便人们定义自己的代码生成器,只要你稍微会
    一点脚本知识就行.
    现在这个软件是测试版本(其实测试版本也不算),软件的界面我还没做,源码看上去还很乱,需要重构,灵活
    性不强,好多参数是硬编码到程序里的,没有生成更多种语言的代码(我只会一点儿asp和c#,或许其它语言
    的代码模板还得你们去写),使用说明还没写出来......总之,还有很多有待解决的问题.如果你感觉这个小软件很有潜力,或者狗屁不是,请给我发电子邮件到[email protected],我欢迎任何
    建议和批评.</textarea>
         </div></td>
       </tr>
     </table>
     </form>
     <div id="divTraceOutput" style=" background-color:#999999; display:none; font-size:12px; color:#FFFFFF">下面是程序调试跟踪信息:<br></div>
     <div algin="center">
       <div align="center" class="Corporation">版权所有 蛙蛙王子</div>
     </div>
       <div align="center">
         <OBJECT classid="clsid:00000514-0000-0010-8000-00AA006D2EA4"  id="conn">
         </OBJECT>
       </div>
    </BODY>
    </HTML>