ASP 操作数据库的一个数据库类文件 CDatabase.asp

为了能在世界各地方便地管理服务器上的数据库,我建立了一个基于网页的数据库管理系统。

为了能方便地对数据库进行操作,我建立了一个基于ASP的数据库类。用来封装与数据库相关的常用操作,如连接数据库,关闭数据库连接,获取一个查询记录,或者执行指定的SQL语句等。

代码如下:

<!--#include file="adovbs.inc"-->
<%
'
' Author:       Jeff Tian, admin@myfootprints.cn
'

'#* Using ../inc/adovbs.inc *#
Class CError
    Public Number
    Public Description
    Public Source
    
    Public Sub CopyErrorObject(oErr)
        Number = oErr.number
        Description = oErr.Description
        Source = oErr.Source
    End Sub
End Class

Class CDatabase
    ' 数据库连接对象
    Public oConn
    ' 数据集对象
    Public oRS
    ' 错误对象,用来记录最近的一次错误
    Public oError

    Private Sub Class_Initialize()
        Set oConn = CreateObject("ADODB.Connection")
        Set oRS = CreateObject("ADODB.Recordset")
        Set oError = New CError
    End Sub

    Private Sub Class_Terminate()
        CloseRecordset
        Disconnect
        Set oConn = Nothing
        Set oRS = Nothing
        Set oError = Nothing
    End Sub

    '
    ' 获取数据集对象的记录数
    '
    Public Property Get RecordCount()
        If Me.oRS.State > 0 Then
            RecordCount = Me.oRS.RecordCount
        Else
            RecordCount = 0
        End If
    End Property
    
    '
    ' 将游标回到记录集的第一行
    '
    Public Sub MoveFirst()
        If Me.oRS.State > 0 Then
            If Me.oRS.RecordCount > 0 Then
                Me.oRS.MoveFirst
            End If
        End If
    End Sub

    '
    ' 获取连接SQL Server数据库的字符串
    '
    Public Function GetConnectionString2SQLServer(ByVal sIP, ByVal sUID, ByVal sPwd, ByVal sDB)
        GetConnectionString2SQLServer = "Driver={SQL Server};Server=" & sIP & ";UID=" & sUID & ";PWD=" & sPWD & ";database=" & sDB & ";"
    End Function

    '
    ' Get base connection string syntax.
    '
    Public Function GetBaseConnectionString2SQLServer(ByVal sIP, ByVal sDB)
        GetBaseConnectionString2SQLServer = "Provider=SQLOLEDB;" & _
                                            "Data Source=" & sIP & ";" & _
                                            "Initial Catalog=" & sDB & ";"
    End Function

    '
    ' Get standard security connection string
    '
    Public Function GetStandardSecurityConnectionString2SQLServer(ByVal sIP, ByVal sUID, ByVal sPwd, ByVal sDB)
        GetStandardSecurityConnectionString2SQLServer = "Provider=SQLOLEDB;" & _
                                                        "Data Source=" & sIP & ";" & _
                                                        "Initial Catalog=" & sDB & ";" & _
                                                        "User ID=" & sUID & ";" & _
                                                        "Password=" & sPwd & ";"
    End Function

    '
    ' Get Windows integrated security connection string
    '
    Public Function GetWindowsIntegratedSecurityConnectionString2SQLServer(ByVal sIP, ByVal sDB)
        GetWindowsIntegratedSecurityConnectionString2SQLServer = "Provider=SQLOLEDB;" & _
                                                                    "Data Source=" & sIP & ";" & _
                                                                    "Initial Catalog=" & sDB & ":" & _
                                                                    "Integrated Security=SSIP"
    End Function

    '
    ' Get an ADO connection string to Access database.
    '
    Public Function GetADOConnectionString2Access(ByVal sDBPath, ByVal sUID, ByVal sPwd)
        GetADOConnectionString2Access = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
                                        "Data Source=" & sDBPath & ";" & _
                                        "User ID=" & sUID & ";" & _
                                        "Password=" & sPwd & ";"
    End Function

    '
    ' Get an ADO Connection String to an Excel workbook
    '
    Public Function GetADOConnectionString2Excel(ByVal sDBPath)
        GetADOConnectionString2Excel = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
                                        "Data Source=" & sDBPath & ";" & _
                                        "Extended Properties=""Excel 8.0;HDR=YES"";"
    End Function

    '
    ' Get an DBQ Connection String to an MSAccess
    '
    Public Function GetDBQConnectionString2Access(ByVal sDBPath, ByVal sUID, ByVal sPwd)
        GetDBQConnectionString2Access = "Driver={Microsoft Access Driver (*.mdb)};Dbq=" & sDBPath & ";Uid=" & sUID & ";Pwd=" & sPwd & ";"
    End Function

    '
    ' Connect to Access
    '
    Public Function Connect2Access(ByVal sDBPath, ByVal sUID, ByVal sPwd)
        Const sSOURCE = "Connect2Acess()"
    On Error Resume Next
            ' 如果不是关闭状态,则先关闭它
            If oConn.State <> adStateClosed Then
                Me.Disconnect
            End If
            Me.oConn.Open GetDBQConnectionString2Access(sDBPath, sUID, sPwd)
    'ErrorExit:
            Connect2Access = oConn.State
            Exit Function
    End Function

    '
    ' 连接到SQL Server
    '
    Public Function Connect2SQLServer(ByVal sIP, ByVal sUID, ByVal sPwd, ByVal sDB)
        Const sSOURCE = "Connect2SQLServer()"
        'On Error Resume Next
            ' 如果不是关闭状态,则先关闭
            If oConn.State <> adStateClosed Then
                Me.Disconnect
            End If
            oConn.Open GetConnectionString2SQLServer(sIP, sUID, sPwd, sDB)
    ErrorExit:
        ' 将数据库连接对象的状态值作为返回值
            Connect2SQLServer = oConn.State
            Exit Function
    End Function

    '
    ' 从当前SQL Server连接断开
    '
    Public Function Disconnect()
        If oConn.State <> adStateClosed Then
            oConn.Close
        End If
        Disconnect = oConn.State
    End Function

    '
    ' 执行查询
    '
    Public Function OpenRecordset(ByVal sSQL)
        ' 当数据集对象不是关闭状态时,先关闭
        CloseRecordset
        ' 当数据库连接对象是关闭状态时,不能打开
        If oConn.State = adStateClosed Then
            OpenRecordset = oConn.State
            Exit Function
        End If
        On Error Resume Next
        oRS.Open sSQL, oConn, AdOpenKeyset, AdLockReadOnly
        If Err.number <> 0 Then
            oError.CopyErrorObject Err
        End If
        On Error Goto 0
        OpenRecordset = oRS.State
    End Function
    
    '
    ' 执行查询,不指定Cursor类型和Lock类型
    ' 
    Public Function OpenRecordsetWithoutCursorAndLockType(ByVal sSQL)
        CloseRecordset
        If oConn.State = adStateClosed Then
            OpenRecordsetWithoutCursorAndLockType = oConn.State
            Exit Function
        End If
        On Error Resume Next
        oRS.Open sSQL, oConn
        If Err.number <> 0 Then
            oError.CopyErrorObject Err
        End If
        On Error Goto 0
        OpenRecordsetWithoutCursorAndLockType = oRS.State
    End Function

    '
    ' HTML格式化错误信息
    '
    Public Function FormatError(oError)
        dim sErr
        
        sErr = "错误号: " & oError.Number
        sErr = sErr & "错误描述: " & oError.Description
        
        FormatError = sErr
    End Function

    '
    ' 执行指定的SQL语句
    '
    Public Function Execute(ByRef sSQL, ByRef lRecordsAffected)
        If oConn.State = adStateClosed Then
            Execute = Me.oConn.State
            Exit Function
        End If
        
        On Error Resume Next
        Set Me.oRS = Me.oConn.Execute(sSQL, lRecordsAffected)
        If Err.number <> 0 Then
            oError.CopyErrorObject Err
        End If
        On Error Goto 0
        Execute = Me.oConn.State
        Exit Function
    End Function

    '
    ' 关闭数据集
    '
    Public Function CloseRecordset()
        If oRS.State <> adStateClosed Then
            oRS.Close
        End If
        
        CloseRecordset = oRS.State
    End Function

    '
    ' 输出数据集
    ' 本想用回调函数,可是在VB里实现起来很困难
    '
    'Public Function OutputRecordset(ByVal CallBack, ByRef vDest)
    '    If orS.State = adStateClosed Then
    '        OutputRecordset = orS.State
    '        Exit Function
    '    Else
    '        CallBack orS, vDest
    '    End If
    'End Function
End Class
%>

其中有用到一个常用的常量集合,即包含文件adovbs.inc。该文件的源代码为:

<%
'--------------------------------------------------------------------
' Microsoft ADO
'
' Copyright (c) 1996-1998 Microsoft Corporation.
'
'
'
' ADO constants include file for VBScript
'
'--------------------------------------------------------------------

'---- CursorTypeEnum Values ----
Const adOpenForwardOnly = 0
Const adOpenKeyset = 1
Const adOpenDynamic = 2
Const adOpenStatic = 3

'---- CursorOptionEnum Values ----
Const adHoldRecords = &H00000100
Const adMovePrevious = &H00000200
Const adAddNew = &H01000400
Const adDelete = &H01000800
Const adUpdate = &H01008000
Const adBookmark = &H00002000
Const adApproxPosition = &H00004000
Const adUpdateBatch = &H00010000
Const adResync = &H00020000
Const adNotify = &H00040000
Const adFind = &H00080000
Const adSeek = &H00400000
Const adIndex = &H00800000

'---- LockTypeEnum Values ----
Const adLockReadOnly = 1
Const adLockPessimistic = 2
Const adLockOptimistic = 3
Const adLockBatchOptimistic = 4

'---- ExecuteOptionEnum Values ----
Const adAsyncExecute = &H00000010
Const adAsyncFetch = &H00000020
Const adAsyncFetchNonBlocking = &H00000040
Const adExecuteNoRecords = &H00000080
Const adExecuteStream = &H00000400

