Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Option Explicit
- Const adExecuteNoRecords = 128
- Const adModeRead = 1
- Const adModeReadWrite = 3
- Const adModeRecursive = 4194304
- Const adModeShareDenyNone = 16
- Const adModeShareDenyRead = 4
- Const adModeShareDenyWrite = 8
- Const adModeShareExclusive = 12
- Const adModeUnknown = 0
- Const adModeWrite = 2
- Const adUseClient = 3
- Const adUseServer = 2
- Const adOpenDynamic = 2
- Const adOpenForwardOnly = 0
- Const adOpenKeyset = 1
- Const adOpenStatic = 3
- Const adLockBatchOptimistic = 4
- Const adLockOptimistic = 3
- Const adLockPessimistic = 2
- Const adLockReadOnly = 1
- Const adCmdFile = 256
- Const adCmdStoredProc = 4
- Const adCmdTable = 2
- Const adCmdTableDirect = 512
- Const adCmdText = 1
- Const adCmdUnknown = 8
- Const adBigInt = 20
- Const adBinary = 128
- Const adBoolean = 11
- Const adBSTR = 8
- Const adChapter = 136
- Const adChar = 129
- Const adCurrency = 6
- Const adDate = 7
- Const adDBDate = 133
- Const adDBTime = 134
- Const adDBTimeStamp = 135
- Const adDecimal = 14
- Const adDouble = 5
- Const adEmpty = 0
- Const adError = 10
- Const adFileTime = 64
- Const adGUID = 72
- Const adIDispatch = 9
- Const adInteger = 3
- Const adIUnknown = 13
- Const adLongVarBinary = 205
- Const adLongVarChar = 201
- Const adLongVarWChar = 203
- Const adNumeric = 131
- Const adPropVariant = 138
- Const adSingle = 4
- Const adSmallInt = 2
- Const adTinyInt = 16
- Const adUnsignedBigInt = 21
- Const adUnsignedInt = 19
- Const adUnsignedSmallInt = 18
- Const adUnsignedTinyInt = 17
- Const adUserDefined = 132
- Const adVarBinary = 204
- Const adVarChar = 200
- Const adVariant = 12
- Const adVarNumeric = 139
- Const adVarWChar = 202
- Const adWChar = 130
- Const adColFixed = 1
- Const adColNullable = 2
- Dim cnCON, cmCMD, rsREC
- Dim fso, arg
- Set fso = CreateObject("Scripting.FileSystemObject")
- Set arg = WScript.Arguments
- TestDB
- Sub TestDB()
- Dim sDBname
- sDBname = "PathNames.mdb"
- If fso.FileExists(sDBname) Then
- fso.DeleteFile sDBname
- End If
- CreateDB sDBname
- CreateTables sDBname
- PopulateDB sDBname, "c:\hpg"
- DumpData sDBname
- End Sub
- Sub ConnectDB(sDBname, bOpen)
- If bOpen = False Then
- Set rsREC.ActiveConnection = Nothing
- Set rsREC = Nothing
- Set cmCMD.ActiveConnection = Nothing
- Set cmCMD = Nothing
- cnCON.Close
- Set cnCON = Nothing
- Exit Sub
- End If
- Set cnCON = CreateObject("ADODB.Connection")
- cnCON.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
- "Data Source=" & sDBname
- Set cmCMD = CreateObject("ADODB.Command")
- With cmCMD
- Set .ActiveConnection = cnCON
- .CommandType = adCmdText
- End With
- Set rsREC = CreateObject("ADODB.Recordset")
- With rsREC
- Set .ActiveConnection = cnCON
- .CursorLocation = adUseClient
- .CursorType = adOpenDynamic
- .LockType = adLockOptimistic
- End With
- End Sub
- Sub DumpData(sDBname)
- Dim sSQL, fdFld, lCount
- Dim rsData
- ConnectDB sDBname, True
- ' all files in a given folder, in descending order by date/time
- sSQL = "SELECT * FROM Folders LEFT JOIN Files ON Folders.RecID = Files.Path " & _
- "WHERE Folders.Path='c:\hpg\Logs' " & _
- "ORDER BY Files.DateTime DESC"
- cmCMD.CommandText = sSQL
- Set rsData = cmCMD.Execute
- lCount = 0
- While Not rsData.EOF
- lCount = lCount + 1
- WScript.StdOut.Write lCount
- For Each fdFld In rsData.Fields
- WScript.StdOut.Write "," & fdFld.Value
- Next
- WScript.StdOut.WriteLine ""
- rsData.MoveNext
- Wend
- rsData.Close
- WScript.StdOut.WriteLine ""
- ' all files with a ".dat" extension ordered by folder path and filename
- sSQL = "SELECT * FROM Files LEFT JOIN Folders ON Files.Path = Folders.RecID " & _
- "WHERE Files.Name Like '%.dat' " & _
- "ORDER BY Folders.Path, Files.Name"
- cmCMD.CommandText = sSQL
- Set rsData = cmCMD.Execute
- lCount = 0
- While Not rsData.EOF
- lCount = lCount + 1
- WScript.StdOut.Write lCount
- For Each fdFld In rsData.Fields
- WScript.StdOut.Write "," & fdFld.Value
- Next
- WScript.StdOut.WriteLine ""
- rsData.MoveNext
- Wend
- rsData.Close
- WScript.StdOut.WriteLine ""
- ConnectDB sDBname, False
- End Sub
- Sub PopulateDB(sDBname, sPathName)
- ConnectDB sDBname, True
- ScanFolder sPathName
- ConnectDB sDBname, False
- End Sub
- Sub ScanFolder(sPathName)
- Dim fld, sfd, fil
- Set fld = fso.GetFolder(sPathName)
- For Each fil In fld.Files
- ProcessFile fil
- Next
- For Each sfd In fld.SubFolders
- ScanFolder sfd.Path
- Next
- End Sub
- Sub ProcessFile(fil)
- Dim sPath, lPathID
- 'WScript.Echo fil.Path
- sPath = fil.ParentFolder.Path
- lPathID = GetFolderID(sPath)
- rsREC.Open "Files"
- With rsREC
- .AddNew
- .Fields("Path") = lPathID
- .Fields("Name") = fil.Name
- .Fields("Size") = fil.Size
- .Fields("DateTime") = fil.DateLastModified
- .Fields("Attributes") = fil.Attributes
- .Update
- End With
- rsREC.Close
- End Sub
- Function GetFolderID(sPath)
- Dim sSQL, rsFLD, lRecID
- sSQL = "SELECT RecID FROM Folders WHERE Path='" & sPath & "'"
- cmCMD.CommandText = sSQL
- Set rsFLD = cmCMD.Execute
- If Not rsFLD.EOF Then
- lRecID = rsFLD.Fields("RecID")
- Else
- rsREC.Open "Folders"
- With rsREC
- .AddNew
- .Fields("Path") = sPath
- .Update
- End With
- rsREC.Close
- sSQL = "SELECT MAX(RecID) AS NewID FROM Folders"
- cmCMD.CommandText = sSQL
- Set rsFLD = cmCMD.Execute
- lRecID = CLng(rsFLD.Fields("NewID"))
- End If
- rsFLD.Close
- GetFolderID = lRecID
- End Function
- Sub CreateDB(sDBname)
- Dim objCAT
- Set objCAT = CreateObject("ADOX.Catalog")
- objCAT.Create "Provider=Microsoft.Jet.OLEDB.4.0;" & _
- "Data Source=" & sDBname & _
- ";Jet OLEDB:Engine Type=5;"
- End Sub
- Sub CreateTables(sDBname)
- CreateFolders sDBname
- CreateFiles sDBname
- End Sub
- Sub CreateFolders(sDBname)
- Dim objCAT, objTBL, objCOL, objIDX
- Set objCAT = CreateObject("ADOX.Catalog")
- objCAT.ActiveConnection = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
- "Data Source=" & sDBname
- Set objTBL = CreateObject("ADOX.Table")
- objTBL.Name = "Folders"
- Set objCOL = CreateObject("ADOX.Column")
- With objCOL
- .ParentCatalog = objCAT
- .Type = adInteger
- .Name = "RecID"
- .Properties("Autoincrement") = True
- End With
- objTBL.Columns.Append objCOL
- With objTBL
- .Columns.Append "Path", adLongVarWChar
- End With
- objCAT.Tables.Append objTBL
- Set objIDX = CreateObject("ADOX.Index")
- With objIDX
- .Name = "PK_FOLDERS"
- .PrimaryKey = True
- .Unique = True
- .Columns.Append "RecID"
- End With
- objTBL.Indexes.Append objIDX
- Set objIDX = CreateObject("ADOX.Index")
- With objIDX
- .Name = "K1_FOLDERS"
- .Unique = True
- .Columns.Append "Path"
- End With
- objTBL.Indexes.Append objIDX
- End Sub
- Sub CreateFiles(sDBname)
- Dim objCAT, objTBL, objCOL, objIDX
- Set objCAT = CreateObject("ADOX.Catalog")
- objCAT.ActiveConnection = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
- "Data Source=" & sDBname
- Set objTBL = CreateObject("ADOX.Table")
- objTBL.Name = "Files"
- Set objCOL = CreateObject("ADOX.Column")
- With objCOL
- .ParentCatalog = objCAT
- .Type = adInteger
- .Name = "RecID"
- .Properties("Autoincrement") = True
- End With
- objTBL.Columns.Append objCOL
- With objTBL
- .Columns.Append "Path", adInteger
- .Columns.Append "Name", adLongVarWChar
- .Columns.Append "Size", adInteger
- .Columns.Append "DateTime", adDate
- .Columns.Append "Attributes", adInteger
- End With
- objCAT.Tables.Append objTBL
- Set objIDX = CreateObject("ADOX.Index")
- With objIDX
- .Name = "PK_FILES"
- .PrimaryKey = True
- .Unique = True
- .Columns.Append "Name"
- .Columns.Append "RecID"
- End With
- objTBL.Indexes.Append objIDX
- Set objIDX = CreateObject("ADOX.Index")
- With objIDX
- .Name = "K1_FILES"
- .Columns.Append "Path"
- End With
- objTBL.Indexes.Append objIDX
- End Sub
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement