威凡网全力打造:网页编程、软件开发编程、平面设计、服务器端开发、操作系统等在线学习平台!学编程,上威凡网!
ASP教程>> ASP基础 应用技巧 数据库相关 ASP类 存储过程 FSO专栏 ASP其他
当前位置:首页 > ASP教程 > 数据库相关
上一节 下一节
 在线数据库管理工具(db007) v1.5
  代码如下:

<!--
'********************************
'* 用途:
'^ 以视图界面方式在线处理access、sql数据库
'* 作者:官世杰
'* 创建日期:2006-5-28
'* 2006-06-04 增加数据修改功能
'* 2006-06-10 增加了在空表中插入数据功能
'* 2006-09-8 增加修改字段名和表名功能,修正部分错误
'* 执行sql,如果是 select 就返回结果,否则返回执行结果
'* 本程序可以免费使用,转载请保留此信息
'********************************
-->
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=gb2312">
<title>在线数据库管理工具 db007 1.5</title>
<style type="text/css">
<!--
body,td,th {font-family: "宋体";font-size: 12px;}
form {margin:0px;padding:0px;}
body {margin:5px;scrollbar-arrow-color:#666666;scrollbar-face-color:#dddddd;scrollbar-darkshadow-color:#999999;scrollbar-highlight-color:#ffffff;scrollbar-3dlight-color:#cccccc;scrollbar-shadow-color:#ffffff;scrollbar-track-color:#eeeeee;}
input {    border-width: 1px;border-style:solid;border-color: #cccccc #999999 #999999 #cccccc;height: 16px;}
td {background:#fff;}
textarea {border-width: 1px;border-style: solid;border-color: #cccccc #999999 #999999 #cccccc;}
a:link {text-decoration: none;}
a:visited {text-decoration: none;}
a:hover {text-decoration: underline;}
a:active {text-decoration: none;}
.fixspan {width:150px;white-space:nowrap;word-break:keep-all;overflow:hidden;text-overflow:ellipsis;}
-->
</style>
</head>

<body>
<%
if request("key") = "db" then
    session("dbtype") = request("dbtype")
    session("dbstr") = request("dbstr")
    response.redirect "?"
end if

if request("key") = "createdatabase" then
    call createdatabase()
end if

if session("dbtype") = "" or session("dbstr") = "" then
    %>
    <form action="?key=db" method="post" name="dbt">
          <br>
          连接类型:
          <input name="dbtype" type="radio" value="access" onclick="dbstr.value='provider=microsoft.jet.oledb.4.0;persist security info=false;password=;data source=<%=server.mappath("/")&""%>'" checked>
          access
          <input disabled="disabled" type="radio" name="dbtype" value="sql" onclick="dbstr.value='driver={sql server};database=;server=;uid=;pwd='"> 
          sql<br><br>
          连接字符:<input name="dbstr" type="text" id="dbstr" size="120" value="provider=microsoft.jet.oledb.4.0;persist security info=false;password=;data source=<%=server.mappath("/")&""%>">
          <input type="submit" name="submit" value="连接" /><br><br>
          注:access请使用绝对路径,本文件路径:<%=server.mappath("db007.asp")%>
    </form>
    <form name="createdatabase" method="post" action="?key=createdatabase">
      <font color=red>创建数据库:</font>路径
      <input name="dataname" type="text" value="<%=server.mappath("/")&"database.mdb"%>" size="100">
      <input type="submit" name="submit" value="创建">
    </form>
    <%
    response.end()
end if

'==================================================================建库
sub createdatabase()
    dim dbname,dbstr,mycat
    on error resume next
    dbname = request("dataname")
    dbstr = "provider=microsoft.jet.oledb.4.0;data source=" & dbname 
    set mycat = server.createobject( "adox.catalog" ) 
    mycat.create dbstr

    if err <> 0 then
        response.write err.description
        session("dbtype") = ""
        session("dbstr") = ""
        response.write "<input type='button' name='ok' value=' 返 回 ' onclick='javascript:history.go(-1)'>"
        response.end
    end if

    session("dbtype") = "access"
    session("dbstr") = dbstr
    response.redirect "?"
end sub

'==================================================================调用链接函数
conn()

function conn()
    dim conn1,connstr
    on error resume next
    select case session("dbtype")
    case "access"
        '==================================================================连接access数据库
        connstr = session("dbstr")
        set conn1 = server.createobject("adodb.connection")
        conn1.open connstr
    case "sql"
        '==================================================================连接sql数据库
        set conn1 = server.createobject("adodb.connection") 
        conn1.open session("dbstr") 
    end select

    if err <> 0 then
        response.write err.description
        session("dbtype") = ""
        session("dbstr") = ""
        response.write "<input type='button' name='ok' value=' 返 回 ' onclick='javascript:history.go(-1)'>"
        response.end
    end if

    set conn = conn1
end function


sub echo(str)
    response.write(str)
end sub

function iif(var, val1, val2)
    if var = true then
        iif = val1
     else
        iif = val2
    end if
end function

'正则表达式函数,用于删除注释
'-------------------------------------
function regexpreplace(strng, patrn, replstr)
  dim regex,match,matches              ' 建立变量。
  set regex = new regexp               ' 建立正则表达式。
  regex.pattern = patrn               ' 设置模式。
  regex.ignorecase = true               ' 设置是否区分大小写。
  regex.global = true   ' 设置全局可用性。

  regexpreplace = regex.replace(strng, replstr)         ' 作替换。
end function

'==================================================================adovbs 常量声明

'---- datatypeenum values ----
const adempty = 0
const adtinyint = 16
const adsmallint = 2
const adinteger = 3
const adbigint = 20
const adunsignedtinyint = 17
const adunsignedsmallint = 18
const adunsignedint = 19
const adunsignedbigint = 21
const adsingle = 4
const addouble = 5
const adcurrency = 6
const addecimal = 14
const adnumeric = 131
const adboolean = 11
const aderror = 10
const aduserdefined = 132
const advariant = 12
const adidispatch = 9
const adiunknown = 13
const adguid = 72
const addate = 7
const addbdate = 133
const addbtime = 134
const addbtimestamp = 135
const adbstr = 8
const adchar = 129
const advarchar = 200
const adlongvarchar = 201
const adwchar = 130
const advarwchar = 202
const adlongvarwchar = 203
const adbinary = 128
const advarbinary = 204
const adlongvarbinary = 205

'---- fieldattributeenum values ----
const adfldmaydefer = &h00000002
const adfldupdatable = &h00000004
const adfldunknownupdatable = &h00000008
const adfldfixed = &h00000010
const adfldisnullable = &h00000020
const adfldmaybenull = &h00000040
const adfldlong = &h00000080
const adfldrowid = &h00000100
const adfldrowversion = &h00000200
const adfldcachedeferred = &h00001000

'---- schemaenum values ----
'---- schemaenum values ----
const adschemaproviderspecific = -1
const adschemaasserts = 0
const adschemacatalogs = 1
const adschemacharactersets = 2
const adschemacollations = 3
const adschemacolumns = 4
const adschemacheckconstraints = 5
const adschemaconstraintcolumnusage = 6
const adschemaconstrainttableusage = 7
const adschemakeycolumnusage = 8
const adschemareferentialconstraints = 9
const adschematableconstraints = 10
const adschemacolumnsdomainusage = 11
const adschemaindexes = 12
const adschemacolumnprivileges = 13
const adschematableprivileges = 14
const adschemausageprivileges = 15
const adschemaprocedures = 16
const adschemaschemata = 17
const adschemasqllanguages = 18
const adschemastatistics = 19
const adschematables = 20
const adschematranslations = 21
const adschemaprovidertypes = 22
const adschemaviews = 23
const adschemaviewcolumnusage = 24
const adschemaviewtableusage = 25
const adschemaprocedureparameters = 26
const adschemaforeignkeys = 27
const adschemaprimarykeys = 28
const adschemaprocedurecolumns = 29
const adschemadbinfokeywords = 30
const adschemadbinfoliterals = 31
const adschemacubes = 32
const adschemadimensions = 33
const adschemahierarchies = 34
const adschemalevels = 35
const adschemameasures = 36
const adschemaproperties = 37
const adschemamembers = 38
const adschematrustees = 39
const adschemafunctions = 40
const adschemaactions = 41
const adschemacommands = 42
const adschemasets = 43

'==================================================================返回字段类型函数
function typ(field_type)
    'field_type = 字段类型值
    select case field_type
        case adempty:typ = "empty"
        case adtinyint:typ = "tinyint"
        case adsmallint:typ = "smallint"
        case adinteger:typ = "integer"
        case adbigint:typ = "bigint"
        case adunsignedtinyint:typ = "tinyint" 'unsignedtinyint
        case adunsignedsmallint:typ = "unsignedsmallint"
        case adunsignedint:typ = "unsignedint"
        case adunsignedbigint:typ = "unsignedbigint"
        case adsingle:typ = "single" 'single
        case addouble:typ = "double" 'double
        case adcurrency:typ = "money" 'currency
        case addecimal:typ = "decimal"
        case adnumeric:typ = "numeric" 'numeric
        case adboolean:typ = "bit" 'boolean
        case aderror:typ = "error"
        case aduserdefined:typ = "userdefined"
        case advariant:typ = "variant"
        case adidispatch:typ = "idispatch"
        case adiunknown:typ = "iunknown"
        case adguid:typ = "guid" 'guid
        case addate:typ = "datetime" 'date
        case addbdate:typ = "dbdate"
        case addbtime:typ = "dbtime"
        case addbtimestamp:typ = "datetime" 'dbtimestamp
        case adbstr:typ = "bstr"
        case adchar:typ = "char"
        case advarchar:typ = "varchar"
        case adlongvarchar:typ = "longvarchar"
        case adwchar:typ = "text" 'wchar类型 sql中为text
        case advarwchar:typ = "varchar" 'varwchar
        case adlongvarwchar:typ = "text" 'longvarwchar
        case adbinary:typ = "binary"
        case advarbinary:typ = "varbinary"
        case adlongvarbinary:typ = "longbinary"'longvarbinary
        case adchapter:typ = "chapter"
        case adpropvariant:typ = "propvariant"
        case else:typ = "unknown"
    end select
end function

'==================================================================返回字段类型列表
function fieldtypelist(n)
    dim strlist,str1,str2
    strlist = "<select name=""field_type"">"
    if session("dbtype") = "access" then
        strlist = strlist & "<option value=""varchar"">文本</option>"
        strlist = strlist & "<option value=""text"">备注</option>"
        strlist = strlist & "<option value=""bit"">(是/否)</option>"
        strlist = strlist & "<option value=""tinyint"">数字(字节)</option>"
        strlist = strlist & "<option value=""smallint"">数字(整型)</option>"
        strlist = strlist & "<option value=""integer"">数字(长整型)</option>"
        strlist = strlist & "<option value=""single"">数字(单精度)</option>"
        strlist = strlist & "<option value=""double"">数字(双精度)</option>"
        strlist = strlist & "<option value=""numeric"">数字(小数)</option>"
        strlist = strlist & "<option value=""guid"">数字(同步id)</option>"
        strlist = strlist & "<option value=""datetime"">时间/日期</option>"
        strlist = strlist & "<option value=""money"">货币</option>"
        strlist = strlist & "<option value=""binary"">二进制</option>"
        strlist = strlist & "<option value=""longbinary"">长二进制</option>"
        strlist = strlist & "<option value=""longbinary"">ole 对象</option>"

    else
        strlist = strlist & "<option value="""">选择类型</option>"
        strlist = strlist & "<option value=""bigint"">bigint</option>"
        strlist = strlist & "<option value=""binary"">binary(二进制数据类型)</option>"
        strlist = strlist & "<option value=""bit"">bit(整型)</option>"
        strlist = strlist & "<option value=""char"">char(字符型)</option>"
        strlist = strlist & "<option value=""datetime"">datetime(日期时间型)</option>"
        strlist = strlist & "<option value=""decimal"">decimal(精确数值型)</option>"
        strlist = strlist & "<option value=""float"">float(近似数值型)</option>"
        strlist = strlist & "<option value=""image"">image(二进制数据类型)</option>"
        strlist = strlist & "<option value=""int"">int(整型)</option>"
        strlist = strlist & "<option value=""money"">money(货币型)</option>"
        strlist = strlist & "<option value=""nchar"">nchar(统一编码字符型)</option>"
        strlist = strlist & "<option value=""ntext"">ntext(统一编码字符型)</option>"
        strlist = strlist & "<option value=""numeric"">numeric(精确数值型)</option>"
        strlist = strlist & "<option value=""nvarchar"">nvarchar(统一编码字符型)</option>"
        strlist = strlist & "<option value=""real"">real(近似数值型)</option>"
        strlist = strlist & "<option value=""smalldatetime"">smalldatetime(日期时间型)</option>"
        strlist = strlist & "<option value=""smallint"">smallint(整型)</option>"
        strlist = strlist & "<option value=""smallmoney"">smallmoney(货币型)</option>"
        strlist = strlist & "<option value=""sql_variant"">sql_variant()</option>"
        strlist = strlist & "<option value=""text"">text(字符型)</option>"
        strlist = strlist & "<option value=""timestamp"">timestamp(特殊数据型)</option>"
        strlist = strlist & "<option value=""tinyint"">tinyint(整型)</option>"
        strlist = strlist & "<option value=""uniqueidentifier"">uniqueidentifier(特殊数据型)</option>"
        strlist = strlist & "<option value=""varbinary"">varbinary(二进制数据类型)</option>"
        strlist = strlist & "<option value=""varchar"">varchar(字符型)</option>"
    end if
    str1 = """" & n & """"
    str2 = """" & n & """" & " selected"
    strlist = replace(strlist,str1,str2)
    strlist = strlist & "</select>"
    echo strlist
end function

'==================================================================主界面
sub main(str)
    on error resume next
    %>
    <script language=javascript>
    ie = (document.all)? true:false
    if (ie){
    function ctlent(eventobject){if(event.ctrlkey && 
    window.event.keycode==13){this.document.exesql.submit();}}
    }
    </script>
    <script language="javascript">
        function table_delete()
        {
        if (confirm("确认删除该记录吗?   该操作将不可撤销!!!"))
            return true;
        else
            return false;
        }
    </script>

    <form action="?key=sql" method=post name="exesql">        
        <font color=red>执行sql语句:</font><font color=#999999>(每句语句以“;”结束,支持(--)sql注释,ctrl + enter 快速提交)</font>  <input type="button" value="刷新本页" onclick="javascript:location.reload()">     
        <span onclick="document.exesql.sql.rows+=5;" style="cursor:pointer;">+</span>
        <span onclick="if(document.exesql.sql.rows>9)document.exesql.sql.rows-=5" style="cursor:pointer;">-</span>
        <div style="float:left;width:600px;">
        <textarea id="sql" name="sql" style="width:600px;" rows="9" ondblclick="this.select();" onkeydown="ctlent()"><%=request("sql")%></textarea><br />
        <input type="checkbox" name="schematable" value="1" style="border:0px;">adschematables 
        <input type="checkbox" name="schemacolumn" value="2" style="border:0px;">adschemacolumns
        <input type="checkbox" name="schemaprovider" value="3" style="border:0px;">adschemaprovidertypes   
        分页大小:
        <select name="pagesize">
          <%
          if request("pagesize") <> "" and  isnumeric(request("pagesize")) then
             echo "<option value='"&request("pagesize")&"' selected>"&request("pagesize")&"</option>"
          else
             echo "<option value='50'>50</option>"
          end if
          %>
          <option value="10">10</option>
          <option value="20">20</option>
          <option value="30">30</option>
          <option value="40">40</option>
          <option value="50">50</option>
          <option value="60">60</option>
          <option value="70">70</option>
          <option value="80">80</option>
          <option value="90">90</option>
          <option value="100">100</option>
        </select>

        </div>
        <div style="float:left;width:50px;padding:60px 0px 0px 5px;">
        <input type="submit" name="submit_confirm" value="提交"> <br /> <br />  
        <input type="button" name="submit3" value="清空" onclick="sql.value=''"><br /><br /> 
        <input type="button" name="ok" value="返回" onclick="javascript:history.go(-1)">
        </div>
    </form>  
    <div style="clear:both"></div>
    <% if str = "" then %>
    <form action="?key=addtable" method="post">        
        <div style="clear:both;text-align:left;"><br />
        <font color=red>创建新表:</font><br>
        表  名:<input type="text" name="table_name" size="20"><br>
        字段数:<input type="text" name="field_num" size="20">
        <input type="submit" name="submit_create" value="提交">
        <input type="reset" name="submit32" value="重置">
        </div>     
    </form> 
    <br><br>
    <a href="?key=tosql&strt=2">导出所有表结构到sql</a>
    <%
    end if
end sub

'==================================================================创建表界面
sub add_table(table_name,field_num)
    'table_name = 表名称
    'field_num  = 字段数
    on error resume next
    if not isnumeric(field_num) then
        echo "字段数必须是整数。"
        echo "<input type='button' name='ok' value=' 返 回 ' onclick='javascript:history.go(-1)'>"
        exit sub
    end if
    %>
    <p class="hei"><span>创建表:</span><%=table_name%></p>
    <form action="?key=createtable" method="post">
    <table width="600" border="0" cellpadding="2" cellspacing="1" bgcolor="#cccccc">
      <tr> 
        <td width="75" height="20" align="center">字段名</td>
        <td width="99" height="20" align="center">类 型</td>
        <td width="73" height="20" align="center">大 小</td>
        <td width="96" height="20" align="center">空值</td>
        <td width="83" height="20" align="center">自动编号</td>
        <td width="143" height="20" align="center">主 键</td>
      </tr>
      <% for i = 0 to field_num - 1 %>
      <tr> 
        <td width="75" height="20" align="center"> 
            <input type="text" name="field_name" size="10">
        </td>
        <td width="99" height="20" align="center"> 
            <% fieldtypelist(0) %>
        </td>
        <td width="73" height="20" align="center"> 
            <input type="text" name="field_size" size="10">
        </td>
        <td width="96" height="20" align="center"> 
            <select name="null">
              <option value="not_null">not_null</option>
              <option value="null">null</option>
            </select>
        </td>
        <td width="83" height="20" align="center"> 
          <select size="1" name="autoincrement">
            <option></option>
            <option>自动编号</option>
          </select>
        </td>
        <td width="143" height="20" align="left"> 
              <select name="primarykey">
                <option></option>
                <option value="primarykey">primarykey</option>
              </select>
        </td>
      </tr>
      <% next %>
      <tr> 
        <td height="35" align="center" colspan="5"> 
            <input type="hidden" name="i" value=<%=field_num%>>
            <input type="hidden" name="table_name" value="<%=table_name%>">
            <input type="submit" name="submit" value=" 提 交 ">
              
            <input type="reset" name="submit2" value=" 重 置 ">
             
          <input type="button" name="ok" value=" 放 弃 " onclick="javascript:history.go(-1)">
        </td>
        <td height="20"></td>
      </tr>
    </table>
    </form>
    <%
end sub

'==================================================================构建创建表的sql语句
sub create_table()
    dim sql,i,primarykey
    on error resume next
    sql = "create table ["&request("table_name")&"] ("
    for i = 1 to request("i")
       sql = sql & "[" & request("field_name")(i) & "] " & request("field_type")(i)
          if request("field_size")(i) <> "" then
              sql = sql & "(" & request("field_size")(i) & ")"
          end if
          if request("null")(i) = "not_null" then
              sql = sql & " not null"
          end if
          if request("autoincrement")(i) = "自动编号" then
              sql = sql & " identity"
          end if
          if request("primarykey")(i) = "primarykey" then
              primarykey = request("field_name")(i)
          end if
        'if primarykey <> "" then
           sql = sql & ","
        'end if
    next
    if primarykey<>"" then
       sql=sql&" primary key (["&primarykey&"]) "
    end if
    sql = sql & ")"
    sql = replace(sql,"()","")  '构建空表
    response.redirect "?key=sql&sql=" & sql 
end sub


'==================================================================修改表名或字段名 2006-09-08
sub reobj()
    on error resume next
    dim mydb,mytable,tablename
    tablename = request("tablename")
    set mydb = server.createobject("adox.catalog")
    mydb.activeconnection = conn

    if request("obj") = "field" then   '修改字段名
        dim fieldsname,newfieldsname
        fieldsname = request("fieldsname")
        newfieldsname = request("newfieldsname")
        set mytable = server.createobject("adox.table")
        set mytable = mydb.tables(tablename) 
        mytable.columns(fieldsname).name = newfieldsname
    end if

    if request("obj") = "table" then   '修改表名
        dim newtablename
        newtablename = request("newtablename")
        mydb.tables(tablename).name = newtablename
    end if

    if err <> 0 then
        echo  err.description
        echo "<input type='button' name='ok' value=' 返 回 ' onclick='javascript:history.go(-1)'>"
        exit sub
    end if

    if request("obj") = "field" then
        response.redirect "?key=view&table_name=" & tablename
    else
        response.redirect "?key=view&table_name=" & newtablename
    end if

end sub

'==================================================================查看表结构函数
sub view(table_name)
    'table_name = 表名称
    dim rs,sql,table,primary,primarykey,i,editstr,typs
    on error resume next
    table = table_name
    set primary = conn.openschema(adschemaprimarykeys,array(empty, empty, table))
    if primary("column_name") <> "" then
        primarykey = primary("column_name")
    end if
    primary.close
    set primary = nothing

    %>

    <script language="javascript">
        function table_delete()
        {
        if (confirm("确认删除该记录吗?   该操作将不可撤销!!!"))
            return true;
        else
            return false;
        }
    </script>

    <font color=red>表:<%=table_name%></font>    <input type="button" value="刷新本页" onclick="javascript:location.reload()"><br><br>
    <% if request("key") = "editfidlevi" then call editfidlevi() %>
    <table width="600" border="0" cellpadding="1" cellspacing="1" bgcolor="#cccccc">
    <tr> 
      <td width="125" height="20" align="center">字 段 名</td>
      <td width="110" align="center">类 型</td>
      <td width="83" align="center"> 设定大小</td>
      <td width="48" align="center">允许空</td>
      <td width="76" align="center">自动编号</td>
      <td width="54" align="center">主键</td>
      <td width="82" align="center">执行操作</td>
    </tr>
    <%
    sql = "select * from [" & table_name & "] "
    set rs = conn.execute(sql)
    if err = 0 then
        for i = 0 to rs.fields.count-1
        %>
        <tr> 
          <td height="20" align="left"><%=rs(i).name%></td>
          <td align="left"><%=typ(rs(i).type)%></td>
          <td align="center"><%=rs(i).definedsize%></td>
          <td align="center"><%=iif((rs(i).attributes and adfldisnullable)=0,"no","yes")%></td>
          <td align="center"><%=iif(rs(i).properties("isautoincrement") = true,"是","否")%></td>
          <td align="center"><%=iif(rs(i).name = primarykey,"是","否")%></td>
          <td align="center">
            <a href="?key=editfidlevi&fidle=<%=rs(i).name%>&table_name=<%=table_name%>&fidletype=<%=typ(rs(i).type)%>">修改</a> 
            <a href="?key=sql&sql=alter table [<%=table_name%>] drop [<%=rs(i).name%>];" onclick="return table_delete();">删除</a>
          </td>
        </tr>
        <%
            editstr = editstr&"<option value='"&rs(i).name&"'>"&rs(i).name&"</option>"
        next
        %>
        </table>
        <br>
        <a href="?key=tosql&strt=0&table_name=<%=table_name%>">导出表结构</a>  
        <a href="?key=sql&sql=select * from <%=table_name%>&table_name=<%=table_name%>&primarykey=<%=primarykey%>">浏览表记录</a>  
        <a href="?key=sql&sql=drop table <%=table_name%>" onclick="return table_delete();">删除表</a>     
        <input type="text" name="newtablename" size="20" value="<%=table_name%>">
        <input type="button" value="修改表名" onclick="location.href='?key=reobj&obj=table&tablename=<%=table_name%>&newtablename='+newtablename.value">
        <br><br>
        <%
        '判断是否有主键
        if primarykey = "" then
            echo "<font color=red>该表没有主键,执行操作可能会导致数据损坏或丢失。</font><br>"
            echo "你可以将:"
            echo "<select name='keyname'>"
            for i=0 to rs.fields.count-1
                echo "<option value=" & rs(i).name & ">" & rs(i).name & "</option>"
            next
            echo "</select> "
            echo "<input type=button value=设为主键 onclick=""location.href='?key=sql&sql=alter table ["&table_name&"] add primary key (['+keyname.value+'])';"">"
            echo "<br><br>"
        end if
        '显示修改字段名
        echo "<select name='fieldsname'>"
        echo "<option value=''>选择字段</option>"
        echo editstr
        echo "</select> 改名为 "  & chr(10)
        echo "<input type='text' name='newfieldsname' size='20'> "  & chr(10)
        echo "<input type=button value=修改字段名 onclick=""location.href='?key=reobj&obj=field&tablename="&table_name&"&fieldsname='+fieldsname.value+'&newfieldsname='+newfieldsname.value"">"
        echo "<br><br>"
    end if
    rs.close
    set rs = nothing
    %>
    <font color=red>增加字段:</font><br><br>
    <form action="?key=addfield" method="post">
      <table width="600" height="39" border="0" cellpadding="2" cellspacing="1" bgcolor="#cccccc">
        <tr> 
          <td width="60" height="20" align="center">字段名</td>
          <td width="50" height="20" align="center">类型</td>
          <td width="58" height="20" align="center">设定大小</td>
          <td width="64" height="20" align="center">允许空值</td>
          <td width="66" height="20" align="center"> 自动编号</td>
          <td width="96" height="20" align="center">  </td>
        </tr>
        <tr> 
          <td width="60" height="20" align="center"> 
            <input type="text" name="fldname" size="10">
          </td>
          <td width="50" height="20" align="center"> 
            <% fieldtypelist(0) %>
          </td>
          <td width="58" height="20" align="center"> 
            <input type="text" name="fldsize" size="10">
          </td>
          <td width="64" height="20" align="center"> 
            <input name="null" type="checkbox" value="on" checked>
          </td>
          <td width="66" height="20" align="center"> 
            <input type="checkbox" name="autoincrement" value="on">
          </td>
          <td width="96" height="20" align="center"> 
            <input type="hidden" name="table_name" value="<%=table_name%>">
            <input type="submit" value="提交">
          </td>
        </tr>
    </table>
    </form>
    <%
end sub

'==================================================================修改字段属性的界面
sub editfidlevi()
    dim sql,rs,i
    on error resume next
    sql = "select * from [" & request("table_name") & "]"
    set rs = conn.execute(sql)
    for i = 0 to rs.fields.count - 1
        if rs(i).name = request("fidle") then
        %>
        <script language="javascript">
            function validate(theform) {
                if (theform.type.value == "")
                {
                alert("请输入数据类型");
                theform.type.focus();
                return (false);
                }
                return (true);
            }
        </script>
        <font color=red>修改字段属性:</font>
        <form action="?key=editfidle&fidle=<%=request("fidle")%>&table_name=<%=request("table_name")%>" method="post" name=frm onsubmit="return validate(frm)">
        <table width="600" border="0" cellpadding="2" cellspacing="1" bgcolor="#cccccc">
          <tr> 
            <td width="60" height="20" align="center">字段名</td>
            <td width="50" height="20" align="center">类型</td>
            <td width="58" height="20" align="center">设定大小</td>
            <td width="64" height="20" align="center">允许空值</td>
            <td width="66" height="20" align="center">自动编号</td>
            <td width="96" height="20"></td>
          </tr>
          <tr> 
            <td width="60" height="20" align="center"><%=rs(i).name%></td>
            <td width="50" height="20" align="center"> 
            <% fieldtypelist(request("fidletype")) %>
              </td>
              <td width="58" height="20"><input type="text" name="size" size="10"></td>
              <td width="64" height="20" align="center">
              <input type="checkbox" name="null" value="null"<%=iif((rs(i).attributes and adfldisnullable)=0,""," checked")%>>
              </td>
              <td width="66" height="20" align="center"> 
              <input type="checkbox" name="autoincrement" value="y"<%=iif(rs(i).properties("isautoincrement") = true," checked","")%>>
              </td>
              <td width="96" height="20" align="center"> 
              <input type="submit" name="submit" value="提交">
              </td>
            </tr>
          </table><br>
        </form>
        <%
        end if
    next
end sub

'==================================================================执行修改字段属性
sub editfidle()
       on error resume next
       sql = "alter table [" & request("table_name") & "] "
       sql = sql&"alter column [" & request("fidle") & "] "
       if request("field_type") <> "" then
          sql = sql & request("field_type")
       end if
       if request("size") <> "" then
          sql = sql & "(" & request("size") & ") "
       end if
          if request("null") = "" then
              sql = sql & " not null"
          end if
          if request("autoincrement") = "y" then
              sql = sql & " identity"
          end if
    sql = trim(sql)
    conn.execute(sql)
    response.redirect "?key=view&table_name="& request("table_name")
end sub

'==================================================================添加字段函数
sub addfield()
    on error resume next
    fldname = request("fldname")
    fldtype = request("field_type")
    fldsize = request("fldsize")
    fldnull = request("null")
    fldautoincrement = request("autoincrement")
    table_name = request("table_name")
    if fldname <> "" and fldtype <> "" then
      sql = "alter table [" & table_name & "] add ["&fldname&"] " & fldtype

      if fldsize <> "" then
        sql = sql & "(" & fldsize & ")"
      end if 

      if fldnull <> "on" then
        sql = sql & " not null"
      end if

      if fldautoincrement = "on" then
        sql = sql & " identity"
      end if
      conn.execute(sql)
      response.redirect "?key=view&table_name=" & table_name
    else
      echo "输入数据错误!<input type='button' name='ok' value=' 返 回 ' onclick='javascript:history.go(-1)'>"
    end if
    if err <> 0 then
        echo err.description
        echo "<input type='button' name='ok' value=' 返 回 ' onclick='javascript:history.go(-1)'>"
        response.end
    end if
end sub


'==================================================================编辑数据
sub editdata()
    dim keys,names,values,action,rs,sql,tab
    on error resume next
    keys = request("primarykey")
    names = request("table_name")
    values = request("primarykeyvalue")
    action = request("action")
    set rs = server.createobject("adodb.recordset")
    if action = "" or action = "save" or action = "new" then
        sql = "select * from " & names & " where " & keys & " = " & values
    end if
    if action = "pre" then
        sql = "select top 1 * from " & names & " where " & keys & " < " & values & " order by " & keys & " desc"
    end if
    if action = "next" then
        sql = "select top 1 * from " & names & " where " & keys & " > " & values & " order by " & keys & " asc"
    end if
    if action = "add" then
        sql = "select * from [" & names & "]"
    end if
    rs.open sql, conn, 1, 3

    if rs.eof and action = "new" then
        sql = "select * from [" & names & "]"
        rs.open sql, conn, 1, 3
    end if

    if action = "save" or action = "new" then
        if action = "new" then rs.addnew
        for each tab in rs.fields
            if keys <> tab.name then
                rs(tab.name) = request.form(tab.name & "_column")
                if err <> 0 then
                    echo tab.name & err.description
                    echo "<input type='button' name='ok' value=' 返 回 ' onclick='javascript:history.go(-1)'>"
                    response.end
                end if
            end if
        next
        rs.update
    end if

    echo "字段数据编辑<br>"
    echo "<table width=600 border=0 cellpadding=5 cellspacing=1 bgcolor=#cccccc><tr><td>"
    echo "<form action='?key=edit&table_name=" & names & "&primarykey=" & keys & "&primarykeyvalue=" & iif(action<>"add",rs(keys),"") & "' method='post' name='editor'>"
    echo "<br>"
    echo "<input type=hidden name=action value=save>"
    echo iif(action="add","","<input type=submit value=保存 onclick=this.form.action.value='save';> ")
    echo "<input type=button value=添加 onclick=if(confirm('确实要添加当前为新记录吗?')){this.form.action.value='new';this.form.submit();};> "
    echo "<input type=button value=上一条 onclick=""this.form.action.value='pre';this.form.submit();""> "
    echo "<input type=button value=下一条 onclick=""this.form.action.value='next';this.form.submit();"">  "
    echo "<a href='?key=view&table_name=" & names & "'>表结构</a>  "
    echo "<a href='?key=sql&sql=select * from " & names & "&table_name="& names & "&primarykey="&keys&"'>表浏览</a>  "
    echo "<a href='?'>主界面</a><br>"
    if not rs.eof or action = "add" then
        for each tab in rs.fields
            echo ""
            echo "<br><font color=red>" & tab.name & "</font> <font color=#999999>( " & typ(tab.type) & " )</font><br>"
            if tab.type = 201 or tab.type = 203 then
                echo "<textarea style='width:600;' name=""" & tab.name & "_column"" rows=6"
                echo iif(tab.name = keys, " disabled title='主键约束,将无法被修改.'>", ">")
                if action <> "add" then echo trim(tab.value)
                echo "</textarea>"
            else
                echo "<input type='text' style='width:600;' name='" & tab.name & "_column'"
                echo iif(tab.name = keys, " disabled title='主键约束,将无法被修改.'", " ") & " value='"
                if action <> "add" then echo trim(tab.value)
                echo "'>"
            end if
            echo "<br>"
        next

    else
        echo "<script>alert('已经没有了!');history.back();</script>"
        response.end()
    end if
    echo "<br>"
    echo iif(action="add","","<input type=submit value=保存 onclick=this.form.action.value='save';> ")
    echo "<input type=button value=添加 onclick=if(confirm('确实要添加当前为新记录吗?')){this.form.action.value='new';this.form.submit();};> "
    echo "<input type=button value=上一条 onclick=""this.form.action.value='pre';this.form.submit();""> "
    echo "<input type=button value=下一条 onclick=""this.form.action.value='next';this.form.submit();"">  "
    echo "<a href='?key=view&table_name=" & names & "'>表结构</a>  "
    echo "<a href='?key=sql&sql=select * from " & names & "&table_name="& names & "&primarykey="&keys&"'>表浏览</a>  "
    echo "<a href='?'>主界面</a>  "
    echo "</form></td></tr></table>"
end sub

'==================================================================显示存储过程
sub showproc()
    dim stablename,adox
    on error resume next
    echo "存储过程:<font color=red>" & request("table_name") & "<font><br>"
    stablename = request("table_name")
    set adox = server.createobject("adox.catalog")
    adox.activeconnection = conn
    echo "<textarea cols=70 rows=8>" & adox.procedures(stablename).command.commandtext & "</textarea><br>"
    if err <> 0 then
        echo err.description
        exit sub
    end if
end sub


'==================================================================分页导航
'分页导航
sub shownavbar (rs,page,pageurl,pagesize)
    page = cint(page)
    %>
    <table width="100%" border="0" cellpadding="2" cellspacing="1" bgcolor="#cccccc">
    <tr>
      <% if request("primarykey") <> "" and request("table_name") <> "" then %>
      <td align="left">当前表:<font color=red><%=request("table_name")%></font>    
      <a href="?key=edit&table_name=<%=request("table_name")%>&primarykey=<%=request("primarykey")%>&action=add">插入新记录</a> 
      </td>
      <% end if %>
      <td align="right">
        <%
        echo "共有" & rs.recordcount & "条纪录 当前" & page & "/" & rs.pagecount & "页"
        if page > 1 then
            echo "<a href='" & pageurl & "&page=1&pagesize="&pagesize&"'>首页</a> " 
            echo "<a href='" & pageurl & "&page=" & page - 1 & "&pagesize="&pagesize&"'>上页</a> "
        end if
        if (rs.pagecount > 1 and page < rs.pagecount) then
            echo "<a href='" & pageurl & "&page=" & page + 1 & "&pagesize="&pagesize&"'>下页</a> "
            echo "<a href='" & pageurl & "&page=" & rs.pagecount & "&pagesize="&pagesize&"'>末页</a> "
        end if
        echo "转到:第"
        echo "<select name='select2' onchange='location.href=this.value;'>"
        dim i
        for i = 1 to rs.pagecount
            echo "<option value='"& pageurl &"&pagesize="&pagesize&"&page="& i & "' "
            if i = cint(page) then echo "selected"
            echo ">"& i &"</option>"
        next
        echo "</select>页"
        %>
        </td>
    </tr>
    </table>
    <%
end sub


'==================================================================显示查询
sub showselect(sql)
    dim page,pageurl,strdel,geturl                    
    pagesize = request("pagesize")             '设置每页显示的记录数
    if pagesize = "" or not isnumeric(pagesize) then pagesize = 50

    '判断是否删除
    if request("keylog") <> "" then
        strdel = "delete from " & request("table_name") & " where " & request("primarykey") & "=" & request("keylog")
        response.write strdel
        conn.execute(strdel)
        geturl = "?" & replace(request.querystring,"&keylog="&request("keylog"),"")
        response.redirect geturl
    end if

    page = request("page")           '设置当前显示的页数
    if page="" or not isnumeric(page) then page=1
    pageurl = "?key=sql&sql=" & sql
    if request("primarykey") <> "" and request("table_name") <> "" then
      pageurl = pageurl & "&table_name=" & request("table_name") & "&primarykey=" & request("primarykey")
    end if

    '--------------------------
   dim rs
   set rs = server.createobject("adodb.recordset")
   rs.open sql,conn,3

   if not rs.eof then
         rs.pagesize = pagesize
      if cint(page) < 1 then page = 1
         if cint(page) > rs.pagecount then page = rs.pagecount
         rs.absolutepage = page
   end if

    '显示分页导航
   shownavbar rs,page,pageurl,pagesize

   '-------------------------------
   echo "<div style='overflow-x:auto;overflow-y:auto; width:800;height:380;'>"
   echo "<table border=0 border=0 cellpadding=3 cellspacing=1 bgcolor=#cccccc><tr>"
   primarykey = request("primarykey")
   if primarykey <> "" and request("table_name") <> "" then
   echo "<td bgcolor=#ffffff>操作</td><td bgcolor=#ffffff>删</td>"
   end if
   for i = 0 to rs.fields.count - 1         '循环字段名
      set field = rs.fields.item(i)
      echo "<td bgcolor=#ffffff>" & field.name & " </td>"
   next
   echo "</tr>"

   dim i,field,j
   do while not rs.eof and j < rs.pagesize                    '循环数据
      echo "<tr>"

      if primarykey <> "" and request("table_name") <> "" then
      echo "<td bgcolor=#ffffff nowrap><a href='?key=edit&table_name=" & request("table_name") & "&primarykey=" & primarykey & "&primarykeyvalue=" & rs(primarykey) & "'><font color=#666666>编辑</font></a></td>"
      echo "<td><a href='?"&request.querystring&"&keylog="&rs(primarykey)&"' onclick='return table_delete();'><font color=#ff000>×</font></a></td>"
      end if

      for i = 0 to rs.fields.count - 1
         set field = rs.fields.item(i)
         if len(field.value) < 12 then
             echo "<td bgcolor=#ffffff nowrap>" & field.value & " </td>"
         else
             echo "<td bgcolor='#ffffff'><span class='fixspan'>" & field.value & " </span></td>"
         end if
      next
      echo "</tr>"
      rs.movenext
      j = j + 1
   loop
   'response.contenttype ="application/vnd.ms-excel"'生成excel表格
   echo "</table></div>"

end sub


sub exesql(sql)
    on error resume next
    '==================================================================执行sql函数

    if trim(request.form("schematable")) <> "" then call showschema (adschematables)
    if trim (request.form("schemacolumn")) <> "" then call showschema(adschemacolumns)
    if trim (request.form("schemaprovider")) <> "" then call showschema(adschemaprovidertypes)

    sql = trim(request("sql"))
    if sql = "" then exit sub

    sql = regexpreplace(sql, "(--)(.)*n", "")   '替换注释
    sql = regexpreplace(sql, "n[s| ]*r", "")  '替换空行
    sql = regexpreplace(sql, "n", "")           '替换换行符
    sql = regexpreplace(sql, "r", "")           '替换回车符
    if (lcase(left(sql,len("select"))) = "select") and instr(sql,"into") = 0 then
       call showselect (sql)
       if err <> 0 then echo "<br><font color=red>" & err.description & "</font>"
       response.end
    else
           '如果非select语句,允许执行多条以分号分隔的语句
           dim asql,iloop
           asql = split(sql,";")
           for iloop = 0 to ubound(asql)
            if trim(asql(iloop)) <> "" then
                  conn.execute (asql(iloop))
                if err <> 0 then
                    echo "<br><font color=red>" & err.description & "<br>  <b>"
                    echo iloop + 1 & "、</b></font><font color=#cc6600>" & asql(iloop) & "</font><br>"
                    'err.clear()     '忽略错误
                    exit sub          '中止执行
                else
                    echo "<div style='padding:3px 0px;border-bottom:1px solid #069;'><b>" & iloop + 1 & "、</b>" & asql(iloop) & "</div>"
                end if
            end if
        next
        echo "<font color=red><h4>命令执行成功</h4></font>"
   end if
end sub

'显示数据库信息
'querytype有以下三个主要参数
'adschematables
'adschemacolumns
'adschemaprovidertypes
'call showschema (adschematables)
sub showschema(querytype)
dim rs
'set rs = conn.openschema()
set rs = conn.openschema (querytype)
'set rs = conn.openschema (adschemaprovidertypes)

   echo "<div style='overflow-x:auto;overflow-y:auto; width:800;height:380;'><table border=0 border=0 cellpadding=3 cellspacing=1 bgcolor=#cccccc><tr>"
   for i = 0 to rs.fields.count - 1         '循环字段名
      set field = rs.fields.item(i)
      echo "<td bgcolor='#ffffff'>" & field.name & " </td>"
   next
   echo "</tr>"

   dim i,field
   do while not rs.eof                      '循环数据
      echo "<tr>"
      for i = 0 to rs.fields.count - 1
         set field = rs.fields.item(i)
         echo "<td bgcolor='#ffffff'>" & field.value & "  </td>"
      next
      echo "</tr>"
      rs.movenext
   loop

   echo "</table></div>"
end sub   

%>



<%
'==================================================================导出sql
sub tosql(strt)
    'strt = 0 导出结构
    'strt = 1 导出内容
    dim strsql
    if strt = "0"  then
        table = request("table_name")
        echo "以下是表 <font color=red>" & request("table_name") & "</font> 的结构: "
        echo "<input type='button' name='ok' value=' 返 回 ' onclick='javascript:history.go(-1)'>"
        strsql = getsql(table)
    end if
    if strt = "2" then
        echo "以下是 <font color=red> 数据库 </font> 的结构: "
        echo "<input type='button' name='ok' value=' 返 回 ' onclick='javascript:history.go(-1)'>"
        set objschema = conn.openschema(adschematables)
        do while not objschema.eof
            if objschema("table_type") = "table" then
                table = objschema("table_name")
                strsql = strsql & getsql(table)'table & "|"'getsql(table)
            end if
        objschema.movenext
        loop
        objschema.close
    end if        
    echo "<textarea cols=110 rows=38>" & strsql & "</textarea>"
    conn.close
end sub

'================================================================== 输出表结构
function getsql(table)
    on error resume next
    getsql = "-- 表结构 " & table & " 的sql语句。" & chr(10)
    dim primary,primarykey
    set primary = conn.openschema(adschemaprimarykeys,array(empty,empty,table))
    if primary("column_name") <> "" then
        primarykey = primary("column_name")
    end if

    primary.close
    set primary = nothing

    tbl_struct = "create table [" & table & "] ( " & chr(10)
    sql = "select * from " & table
    set rs = conn.execute(sql)
    if err = 0 then
        for i = 0 to rs.fields.count-1
           tbl_struct = tbl_struct & "[" & rs(i).name & "] "
           typs = typ(rs(i).type)
           if typs = "varchar" or typs = "binary" or typs = "char" then
             tbl_struct = tbl_struct & typs & "(" & rs(i).definedsize & ")"
           else
             tbl_struct = tbl_struct & typs & " "
           end if
           attrib = rs(i).attributes
           if (attrib and adfldisnullable) = 0 then
             tbl_struct = tbl_struct&" not null"
           end if
           if rs(i).properties("isautoincrement") = true then
             tbl_struct = tbl_struct & " identity"
           end if
           tbl_struct = tbl_struct & "," & chr(10)
        next
        if primarykey <> "" then
            tbl_struct = tbl_struct & "primary key ([" & primarykey & "]));"
        else
            len_of_sql = len(tbl_struct)
            tbl_struct = mid(tbl_struct,1,len_of_sql-2)
            tbl_struct = tbl_struct & ");"
        end if
    else
        tbl_struct = "create table [" & table & "];"
    end if
    getsql = getsql & tbl_struct & chr(10) & chr(10)
end function

sub help()
    echo "sql 常用语句:<br><br>"
    echo "创建表:<br>"
    echo "create table [表名] (<br>"
    echo "[test1] int not null identity,<br>"
    echo "[test2] binary not null,<br>"
    echo "primary key ([test1]))<br><br>"
    echo "设置主键:alter table [tablename] add primary key ([fieldname])<br><br>"
    echo "查询:select * from tablename where fieldname *** order by id desc<br><br>"
    echo "更新:update tanlename set fieldname = values,cn_name='values' where id = 1<br><br>"
    echo "添加:insert into tanlename (fieldnam,fieldnam2)values (1,'values')<br><br>"
    echo "删除:delete from tanlename where fieldname = values<br><br>"
    echo "删除表:drop table 数据表名称<br><br>"
    echo "添加字段:alter table [表名] add [字段名] nvarchar (50) null<br><br>"
    echo "删除字段:alter table [tablename] drop [fieldname]<br><br>"
    echo "修改字段:alter table [表名] alter column [字段名] 类型(大小) null<br><br>"
    echo "新建约束:alter table [表名] add constraint 约束名 check ([约束字段] <= '2000-1-1')<br><br>"
    echo "删除约束:alter table [表名] drop constraint 约束名<br><br>"
    echo "新建默认值:alter table [表名] add constraint 默认值名 default '51windows.net' for [字段名]<br><br>"
    echo "删除默认值:alter table [表名] drop constraint 默认值名<br><br>"

end sub
%>


<!--程序界面主表格开始-->
<table width="100%" height="100%" border="0" cellpadding="5" cellspacing="1" bgcolor="#cccccc">
  <tr>
    <td width="18%" valign="top">

<div id="layer1" style="overflow-x:auto;overflow-y:auto; width:100%;height:100%;">
<div style="width:140px;height:0px;overflow:hidden;"></div>
表: <a href="?">主界面</a> <a href="?key=exit">退出</a> <a href="?key=help">help</a><br>

<%
set objschema = conn.openschema(adschematables)
do while not objschema.eof
    if objschema("table_type") = "table" then
        '输出表名
        echo "<a href='?key=view&table_name="& objschema("table_name") &"'>" & objschema("table_name") & "</a><br>"
    end if
objschema.movenext
loop

echo "所有视图:<br>"
objschema.movefirst
do while not objschema.eof
    if objschema("table_type") = "view" then
        '输出表名
        echo "<a href='?key=sql&sql=select * from [" & objschema("table_name")& "]'>" & objschema("table_name") & "</a><br>"
    end if
objschema.movenext
loop
objschema.close
set objschema = nothing

'echo "存储过程:<br>"
'set objschema = conn.openschema(adschemaprocedures)
'do while not objschema.eof
'    echo "<a href='?key=proc&table_name="& objschema("procedure_name") &"'>" & objschema("procedure_name") & "</a><br>"
'objschema.movenext
'loop
'objschema.close
'set objschema = nothing

%>
</div>
    </td>
    <td width="82%" valign="top">
<div id="layer2" style="overflow-x:anto;overflow-y:auto; width:100%;height:100%;">
<%
select case request("key")
case "" '显示主界面
  call main("")
case "addtable" '显示创建表界面
  call add_table(request("table_name"),request("field_num"))
case "createtable" '执行创建表
  call create_table()
case "view"
  call view(request("table_name"))
case "sql"
  call main("1")
  call exesql(trim(request("sql")))
case "addfield"
  call addfield()
case "editfidlevi"
  call view(request("table_name"))
case "editfidle"
  call editfidle()
case "exit"
  session("dbtype") = ""
  session("dbstr") = ""
  session("db007pass") = ""
  response.redirect "?"
case "tosql"
  call tosql(request("strt"))
case "proc"
  call main("1")
  call showproc()
case "help"
  call help()
case "edit"
  call editdata()
case "reobj"
  call reobj()
end select
%>
</div>
    </td>
  </tr>
</table>
<!--程序界面主表格结束-->
</body>
</html>

申明:本教程内容由威凡网编辑整理并提供IT程序员分享学习,如文中有侵权行为,请与站长联系(QQ:254677821)!
上一节 下一节
相关教程  
其他教程  
ASP基础
应用技巧
数据库相关
ASP类
存储过程
FSO专栏
ASP其他

违法和不良信息举报中心】邮箱:254677821@qq.com
Copyright©威凡网 版权所有 苏ICP备2023020142号
站长QQ:254677821