'---- ConnectOptionEnum Values ----
Const adAsyncConnect = &H00000010

'---- ObjectStateEnum Values ----
Const adStateClosed = &H00000000
Const adStateOpen = &H00000001
Const adStateConnecting = &H00000002
Const adStateExecuting = &H00000004
Const adStateFetching = &H00000008

'---- CursorLocationEnum Values ----
Const adUseServer = 2
Const adUseClient = 3

'---- DataTypeEnum Values ----
Const adEmpty = 0
Const adTinyInt = 16
Const adSmallInt = 2
Const adInteger = 3
Const adBigInt = 20
Const adUnsignedTinyInt = 17
Const adUnsignedSmallInt = 18
Const adUnsignedInt = 19
Const adUnsignedBigInt = 21
Const adSingle = 4
Const adDouble = 5
Const adCurrency = 6
Const adDecimal = 14
Const adNumeric = 131
Const adBoolean = 11
Const adError = 10
Const adUserDefined = 132
Const adVariant = 12
Const adIDispatch = 9
Const adIUnknown = 13
Const adGUID = 72
Const adDate = 7
Const adDBDate = 133
Const adDBTime = 134
Const adDBTimeStamp = 135
Const adBSTR = 8
Const adChar = 129
Const adVarChar = 200
Const adLongVarChar = 201
Const adWChar = 130
Const adVarWChar = 202
Const adLongVarWChar = 203
Const adBinary = 128
Const adVarBinary = 204
Const adLongVarBinary = 205
Const adChapter = 136
Const adFileTime = 64
Const adPropVariant = 138
Const adVarNumeric = 139
Const adArray = &H2000

