最初に変数を設定してから、INIT()
<%
を通じてさまざまなタイプのデータベースを選択するなど、いくつかの関数を自分で追加できます。
'エラー時は次へ再開
クラス接続
パブリックコネクス
パブリック DBpath '--------データベース パス
public DBtype '--------データベース タイプ 1 (アクセス) 2 (SqlServer) 3 (拡張可能)
public ConnMethod '----------接続方法 (DSN、非 DSN)
パブリックユーザー
パブリックパス
サブクラス_初期化
End Sub
Sub Init()
ConnStr = "Driver={Microsoft Access Driver (*.mdb)};dbq="&Server.MapPath("Date.mdb")
Set ConnEx = Server.Createobject("ADODB.CONNECTION")
ConnEx.Open ConnStr
CatchError("Class_Terminate")
End Sub
Sub CatchError( Str )
エラーの場合はその後
エラークリア
Class_Terminate()
Response.Write("エラーが発生しました。プログラムは終了します! "&Str&"")
Response.End()
終了の場合
End Sub
'******************************************
'*SQL ステートメントによるレコードの存在の検索はエラーが発生しやすくなります'********************************** ** ******
関数 HasRecordBySql(Sql)
CheckSql(Sql,"R") を呼び出す
ディムRs、HasR
Set Rs = ConnEx.Execute( Sql )
CatchError("HasReordSql")
そうでない場合 (Rs.eof または Rs.bof)
HasR=False
それ以外
HasR=True
終了の場合
Rs.Close
Rs = 何も設定しない
HasRecordBySql = HasR
終了関数
'******************************************
'*ID でレコードが存在するかどうかを検索'***********************************
Function HasRecordById(StrTableName, IntID) )
'CheckValue(IntID, 1)
ディムRs、HasR
Sql = "上位 1 つを選択 * from "&StrTableName&" Where Id = "&IntID
CheckSql(Sql,"R") を呼び出す
Rs = ConnEx.Execute(Sql) を設定します
CatchError("HasRecordByID")
そうでない場合 (Rs.eof または Rs.bof)
HasR=False
それ以外
HasR=True
終了の場合
閉じる
Rs = 何も設定しない
HasRecordById = HasR
終了関数
'**********************************************
'*SQL ステートメントを通じてレコードセットを取得'**************************************** ** *****
関数 GetRsBySql( SQL )
CheckSql(Sql,"R") を呼び出す
ディムRs
Set Rs = Server.CreateObject("Adodb.RecordSet")
Rs.Open SQL、ConnEx、1、1
GetRsBySql = Rs を設定します
終了関数
'********************************************** *
'*特定のフィールドの値を取得'*************************************** ** ****
関数 GetValueBySql( SQL )
CheckSql(Sql,"R") を呼び出す
ディム Rs、戻り値
Rs = ConnEx.Execute(Sql) を設定します
CatchError("GetValueBySql")
そうでない場合 ( Rs.Eof または Rs.Bof )
戻り値 = Rs(0)
それ以外
ReturnValue = "レコードなし"
終了の場合
Rs.Close
Rs = 何も設定しない
GetValueBySql = 戻り値
関数の終了
'============================更新、挿入================ ====
'******************************************** ***
'*SQL を使用してデータを変更する'****************************************** **
関数 UpdateBySql( SQL )
CheckSql(Sql,"w") を呼び出す
ConnEx.Execute(SQL)
CatchError("UpdateBySql")
UpdateBySql = True
終了関数
'********************************************** *
'*SQL ステートメントを使用してデータを挿入'***************************************** **
関数 InsertBySql(SQL)
CheckSql(Sql,"w") を呼び出す
ConnEx.Execute(SQL)
CatchError("InsertBySql")
InsertBySql = True
関数の終了
'======================削除======================
'* ** ****************************************
'*SQL ステートメントによる削除'******************************************* ***** *
関数 DeleteBySql(SQL)
CheckSql(Sql,"D") を呼び出す
ConnEx.Execute(SQL)
CatchError("DeleteBySql")
DeleteBySql = True
終了関数
'********************************************** *
'*SQL ステートメントの権限をチェックし、フラグに従ってステートメントが所有する権限を検出します'****************************** **** *************
Sub CheckSql( SQL , Flag )
Dim StrSql、SinCounts、DouCounts、i
StrSql = Lcase(SQL)
罪の数 = 0
ドゥカウント = 0
i = 1 の場合、Len(StrSql)
Mid(StrSql,i,1) = "'" の場合、SinCounts = SinCounts + 1
Mid(StrSql,i,1) = """" の場合、DouConnts = DouCounts + 1
Next
If (SinCounts Mod 2) <> 0 Or (DouCounts Mod 2) <> 0 Or Instr(StrSql,";") > 0 then
Class_Terminate() を呼び出す
Response.Write("SQL 構文エラー!")
Response.End()
終了の場合
ケース選択フラグ
「R」、「r」の場合:
Instr(StrSql,"delete") > 0 または Instr(StrSql,"update") または Instr(StrSql,"drop") > 0 または Instr(StrSql,"insert") > 0 の場合
Class_Terminate()
Response.Write("権限が不十分です。書き込み操作を実行する権限がありません")
Response.End()
終了の場合
「W」、「w」の場合:
Instr(StrSql,"delete") > 0 または Instr(StrSql,"drop") > 0 または Instr(StrSql,"select") > 0 の場合
Class_Terminate()
Response.Write("権限が不十分です。削除操作を実行する権限がありません")
Response.End()
終了の場合
ケース "D"、"d":
それ以外の場合:
Response.Write("関数 CheckSql フラグ エラー!")
エンドセレクト
End Sub
Sub Class_Terminate
IsEmpty(FriendConn)でない場合は、
FriendConn.Close
FriendConn = なしを設定します
キャッチエラー()
終了の場合
エンドサブ
終了クラス
%>