分享
 
 
 

一个ASP(VBScript)简单SQL语句构建“类”

王朝asp·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

<%@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

%>

演视地址:http://www.6dz.net/portfolio/SQLBuilderForVbs.asp

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有