一个ASP(VBScript)简单SQL语句构建“类”
作者:曾思源 来源:CSDN 发布时间:2008-03-12 07:08:00
标签:类,sql,表单,asp
作用: 构建一些简单的SQL语句,结合在提交表单时使用,可以较方便
<%@LANGUAGE="VBSCRIPT" CODEPAGE="936"%>
<% Option Explicit %>
<% Response.Buffer = True %>
<%
' /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
' ///
' /// 文件名: SQLBuilderForVbs
' /// 作用: 构建一些简单的SQL语句,结合在提交表单时使用,可以较方便
' /// 程式编写者: 曾思源
' /// 说明: 简单SQL语句构建“类”,VBS版,只要保留本注释段,无论是否涉及商业,您可以任意使用,转载或引用
' /// 日期: 2005-1-8
' ///_________________________________________________________________________________________________
' /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
%>
<%
On Error Resume Next
Class QuestStringBuilder
Private objFields
Private strTableName
Private strPKey
Private strPKeySort
Private strCondition
Private aContition()
Private strOperator
Private strLogic
Private blnState
'/-----初始化-----/
Private Sub Class_Initialize()
Set objFields = Server.CreateObject("Scripting.Dictionary")
strTableName = Null
strPKey = Null
strPKeySort = Null
strCondition = Null
ReDim aContition(1)
strOperator = "="
strLogic = " AND "
blnState = False
End Sub
Private Sub Class_Terminate()
Set objFields = Nothing
strTableName = Null
strPKey = Null
strPKeySort = Null
strCondition = Null
Erase aContition
strOperator = Null
strLogic = Null
blnState = False
End Sub
' /----字段名处理----/
Private Function ProcessField(ByVal sField)
ProcessField = "[" & sField & "]"
End Function
' /-----字段值处理-----/
Private Function ProcessValue(ByVal sValue)
Dim tmpType : tmpType = VarType(sValue)
Select Case tmpType
Case 2,3,4,5,11 ' 数字类型,布尔类型
ProcessValue = sValue
Case 8 ' 字符类型
ProcessValue = "'" & Safe(sValue) & "'"
Case Else ' 其它类型
ProcessValue = "'" & Safe(sValue) & "'"
End Select
End Function
' /-----综合处理-----/
Private Function Process(ByRef obj, ByVal strType)
Dim Keys : Keys = obj.Keys
Dim Items : Items = obj.Items
Dim intCount : intCount = obj.Count
Dim tmp()
ReDim tmp(1)
If intCount > 0 Then
Dim tmpArray(), I
ReDim tmpArray(intCount-1)
For I=0 To intCount - 1
tmpArray(I) = Keys(I) & "=" & Items(I)
Next
Select Case UCase(Trim(strType))
Case "UPDATE"
Process = Join(tmpArray, ", ")
Case "SELECT"
Process = Join(Keys, " ,")
Case "INSERT"
tmp(0) = Join(Keys, " ,")
tmp(1) = Join(Items, " ,")
Process = tmp
Erase tmp
End Select
Erase tmpArray
Else
Select Case UCase(Trim(strType))
Case "UPDATE"
Process = False
Case "SELECT"
Process = "*"
Case "INSERT"
Process = tmp
End Select
End If
End Function
' /-----小小的安全处理-----/
Private Function Safe(s)
Safe = Replace(s,"'","''")
End Function
' /-----清空上一次输入的参数,但保留TableName-----/
Public Sub Clear()
objFields.RemoveAll
'strTableName = Null
strPKey = Null
strPKeySort = Null
strCondition = Null
Erase aContition
strOperator = "="
strLogic = " AND "
blnState = False
End Sub
' /----生成查询语句----/
Public Function getSelect()
Dim strSQLTemplate : strSQLTemplate = "SELECT {fields} FROM {table} {conditions} {orderby} {sort}"
strSQLTemplate = Replace(strSQLTemplate, "{fields}", Process(objFields, "SELECT"))
If VarType(strTableName) = 1 Then Exit Function
strSQLTemplate = Replace(strSQLTemplate, "{table}", strTableName)
If VarType(strCondition) <> 1 And strCondition <> "" Then
strSQLTemplate = Replace(strSQLTemplate, "{conditions}", " WHERE " & strCondition)
Else
strSQLTemplate = Replace(strSQLTemplate, "{conditions}", "")
End If
If VarType(strPKey) <> 1 And strPKey <> "" Then
strSQLTemplate = Replace(strSQLTemplate, "{orderby}", " ORDER BY " & strPKey)
Else
strSQLTemplate = Replace(strSQLTemplate, "{orderby}", "")
End If
If VarType(strPKeySort) <> 1 And strPKeySort <> "" Then
strSQLTemplate = Replace(strSQLTemplate, "{sort}", strPKeySort)
Else
strSQLTemplate = Replace(strSQLTemplate, "{sort}", "")
End If
getSelect = strSQLTemplate
blnState = True
End Function
' /----生成插入语句----/
Public Function getInsert()
Dim strSQLTemplate : strSQLTemplate = "INSERT INTO {table}({fields}) VALUES({values})"
If VarType(strTableName) = 1 Then Exit Function
strSQLTemplate = Replace(strSQLTemplate, "{table}", strTableName)
Dim srtInsertContent : srtInsertContent = Process(objFields, "INSERT")
If VarType(srtInsertContent) <> 11 Then
strSQLTemplate = Replace(strSQLTemplate, "{fields}", srtInsertContent(0))
strSQLTemplate = Replace(strSQLTemplate, "{values}", srtInsertContent(1))
Else
Exit Function
End If
getInsert = strSQLTemplate
blnState = True
End Function
' /----生成更新语句----/
Public Function getUpdate()
Dim strSQLTemplate : strSQLTemplate = "UPDATA {table} SET {updatecontent} {conditions}"
If VarType(strTableName) = 1 Then Exit Function
strSQLTemplate = Replace(strSQLTemplate, "{table}", strTableName)
If Process(objFields, "UPDATE") <> False Then
strSQLTemplate = Replace(strSQLTemplate, "{updatecontent}", Process(objFields, "UPDATE"))
Else
strSQLTemplate = Replace(strSQLTemplate, "{updatecontent}", "")
End If
If VarType(strCondition) <> 1 And strCondition <> "" Then
strSQLTemplate = Replace(strSQLTemplate, "{conditions}", " WHERE " & strCondition)
Else
strSQLTemplate = Replace(strSQLTemplate, "{conditions}", "")
End If
getUpdate = strSQLTemplate
blnState = True
End Function
' /----生成删除语句----/
Public Function getDelete()
Dim strSQLTemplate : strSQLTemplate = "DELETE FROM {table} {conditions}"
If VarType(strTableName) = 1 Then Exit Function
strSQLTemplate = Replace(strSQLTemplate, "{table}", strTableName)
If VarType(strCondition) <> 1 And strCondition <> "" Then
strSQLTemplate = Replace(strSQLTemplate, "{conditions}", " WHERE " & strCondition)
Else
strSQLTemplate = Replace(strSQLTemplate, "{conditions}", "")
End If
getDelete = strSQLTemplate
blnState = True
End Function
' /----生成取记录数语句----/
Public Function getCount()
Dim strSQLTemplate : strSQLTemplate = "SELECT COUNT(*) FROM {table} {conditions}"
If VarType(strTableName) = 1 Then Exit Function
strSQLTemplate = Replace(strSQLTemplate, "{table}", strTableName)
If VarType(strCondition) <> 1 And strCondition <> "" Then
strSQLTemplate = Replace(strSQLTemplate, "{conditions}", " WHERE " & strCondition)
Else
strSQLTemplate = Replace(strSQLTemplate, "{conditions}", "")
End If
getCount = strSQLTemplate
blnState = True
End Function
' /----添加处理字段及相应值----/
Public Sub AddField(ByVal sField, ByVal sValue)
If VarType(sField) = 8 And Len(sField) > 0 And (VarType(sValue) = 8 Or VarType(sValue) <> 1) Then
objFields.Add ProcessField(sField), ProcessValue(sValue)
End If
End Sub
' /----添加条件字段及相应值----/
Public Sub AddCField(ByVal sField, ByVal sValue)
If VarType(sField) = 8 And Len(sField) > 0 And VarType(sValue) = 8 And Len(sValue) > 0 Then
Dim strCDTemplate : strCDTemplate = "{Field}{Operator}{value}"
strCDTemplate = Replace(strCDTemplate,"{Field}", ProcessField(sField))
strCDTemplate = Replace(strCDTemplate,"{Operator}"," " & strOperator & " ")
If UCase(strOperator) = "LIKE" Then
strCDTemplate = Replace(strCDTemplate,"{value}","'%" & Safe(sValue) & "%'")
Else
strCDTemplate = Replace(strCDTemplate,"{value}",ProcessValue(sValue))
End If
If VarType(strCondition) = 1 Then
ReDim aContition(0)
aContition(0) = strCDTemplate
strCondition = Join(aContition, strLogic)
Else
strCondition = aContition(0)
ReDim aContition(1)
aContition(0) = strCondition
aContition(1) = strCDTemplate
strCondition = Join(aContition, strLogic)
aContition(0) = strCondition
End If
'Response.Write strCondition & "<br>"
End If
End Sub
' /----指定表名或视图名----/
Public Property Let Table(ByVal s)
If VarType(s) = 8 And Len(s) > 0 Then strTableName = "[" & s & "]"
End Property
' /----设定主键----/
Public Property Let PrimaryKey(ByVal s)
If VarType(s) = 8 And Len(s) > 0 Then strPKey = "[" & s & "]"
End Property
' /----主键排序----/
Public Property Let Sort(ByVal s)
If VarType(s) = 8 And Len(s) > 0 Then strPKeySort = UCase(s)
End Property
' /----更改条件子句操作符----/
Public Property Let Operator(ByVal s)
If VarType(s) = 8 And Len(s) > 0 Then strOperator = UCase(s)
End Property
' /----更改条件子句逻辑----/
Public Property Let Logic(ByVal s)
If VarType(s) = 8 And Len(s) > 0 Then strLogic = " " & UCase(s) & " "
End Property
' /----返回返执行状态----/
Public Property Get ActionState
ActionState = blnState
End Property
End Class
演视开始,程序使用方法:
Dim sql, T1, T2
T1 = Timer()
Set sql = New QuestStringBuilder
sql.AddField "FRemark", "这是一个备注"
sql.AddField "FName", "思源"
sql.AddField "FCode", 120245
sql.Operator = "<"
sql.AddCField "FID", 1000
sql.Logic = "or"
sql.Operator = "like"
sql.AddCField "FFriend", "思源"
sql.Table = "FriendShip"
sql.PrimaryKey = "FID"
sql.Sort = "desc"
Response.Write "<pre>"
Response.Write "<font color=blue>基于ASP(VBS版)的简单SQL语句生成“类”:</font>"
Response.Write "<br>" & vbCrLf
Response.Write "查询语句:<font color=#666666>" & Sql.getSelect() & "</font>"
Response.Write "<br>" & vbCrLf
Response.Write "插入语句:<font color=#666666>" & Sql.getInsert() & "</font>"
Response.Write "<br>" & vbCrLf
Response.Write "更新语句:<font color=#666666>" & Sql.getUpdate() & "</font>"
Response.Write "<br>" & vbCrLf
Response.Write "删除语句:<font color=#666666>" & Sql.getDelete() & "</font>"
Response.Write "<br>" & vbCrLf
Response.Write "取记录数:<font color=#666666>" & Sql.getCount() & "</font>"
'sql.Clear()
Response.Write "<br>" & vbCrLf
Response.Write "生成SQL语句是否成功:<font color=#666666>" & sql.ActionState & "</font>"
Set sql = Nothing
T2 = Timer()
Response.Write "<br>" & vbCrLf
Response.Write "程式执行时间:<font color=#666666>" & (T2 - T2)*1000 & " 晕这个时间好像算不出来啊-_-!</font>"
Response.Write "<br>" & vbCrLf
Response.Write "程式作者:<font color=#666666>阿汉(思源)</font>"
Response.Write "</pre>"
Response.Write Err.Description
%>