'---- FieldAttributeEnum Values ----
Const adFldMayDefer = &H00000002
Const adFldUpdatable = &H00000004
Const adFldUnknownUpdatable = &H00000008
Const adFldFixed = &H00000010
Const adFldIsNullable = &H00000020
Const adFldMayBeNull = &H00000040
Const adFldLong = &H00000080
Const adFldRowID = &H00000100
Const adFldRowVersion = &H00000200
Const adFldCacheDeferred = &H00001000
Const adFldIsChapter = &H00002000
Const adFldNegativeScale = &H00004000
Const adFldKeyColumn = &H00008000
Const adFldIsRowURL = &H00010000
Const adFldIsDefaultStream = &H00020000
Const adFldIsCollection = &H00040000

'---- EditModeEnum Values ----
Const adEditNone = &H0000
Const adEditInProgress = &H0001
Const adEditAdd = &H0002
Const adEditDelete = &H0004

'---- RecordStatusEnum Values ----
Const adRecOK = &H0000000
Const adRecNew = &H0000001
Const adRecModified = &H0000002
Const adRecDeleted = &H0000004
Const adRecUnmodified = &H0000008
Const adRecInvalid = &H0000010
Const adRecMultipleChanges = &H0000040
Const adRecPendingChanges = &H0000080
Const adRecCanceled = &H0000100
Const adRecCantRelease = &H0000400
Const adRecConcurrencyViolation = &H0000800
Const adRecIntegrityViolation = &H0001000
Const adRecMaxChangesExceeded = &H0002000
Const adRecObjectOpen = &H0004000
Const adRecOutOfMemory = &H0008000
Const adRecPermissionDenied = &H0010000
Const adRecSchemaViolation = &H0020000
Const adRecDBDeleted = &H0040000

'---- GetRowsOptionEnum Values ----
Const adGetRowsRest = -1

'---- PositionEnum Values ----
Const adPosUnknown = -1
Const adPosBOF = -2
Const adPosEOF = -3

'---- BookmarkEnum Values ----
Const adBookmarkCurrent = 0
Const adBookmarkFirst = 1
Const adBookmarkLast = 2

'---- MarshalOptionsEnum Values ----
Const adMarshalAll = 0
Const adMarshalModifiedOnly = 1

'---- AffectEnum Values ----
Const adAffectCurrent = 1
Const adAffectGroup = 2
Const adAffectAllChapters = 4

'---- ResyncEnum Values ----
Const adResyncUnderlyingValues = 1
Const adResyncAllValues = 2

'---- CompareEnum Values ----
Const adCompareLessThan = 0
Const adCompareEqual = 1
Const adCompareGreaterThan = 2
Const adCompareNotEqual = 3
Const adCompareNotComparable = 4

'---- FilterGroupEnum Values ----
Const adFilterNone = 0
Const adFilterPendingRecords = 1
Const adFilterAffectedRecords = 2
Const adFilterFetchedRecords = 3
Const adFilterConflictingRecords = 5

'---- SearchDirectionEnum Values ----
Const adSearchForward = 1
Const adSearchBackward = -1

'---- PersistFormatEnum Values ----
Const adPersistADTG = 0
Const adPersistXML = 1

'---- StringFormatEnum Values ----
Const adClipString = 2

'---- ConnectPromptEnum Values ----
Const adPromptAlways = 1
Const adPromptComplete = 2
Const adPromptCompleteRequired = 3
Const adPromptNever = 4

'---- ConnectModeEnum Values ----
Const adModeUnknown = 0
Const adModeRead = 1
Const adModeWrite = 2
Const adModeReadWrite = 3
Const adModeShareDenyRead = 4
Const adModeShareDenyWrite = 8
Const adModeShareExclusive = &Hc
Const adModeShareDenyNone = &H10
Const adModeRecursive = &H400000

