分享
 
 
 

不通过数据源完全控制MDB数据库

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

<%

' BEGIN USER CONSTANTS

' To just use a DSN, the format is shown on the next line:

'Const DSN_NAME = "DSN=ASP101email"

' Two other samples I used it with. Left in as syntax examples for DSN-less connections

'Const DSN_NAME = "DBQ=C:\InetPub\wwwroot\asp101\samples\database.mdb;Driver={Microsoft Access Driver (*.mdb)};DriverId=25"

'Const DSN_NAME = "DBQ=C:\InetPub\database\donations.mdb;Driver={Microsoft Access Driver (*.mdb)};DriverId=25"

Dim DSN_NAME

DSN_NAME = "DBQ=" & Server.MapPath("db_dsn.mdb") & ";Driver={Microsoft Access Driver (*.mdb)};DriverId=25;"

Const DSN_USER = "username"

Const DSN_PASS = "password"

' Ok, I know these are poorly named constants, so sue me!

' This script can be used without actually setting up a DSN, so

' DSN_NAME as well as the other two constants should really be named

' something more generic like CONNECTION_STRING, CONNECTION_USER, and

' CONNECTION_PASS, but I did it this way without really thinking about

' it and I'm too lazy to change it now. If it bothers you, you do it!

' END USER CONSTANTS

' BEGIN SUBS & FUNCTIONS SECTION

Sub OpenConnection

Set objDC = Server.CreateObject("ADODB.Connection")

objDC.ConnectionTimeout = 15

objDC.CommandTimeout = 30

objDC.Open DSN_NAME, DSN_USER, DSN_PASS

End Sub

Sub OpenRecordset(sType)

Dim sSqlString ' as String - building area for SQL query

Dim sCritOperator ' as String - basically "=" or "LIKE"

Dim sCritDelimiter ' as String - parameter delimiter "", "'", or "#"

Set objRS = Server.CreateObject("ADODB.Recordset")

Select Case sType

Case "ListTables" ' Open RS of the Tables in the DB

Set objRS = objDC.OpenSchema(adSchemaTables)

Case "ViewTable" ' Open the Selected Table

Set objRS = Server.CreateObject("ADODB.Recordset")

objRS.Open "[" & sTableName & "]", objDC, adOpenForwardOnly, adLockReadOnly

Case "DrillDown" ' Open the Recordset built by the selected options

Set objRS = Server.CreateObject("ADODB.Recordset")

' Build Our SQL Statement

sSqlString = "SELECT * FROM [" & sTableName & "]"

' If we're limiting records returned - insert the WHERE Clause into the SQL

If sCritField <> "" Then

' Figure out if we're dealinh with Numeric, Date, or String Values

Select Case iCritDataType

Case adSmallInt, adInteger, adSingle, adDouble, adDecimal, adTinyInt, adUnsignedTinyInt, adUnsignedSmallInt, adUnsignedInt, adBigInt, adUnsignedBigInt, adBinary, adNumeric, adVarBinary, adLongVarBinary, adCurrency, adBoolean

sCritOperator = "="

sCritDelimiter = ""

Case adDate, adDBDate, adDBTime, adDBTimeStamp

sCritOperator = "="

sCritDelimiter = "#"

Case adBSTR, adChar, adWChar, adVarChar, adLongVarChar, adVarWChar, adLongVarWChar

sCritOperator = "LIKE"

sCritDelimiter = "'"

End Select

sSqlString = sSqlString & " WHERE [" & sCritField & "] " & sCritOperator & " " & sCritDelimiter & sCritValue & sCritDelimiter

End If

' If we're sorting - insert the ORDER BY clause

If sSortOrder <> "none" Then

sSqlString = sSqlString & " ORDER BY [" & sSortField & "] " & sSortOrder

End If

sSqlString = sSqlString & ";"

' Open the actual Recordset using a Forward Only Cursor in Read Only Mode

objRS.Open sSqlString, objDC, adOpenForwardOnly, adLockReadOnly

End Select

End Sub

Sub CloseRecordset

objRS.Close

Set objRS = Nothing

End Sub

Sub CloseConnection

objDC.Close

Set objDC = Nothing

End Sub

Sub WriteTitle(sTitle)

Response.Write "<H2>" & sTitle & "</H2>" & vbCrLf