猜你喜欢
- 首先:确认自己安装有python(没有安装的同学可自行安装,这里我们不过多赘述)确认安装有python之后,win+r打开cmd窗口,输入p
- 下面我们用HTML来上传3个文件看看,它包含了文本描述字段和多项选择:upload.htm<HTML> <BOD
- 一、使用PyChram的正则首先,小编讲的不是爬取ip,而是讲了解PyCharm的正则,这里讲的正则不是Python的re模块哈!而是PyC
- 存储过程采用的是select top 加 not in的方式完成,速度也算是相当快了 我测试过了百万级数据量一般查询在1秒一下,贴出来大家交
- 在互联网出现之前,“抄”很不方便,一是“源”少,而是发布渠道少;而在互联网出现之后,“抄”变得很简单,铺天盖地的“源”源源不断,发布渠道也数
- 环境介绍python3.8numpymatplotlib第一步,绘制一个三维的爱心关于这一步,我采用的是大佬博客中的最后一种绘制方法。当然,
- 一、爬虫是什么? 在进行大数据分析或者进行数据挖掘的时候,数据源可以从某些提供数据统计的网站获得,也可以从某些文献或内部资料中获得
- 有很多种方法来实现图片的预加载,通常大部分使用Javascript让事情滚动。不要再受Javascript预载的束缚了吧,用CSS你就可以毫
- settings文件中配置:LOGGING = { 'version':1, 'disabl
- 如下所示:from sklearn.datasets import load_bostonboston = load_boston()fro
- 很久没有上过天极网,今天偶然兴起跑上去看了一下,看到消息说天极网深圳站隆重上线,于是也顺便去溜了一把,打开页面的时候差点有种不知所措的感觉,
- GO 语言的 for…range 能做什么呢?for…range 如何使用 ?for…range 的返回
- python自带的IDLE使用起来非常方便,尤其是在编写调试小段代码的时候,但是安装了Anaconda的同志可能会发现,无法像直接安装pyt
- 前言:之前自己做一个uni-app的项目的时候前端需要实现一个比较复杂的动态tab和swiper切换的功能,但是由于自己前端抠脚的原因没有写
- 什么是pyQt5首先我们来说说什么是pyQt5。搞过GUI界面设计的童鞋一定都了解过微软的MFC。当然了,个人感觉MFC不是一个非常优雅的U
- 一、增强的可扩展性 Oracle9i Real Application Clusters是Oracle的下一代并行服务器系列产品。Oracl
- 简介:外部连接和自联接inner join(等值连接) 只返回两个表中联结字段相等的行left join(左联接) 返回包括左表中的所有记录
- RocketMQ 是什么Github 上关于 RocketMQ 的介绍:RcoketMQ 是一款低延迟、高可靠、可伸缩、易于使用的消息中间件
- 在使用Django2.0 并配置了mysql作为数据库时,启动报错:报错1:找不到mysqlclientdjango.core.except
- random.randomrandom.random()用于生成一个0到1的随机符点数: 0 <= n < 1.0random.