用纯ASP代码实现图片上传并存入数据库中

源代码在线查看: 实现树型结构.txt

软件大小: 414 K
上传用户: zbcs1025
关键词: 代码 数据库
下载地址: 免注册下载 普通下载 VIP

相关代码

				实现树型结构(一)    
				
				
				--------------------------------------------------------------------------------
				
				 【小菁】 于 00-6-9 上午 09:57:57 加贴在 Joy ASP ↑:
				
				实现树型结构(第一部分)
				作者:ACE      最后更新:06/08/2000      类别:原创
				
				先看一下示例,如果你感觉尚可,就继续阅读本文http://www.coolbel.com/ace/articles/test/msdn.asp。
				
				1. 简述
				
				对于大家来说树型结构是很熟悉的一种模型。它的应用十分广泛,比如组织结构,物料清单,资料档案管理,资产管理等等都是以树型结构为基础。在现实生活中,有许多事物可以抽象为树状结构。这种结构可以简化对某些事物的理解,使概念清晰。
				
				2. 表结构
				
				树型结构的表结构可以很简单也可以很复杂。根据不同的需求,表结构不是一成不变的,读取数据的方法也不尽相同。
				
				我们考虑一种最简单的情况,看下面的示例:
				
				Sample Table
				Child Node        Parent Node           Title              article
				     1                 0                  Program                 0
				     2                 1                Visual Basic              0
				     3                 1                Power Builder             0
				     4                 1                 C++ Builder              0
				     5                 2                 ADO Control              1
				     ..........
				更直观的表示:
				Program
				   |-------Visual Basic
				   |            |------------ADO Control
				   |-------Power Builder
				   |-------C++ Builder
				
				这种结构十分简单,当修改元素间的所属关系时,你只需要修改 Parent Node 就可以了,比如把 ADO Control 作为 Program 的子项,只要将 ADO Control 所对应的 Parent Node 改为1。由此,不难看出这种结构简单,易用。
				
				3. 用存储过程读取数据
				
				如何检索数据,或许是我们最关心的。对于用户来说,在数据的表达上要易于理解。从上面的示例中,就可以看出:直观的表示法比显示数据存储结构更易于理解。
				
				其中的关键在于如何得到元素之间的层次关系,有了层次关系,就能得到类似资源管理器那样的界面。
				
				在这里,我们用存储过程完成该功能。在微软的众多有关 SQL 的文档中,有一段 SQL 代码非常经典,我们本着拿来主义的思想,将它修改一下,洋为中用。
				
				CREATE PROC sp_ListFile(@Child_node int)
				As
				SET NOCOUNT ON
				--declare var
				DECLARE @lvl smallint          --层次关系
				DECLARE @c_ID int
				DECLARE @article bit           --是否为文章的标志
				DECLARE @title varchar(150)    --标题
				
				--create temporary table 
				CREATE TABLE #stack (Child_node int,Lvl smallint)
				
				--create target table
				CREATE TABLE #FileList
				(lvl smallint,
				Child_node_ID int,
				Article bit,
				Title varchar(150) )
				
				--initial
				INSERT INTO #stack VALUES(@Child_node,0)
				SELECT @Lvl = 0
				
				--main loop
				WHILE @Lvl > -1
				BEGIN
				   IF EXISTS(SELECT * FROM #stack WHERE Lvl = @Lvl)
				   BEGIN
				      SELECT @Child_node = Child_node
				      FROM #stack
				      WHERE Lvl = @Lvl
				
				      SELECT @article = article,@title = title
				      FROM some_table
				      WHERE Child_node = @Child_node
				
				      INSERT INTO #FileList
				      VALUES(@Lvl,@Child_node, @article,@title)
				
				      DELETE FROM #stack
				      WHERE Lvl = @Lvl AND Child_node = @Child_node
				
				      INSERT INTO #stack
				            SELECT Child_node,@Lvl + 1
				         FROM some_table
				         WHERE Parent_node = @Child_node
				      IF @@ROWCOUNT > 0
				     SELECT @Lvl = @Lvl + 1
				   END
				   ELSE
				      SELECT @Lvl = @Lvl - 1
				END
				DELETE FROM #FileList
				WHERE Lvl = 0
				SELECT * FROM #FileList
				
				输出结果:
				lvl           Child_node          Article              Title            
				   1             1                   0                    Program
				   2             2                   0                    Visual Basic
				   3             5                   1                    ADO Control
				   2             3                   0                    Power Builder
				   2             4                   0                    C++ Builder
				
				上面的存储过程可以有很多变形,比如按时间排序,指定检索深度等等,有的需要对数据库作相应调整。
				
				4. 调用存储过程
				
				
				调用存储过程有多种形式,我们只讨论如何调用上面的存储过程
				
				Dim cnn
				Dim rs
				Dim id
				
				Set cnn = Server.CreateObject("ADODB.Connection")
				Set rs = Server.CreateObject("ADODB.RecordSet")
				cnn.Open "Provider=SQLOLEDB;.......................略
				rs.Open "sp_listfile " & id,cnn
				
				
				由于 Coolbel 不支持存储过程,我把结果集存为 XML 格式,以便于演示。
				
				
				
				实现树型结构(二)    
				
				
				--------------------------------------------------------------------------------
				
				 【小菁】 于 00-6-9 上午 10:00:27 加贴在 Joy ASP ↑:
				
				实现树型结构(第二部分)
				作者:ACE      最后更新:06/08/2000      类别:原创
				
				在上一部分,我们讨论了如何读取数据,并得到了表示层次关系的结果集。在这一部分,我们来看如何用脚本语言实现类似 MSDN 的界面。
				
				可以在服务器端也可以在客户端完成这样的功能,这就要看需要了。在服务器端完成需要占用服务器的处理时间及相关资源,在客户端完成需要浏览器支持脚本语言(一般是 JavaScript),并要下载执行脚本。
				
				在我们的示例里采用客户端执行脚本的方法。
				
				1. 将数据发送到浏览器
				
				看下列代码:
				
				Dim GetRSString
				Dim cnn
				Dim rs
				Dim l_ID
				l_ID = "1"      '表示根节点
				
				Set cnn = Server.CreateObject("ADODB.Connection")
				Set rs = Server.CreateObject("ADODB.RecordSet")
				cnn.Open "Provider=SQLOLEDB;.......................略
				rs.Open "sp_listfile " & l_ID,cnn
				
				GetRSString = rs.GetString(2,,"?quot;","~~") 'adClipString
				rs.Close
				Set rs = Nothing
				cnn.Close
				Set cnn = Nothing
				
				Response.Write "" &_
				           "" &_
				        "" &_
				        "LoadRecords(" + l_ID + ");"
				
				在上面的代码中,用 GetString 的方法得到了以 ?quot;和~~ 分隔的字符串,并用隐藏表单进行存储。 Listfile.js 里的脚本实现了我们想要得功能,LoadRecords 是其中的一个函数。
				
				2. Listfile.js 中的脚本
				
				这是全部代码:
				
				function ToggleDisplay(oButton, oItems)
				{
				    if ((oItems.style.display == "") || (oItems.style.display == "none"))    {
				        oItems.style.display = "block";
				        oButton.src = book_open.src;
				    }    else {
				            oItems.style.display = "none";
				            oButton.src = book_close.src;
				    }
				    
				}
				function LoadRecords(l_ID)    {
				    var strRecords=document.all("rsCache").value;
				    var arrRecords=strRecords.split("~~");
				    var arrFields;
				    var Current_level;
				    var Current_ID;
				    var strTemp;
				    var strList;
				    var Prior_ID;
				    var Prior_level=-1;
				    var i;
				    var j;
				    Prior_ID=l_ID;
				    strList = "";
				    for (i=0;i				    {
				        arrFields=arrRecords[i].split("?quot;");
				        Current_level = arrFields[0];
				        Current_ID = arrFields[1];
				        if (arrFields[2] == 0)
				        {
				            strTemp = "				                    "' onclick='ToggleDisplay(i_" + Current_ID + ",f_" + 
				                    Current_ID + "_d);' width=31 height=15 style='position:relative;left:" + 
				                    (Current_level*17) + ";top:3;cursor:hand;'> 				                    "' style='position:relative;left:" + (Current_level*17) + 
				                    ";cursor:hand;' onclick='ToggleDisplay(i_" + Current_ID + ",f_" + 
				                    Current_ID + "_d);'>" + arrFields[3] + "				                    Current_ID + "_d' style='display: none;'>";
				            if (Current_level > Prior_level)    
				            {
				                strTemp += "";
				                strList = strList.replace("",strTemp);
				            }
				            else    
				            {
				                if (Current_level == Prior_level)    
				                {
				                    strTemp += "";
				                    strList = strList.replace("",strTemp );
				                }
				                else
				                {
				                    for (j=parseInt(Current_level)+1;j				                    {
				                        strList = strList.replace("","")
				                    } 
				                    strTemp += "";
				                    strList = strList.replace("",strTemp );
				                }
				            }
				        }
				        else    
				        {
				            strTemp = "				            (Current_level*17+20) + ";top:2;cursor:hand;'>  ";
				            strTemp += "				            "' TARGET=MAIN style='position:relative;left:" + (Current_level*17 +16) + 
				            ";cursor:hand;'>" + arrFields[3] + "";
				            if (Current_level > Prior_level)
				                strList = strList.replace("",strTemp);
				            else
				                strList = strList.replace("",strTemp);
				        }
				    
				        Prior_ID = Current_ID;
				        Prior_level = Current_level;
				    }
				    strList += "				        "src='images/plus.gif' id=book_close>				        "src='images/minus.gif' id=book_open> ";
				document.write(strList);
				}
				
				
				终于写完了,大家自己看吧,如果你有更好的主意别望了告诉我。
				
				 
				
				
				http://www.coolbel.com/ace/
				
				
				
				--------------------------------------------------------------------------------
							

相关资源