End Sub

Sub WriteTableHeader

Response.Write "<TABLE BORDER=1>" & vbCrLf

End Sub

Sub WriteTableRowOpen

Response.Write "<TR>" & vbCrLf

End Sub

Sub WriteTableCell(bCellIsTitle, sContents)

Response.Write vbTab & "<TD>"

If bCellIsTitle Then Response.Write "<B>"

Response.Write sContents

If bCellIsTitle Then Response.Write "</B>"

Response.Write "</TD>" & vbCrLf

End Sub

Sub WriteTableRowClose

Response.Write "</TR>" & vbCrLf

End Sub

Sub WriteTableFooter

Response.Write "</TABLE>" & vbCrLf

End Sub

' END SUBS & FUNCTIONS SECTION

' BEGIN RUNTIME CODE

' Before I start with the run-time code, let me clear up a few things.

' I've tried (and succeeded I think!) to keep all the actual HTML

' formatting contained within Subs. Hence things should be relatively

' consistent as well as being easy to change if you say want a larger

' border or perhaps a table background color or whatever...

' This, along with my attempts to try and keep my sanity, have resulted

' in a rather large proportion of Sub/Function Calls to actual code.

' Since I'm sure this is probably confusing to many newcomers to ASP

' and/or VB, I've attempted to preface each call with the optional

' Call command. Also any SUB or FUNCTION whose name starts with the

' word "Write" is basically just an encapsulation of some variation of

' a Response.Write command, while the remainder of the name represents

' whatever it happens to write.

' IE. WriteTableRowClose writes the tags used to end (or close) a table row

' The actual HTML is (as usual) pretty vanilla flavored. If you want

' rocky-road or mint ting-a-ling (a marvelous piece of ice cream

' craftsmanship I might add), you'll need to edit the Write functions.

' Just be aware of the fact that any change to a SUB will affect ALL

' uses of it, so check the code before you try and make a change to

' just one cell and end up changing them all!

' Okay enough of my rambling......Onwards to the Code!!!

Dim objDC, objRS ' DataConnection and RecordSet

Dim I ' As Integer - Standard Looping Var

Dim strTemp ' As String - Temporary area for building long strings

Dim sAction ' As String - Action String to choose what to do

Dim sTableName ' As String - ...so we know what to do it to

Dim sSortField ' As String - Field to sort by

Dim sSortOrder ' As String - ...ASC or DESC

Dim sCritField ' As String - Field for DrillDown

Dim sCritValue ' As String - ...Value to compare to

Dim iCritDataType ' As Integer - so we know how to compare

' Note to all you programmers out there!

' IE4 broke this code when my QueryString was named parameter because

' it was converting the &para to the Paragraph sign even though it was

' in the middle of a word and there was no trailing ;. It works great

' in Netscape. Here's another case where IE's efforts to make things

' foolproof ruined the asp code!

' Get all the parameters we'll need

sAction = Request.QueryString("action")

If sAction = "" Then sAction = "ListTables"

sTableName = Request.QueryString("tablename")

sSortField = Request.QueryString("sf")

Select Case LCase(Request.QueryString("so"))

Case "asc"

sSortOrder = "ASC"

Case "desc"

sSortOrder = "DESC"

Case Else

sSortOrder = "none"

End Select

sCritField = Request.QueryString("cf")

If Len(sCritField) = 0 Then sCritField = ""

sCritValue = Request.QueryString("cv")

iCritDataType = Request.QueryString("cdt")

If Len(iCritDataType) <> 0 And IsNumeric(iCritDataType) Then iCritDataType = CInt(iCritDataType)

' Start the actual DB work

' Code common to all choices.

Call OpenConnection

Call OpenRecordset(sAction)

Select Case sAction

Case "ShowDataConnectionProperties" ' Cool to look at but not really part of the sample!

' Fake it out so we don't have problems closing the DB

OpenRecordset("ListTables")

' Get all the DataConn Properties

For I = 0 to objDC.Properties.Count - 1

Response.Write I & " " & objDC.Properties(i).Name & ": " & objDC.Properties(I) & "<BR>" & vbCrLf

Next 'I

Case "ListTables"

Call WriteTitle("Tables")

If Not objRS.EOF Then objRS.MoveFirst