'---- RecordCreateOptionsEnum Values ----
Const adCreateCollection = &H00002000
Const adCreateStructDoc = &H80000000
Const adCreateNonCollection = &H00000000
Const adOpenIfExists = &H02000000
Const adCreateOverwrite = &H04000000
Const adFailIfNotExists = -1

'---- RecordOpenOptionsEnum Values ----
Const adOpenRecordUnspecified = -1
Const adOpenOutput = &H00800000
Const adOpenAsync = &H00001000
Const adDelayFetchStream = &H00004000
Const adDelayFetchFields = &H00008000
Const adOpenExecuteCommand = &H00010000

'---- IsolationLevelEnum Values ----
Const adXactUnspecified = &Hffffffff
Const adXactChaos = &H00000010
Const adXactReadUncommitted = &H00000100
Const adXactBrowse = &H00000100
Const adXactCursorStability = &H00001000
Const adXactReadCommitted = &H00001000
Const adXactRepeatableRead = &H00010000
Const adXactSerializable = &H00100000
Const adXactIsolated = &H00100000

'---- XactAttributeEnum Values ----
Const adXactCommitRetaining = &H00020000
Const adXactAbortRetaining = &H00040000

'---- PropertyAttributesEnum Values ----
Const adPropNotSupported = &H0000
Const adPropRequired = &H0001
Const adPropOptional = &H0002
Const adPropRead = &H0200
Const adPropWrite = &H0400

'---- ErrorValueEnum Values ----
Const adErrProviderFailed = &Hbb8
Const adErrInvalidArgument = &Hbb9
Const adErrOpeningFile = &Hbba
Const adErrReadFile = &Hbbb
Const adErrWriteFile = &Hbbc
Const adErrNoCurrentRecord = &Hbcd
Const adErrIllegalOperation = &Hc93
Const adErrCantChangeProvider = &Hc94
Const adErrInTransaction = &Hcae
Const adErrFeatureNotAvailable = &Hcb3
Const adErrItemNotFound = &Hcc1
Const adErrObjectInCollection = &Hd27
Const adErrObjectNotSet = &Hd5c
Const adErrDataConversion = &Hd5d
Const adErrObjectClosed = &He78
Const adErrObjectOpen = &He79
Const adErrProviderNotFound = &He7a
Const adErrBoundToCommand = &He7b
Const adErrInvalidParamInfo = &He7c
Const adErrInvalidConnection = &He7d
Const adErrNotReentrant = &He7e
Const adErrStillExecuting = &He7f
Const adErrOperationCancelled = &He80
Const adErrStillConnecting = &He81
Const adErrInvalidTransaction = &He82
Const adErrUnsafeOperation = &He84
Const adwrnSecurityDialog = &He85
Const adwrnSecurityDialogHeader = &He86
Const adErrIntegrityViolation = &He87
Const adErrPermissionDenied = &He88
Const adErrDataOverflow = &He89
Const adErrSchemaViolation = &He8a
Const adErrSignMismatch = &He8b
Const adErrCantConvertvalue = &He8c
Const adErrCantCreate = &He8d
Const adErrColumnNotOnThisRow = &He8e
Const adErrURLIntegrViolSetColumns = &He8f
Const adErrURLDoesNotExist = &He8f
Const adErrTreePermissionDenied = &He90
Const adErrInvalidURL = &He91
Const adErrResourceLocked = &He92
Const adErrResourceExists = &He93
Const adErrCannotComplete = &He94
Const adErrVolumeNotFound = &He95
Const adErrOutOfSpace = &He96
Const adErrResourceOutOfScope = &He97
Const adErrUnavailable = &He98
Const adErrURLNamedRowDoesNotExist = &He99
Const adErrDelResOutOfScope = &He9a
Const adErrPropInvalidColumn = &He9b
Const adErrPropInvalidOption = &He9c
Const adErrPropInvalidValue = &He9d
Const adErrPropConflicting = &He9e
Const adErrPropNotAllSettable = &He9f
Const adErrPropNotSet = &Hea0
Const adErrPropNotSettable = &Hea1
Const adErrPropNotSupported = &Hea2
Const adErrCatalogNotSet = &Hea3
Const adErrCantChangeConnection = &Hea4
Const adErrFieldsUpdateFailed = &Hea5
Const adErrDenyNotSupported = &Hea6
Const adErrDenyTypeNotSupported = &Hea7
Const adErrProviderNotSpecified = &Hea9
Const adErrConnectionStringTooLong = &Heaa

'---- ParameterAttributesEnum Values ----
Const adParamSigned = &H0010
Const adParamNullable = &H0040
Const adParamLong = &H0080

'---- ParameterDirectionEnum Values ----
Const adParamUnknown = &H0000
Const adParamInput = &H0001
Const adParamOutput = &H0002
Const adParamInputOutput = &H0003
Const adParamReturnValue = &H0004

'---- CommandTypeEnum Values ----
Const adCmdUnknown = &H0008
Const adCmdText = &H0001
Const adCmdTable = &H0002
Const adCmdStoredProc = &H0004
Const adCmdFile = &H0100
Const adCmdTableDirect = &H0200

'---- EventStatusEnum Values ----
Const adStatusOK = &H0000001
Const adStatusErrorsOccurred = &H0000002
Const adStatusCantDeny = &H0000003
Const adStatusCancel = &H0000004
Const adStatusUnwantedEvent = &H0000005

'---- EventReasonEnum Values ----
Const adRsnAddNew = 1
Const adRsnDelete = 2
Const adRsnUpdate = 3
Const adRsnUndoUpdate = 4
Const adRsnUndoAddNew = 5
Const adRsnUndoDelete = 6
Const adRsnRequery = 7
Const adRsnResynch = 8
Const adRsnClose = 9
Const adRsnMove = 10
Const adRsnFirstChange = 11
Const adRsnMoveFirst = 12
Const adRsnMoveNext = 13
Const adRsnMovePrevious = 14
Const adRsnMoveLast = 15

'---- SchemaEnum Values ----
Const adSchemaProviderSpecific = -1
Const adSchemaAsserts = 0
Const adSchemaCatalogs = 1
Const adSchemaCharacterSets = 2
Const adSchemaCollations = 3
Const adSchemaColumns = 4
Const adSchemaCheckConstraints = 5
Const adSchemaConstraintColumnUsage = 6
Const adSchemaConstraintTableUsage = 7
Const adSchemaKeyColumnUsage = 8
Const adSchemaReferentialConstraints = 9
Const adSchemaTableConstraints = 10
Const adSchemaColumnsDomainUsage = 11
Const adSchemaIndexes = 12
Const adSchemaColumnPrivileges = 13
Const adSchemaTablePrivileges = 14
Const adSchemaUsagePrivileges = 15
Const adSchemaProcedures = 16
Const adSchemaSchemata = 17
Const adSchemaSQLLanguages = 18
Const adSchemaStatistics = 19
Const adSchemaTables = 20
Const adSchemaTranslations = 21
Const adSchemaProviderTypes = 22
Const adSchemaViews = 23
Const adSchemaViewColumnUsage = 24
Const adSchemaViewTableUsage = 25
Const adSchemaProcedureParameters = 26
Const adSchemaForeignKeys = 27
Const adSchemaPrimaryKeys = 28
Const adSchemaProcedureColumns = 29
Const adSchemaDBInfoKeywords = 30
Const adSchemaDBInfoLiterals = 31
Const adSchemaCubes = 32
Const adSchemaDimensions = 33
Const adSchemaHierarchies = 34
Const adSchemaLevels = 35
Const adSchemaMeasures = 36
Const adSchemaProperties = 37
Const adSchemaMembers = 38
Const adSchemaTrustees = 39
Const adSchemaFunctions = 40
Const adSchemaActions = 41
Const adSchemaCommands = 42
Const adSchemaSets = 43