Call WriteTableHeader

Call WriteTableRowOpen

Call WriteTableCell(True, "Table Name")

Call WriteTableRowClose

Do While Not objRS.EOF

If objRS.Fields("TABLE_TYPE") = "TABLE" Then

Call WriteTableRowOpen

Call WriteTableCell(False, "<A HREF=""./db_dsn.asp?action=ViewTable&tablename=" & Server.URLEncode(objRS.Fields("TABLE_NAME")) & """>" & objRS.Fields("TABLE_NAME") & "</A>")

Call WriteTableRowClose

End If

objRS.MoveNext

Loop

Call WriteTableFooter

Case "ViewTable", "DrillDown" ' The same here but in the OpenRecordset SUB they're very different.

Call WriteTitle(sTableName)

If Not objRS.EOF Then objRS.MoveFirst

Call WriteTableHeader

Call WriteTableRowOpen

For I = 0 to objRS.Fields.Count - 1

' Build heading - the "sort by" links

' Was all on the line WriteTableCell line but I split it up for readability

' Field name for the heading

strTemp = objRS.Fields(I).Name

' Begin Anchor for the + Sign

strTemp = strTemp & " (<A HREF=""./db_dsn.asp"

' Set action

strTemp = strTemp & "?action=DrillDown"

' Set table name to current table

strTemp = strTemp & "&tablename=" & Server.URLEncode(sTableName)

' Set criteria field to whatever it currently is

strTemp = strTemp & "&cf=" & Server.URLEncode(sCritField)

' Set criteria value to whatever it currently is

strTemp = strTemp & "&cv=" & Server.URLEncode(sCritValue)

' Set criteria data type to this fields' data type

strTemp = strTemp & "&cdt=" & iCritDataType

' Set sort field to this field

strTemp = strTemp & "&sf=" & Server.URLEncode(objRS.Fields(I).Name)

' Set sort order to this ascending (hence the +)

strTemp = strTemp & "&so=asc"">+</A>"

' End Anchor for the + Sign

' Begin Anchor for the - Sign

' Next 8 lines are basically the same as above except for the sort order (so)

strTemp = strTemp & "/<A HREF=""./db_dsn.asp"

strTemp = strTemp & "?action=DrillDown"

strTemp = strTemp & "&tablename=" & Server.URLEncode(sTableName)

strTemp = strTemp & "&cf=" & Server.URLEncode(sCritField)

strTemp = strTemp & "&cv=" & Server.URLEncode(sCritValue)

strTemp = strTemp & "&cdt=" & iCritDataType

strTemp = strTemp & "&sf=" & Server.URLEncode(objRS.Fields(I).Name)

strTemp = strTemp & "&so=desc"">-</A>)"

' End Anchor for the - Sign

Call WriteTableCell(True, strTemp)

Next 'I

Call WriteTableRowClose

Do While Not objRS.EOF

Call WriteTableRowOpen

For I = 0 to objRS.Fields.Count - 1

If IsNull(objRS.Fields(I).Value) Or objRS.Fields(I).Value = "" Or VarType(objRS.Fields(I).Value)= vbNull Then

strTemp = "&nbsp;"

Else

' These set the drill down values which get passed if you click on any value

strTemp = "<A HREF=""./db_dsn.asp"

strTemp = strTemp & "?action=DrillDown"

strTemp = strTemp & "&tablename=" & Server.URLEncode(sTableName)

strTemp = strTemp & "&cf=" & Server.URLEncode(objRS.Fields(I).Name)

strTemp = strTemp & "&cv=" & Server.URLEncode(objRS.Fields(I).Value)

strTemp = strTemp & "&cdt=" & objRS.Fields(I).Type

strTemp = strTemp & "&sf=" & Server.URLEncode(sSortField)

strTemp = strTemp & "&so=" & sSortOrder & """>"

strTemp = strTemp & objRS.Fields(I).Value

strTemp = strTemp & "</A>"

End If

Call WriteTableCell(False, strTemp)

Next 'I

Call WriteTableRowClose

objRS.MoveNext

Loop

Call WriteTableFooter

End Select

' Close Data Access Objects and free DB variables

Call CloseRecordset

Call CloseConnection

' END RUNTIME CODE

%>

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
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- 王朝網路 版權所有