'---- FieldStatusEnum Values ----
Const adFieldOK = 0
Const adFieldCantConvertValue = 2
Const adFieldIsNull = 3
Const adFieldTruncated = 4
Const adFieldSignMismatch = 5
Const adFieldDataOverflow = 6
Const adFieldCantCreate = 7
Const adFieldUnavailable = 8
Const adFieldPermissionDenied = 9
Const adFieldIntegrityViolation = 10
Const adFieldSchemaViolation = 11
Const adFieldBadStatus = 12
Const adFieldDefault = 13
Const adFieldIgnore = 15
Const adFieldDoesNotExist = 16
Const adFieldInvalidURL = 17
Const adFieldResourceLocked = 18
Const adFieldResourceExists = 19
Const adFieldCannotComplete = 20
Const adFieldVolumeNotFound = 21
Const adFieldOutOfSpace = 22
Const adFieldCannotDeleteSource = 23
Const adFieldReadOnly = 24
Const adFieldResourceOutOfScope = 25
Const adFieldAlreadyExists = 26
Const adFieldPendingInsert = &H10000
Const adFieldPendingDelete = &H20000
Const adFieldPendingChange = &H40000
Const adFieldPendingUnknown = &H80000
Const adFieldPendingUnknownDelete = &H100000

'---- SeekEnum Values ----
Const adSeekFirstEQ = &H1
Const adSeekLastEQ = &H2
Const adSeekAfterEQ = &H4
Const adSeekAfter = &H8
Const adSeekBeforeEQ = &H10
Const adSeekBefore = &H20

'---- ADCPROP_UPDATECRITERIA_ENUM Values ----
Const adCriteriaKey = 0
Const adCriteriaAllCols = 1
Const adCriteriaUpdCols = 2
Const adCriteriaTimeStamp = 3

'---- ADCPROP_ASYNCTHREADPRIORITY_ENUM Values ----
Const adPriorityLowest = 1
Const adPriorityBelowNormal = 2
Const adPriorityNormal = 3
Const adPriorityAboveNormal = 4
Const adPriorityHighest = 5

'---- ADCPROP_AUTORECALC_ENUM Values ----
Const adRecalcUpFront = 0
Const adRecalcAlways = 1

'---- ADCPROP_UPDATERESYNC_ENUM Values ----
Const adResyncNone = 0
Const adResyncAutoIncrement = 1
Const adResyncConflicts = 2
Const adResyncUpdates = 4
Const adResyncInserts = 8
Const adResyncAll = 15

'---- MoveRecordOptionsEnum Values ----
Const adMoveUnspecified = -1
Const adMoveOverWrite = 1
Const adMoveDontUpdateLinks = 2
Const adMoveAllowEmulation = 4

'---- CopyRecordOptionsEnum Values ----
Const adCopyUnspecified = -1
Const adCopyOverWrite = 1
Const adCopyAllowEmulation = 4
Const adCopyNonRecursive = 2

'---- StreamTypeEnum Values ----
Const adTypeBinary = 1
Const adTypeText = 2

'---- LineSeparatorEnum Values ----
Const adLF = 10
Const adCR = 13
Const adCRLF = -1

'---- StreamOpenOptionsEnum Values ----
Const adOpenStreamUnspecified = -1
Const adOpenStreamAsync = 1
Const adOpenStreamFromRecord = 4

'---- StreamWriteEnum Values ----
Const adWriteChar = 0
Const adWriteLine = 1

'---- SaveOptionsEnum Values ----
Const adSaveCreateNotExist = 1
Const adSaveCreateOverWrite = 2

'---- FieldEnum Values ----
Const adDefaultStream = -1
Const adRecordURL = -2

'---- StreamReadEnum Values ----
Const adReadAll = -1
Const adReadLine = -2

'---- RecordTypeEnum Values ----
Const adSimpleRecord = 0
Const adCollectionRecord = 1
Const adStructDoc = 2
%>

Add comment

Loading