Solved

vbscript - Out of Memory - 800A0007

Posted on 2006-06-14
3
3,831 Views
Last Modified: 2012-06-27
When I run the code below I get this error message on the second record processed in the loop (Line 101). The text file that I'm searching is very large (129 mb). Also all the data in the file is on one line. Any ideas why I'm getting this error? Can I clear out the memory after each loop? If so, what is the code to do that.

Below is the code from my .vbs file....
'**********************************************************
dim objConn
dim objRs
const ForReading = 1
const TristateFalse = 0
dim strSearchThis
dim objFS
dim objFile
dim objTS
dim objOutput
dim strFileName
dim sDB_USER
dim sDB_PASSWORD
dim intCount
dim strCurrentDateTime

sDB_USER = "UserName"
sDB_PASSWORD = "Password"

strCurrentDateTime = right("0000" & cstr(Year(Date())),4) & _
                 right("00" & cstr(Month(Date())),2) & _
                 right("00" & cstr(Day(Date())),2)

'Open dialog to select file to process.
dim ObjFileSeleted
dim InitFileSeleted
dim strFileSelected
Set ObjFileSeleted = CreateObject("UserAccounts.CommonDialog")

ObjFileSeleted.Filter = "Text Documents|*.txt"

ObjFileSeleted.FilterIndex = 3

ObjFileSeleted.InitialDir = "C:\"

InitFileSeleted = ObjFileSeleted.ShowOpen

If InitFileSeleted = False Then
    Wscript.Echo "Script Error: Process canceled!"
    Wscript.Quit
Else
    strFileSelected = ObjFileSeleted.FileName
End If

'Select folder to save output file.
dim objShell
dim objBrowseFolder
dim objBrowseFolderItem
dim strFolderSelected
Const MY_COMPUTER = &H11&
Const WINDOW_HANDLE = 0
Const OPTIONS = 0

Set objShell = CreateObject("Shell.Application")
Set objBrowseFolder = objShell.Namespace(MY_COMPUTER)
Set objBrowseFolderItem = objBrowseFolder.Self
strPath = objBrowseFolderItem.Path

Set objShell = CreateObject("Shell.Application")
Set objBrowseFolder = objShell.BrowseForFolder _
    (WINDOW_HANDLE, "Select a folder to save output file:", OPTIONS, strPath)
     
If objBrowseFolderItem Is Nothing Then
    Wscript.Quit
End If

Set objBrowseFolderItem = objBrowseFolder.Self
strFolderSelected = objBrowseFolderItem.Path

'Open files.
set objFS = CreateObject("Scripting.FileSystemObject")
set objFile = objFS.GetFile(strFileSelected)
set objOutput = objFS.OpenTextFile(strFolderSelected & "Output_" & strCurrentDateTime & ".txt", 2, true)

'Write header record.
objOutput.write ("START: " & NOW() & vbcrlf & vbcrlf)

intCount = 0

'Connect to database and cycle through records.
set objConn = createobject("ADODB.Connection")
objConn.ConnectionString = "Driver={SQL Server};" & _
                         "Server=ServerName;" & _
                         "Database=DatabaseName;" & _
                         "Uid=" & sDB_USER & ";" & _
                         "Pwd=" & sDB_PASSWORD
objConn.Open

set objRs = createobject("ADODB.Recordset")
objRs.ActiveConnection = objConn
strSQL = "SELECT LEFT([Field1],9) as FIELD " & _
       "FROM [Table1] " & _
       "WHERE [Field1] IS NOT NULL " & _
       "AND RIGHT([Field1],1)='S' " & _
       "ORDER BY [FIELD]"
objRs.Open strSQL,,3,3,1

WHILE NOT objRs.EOF
      set objTS = objFile.OpenAsTextStream(ForReading, TristateFalse)
      
      'Search for current value in recordset. Print record if found.
      strSearchThis = objTS.Read(objFile.Size)

      IF instr(strSearchThis, "REF*SY*" & objRs("FIELD") & "~") > 0 THEN
            'Found it. Write out record.
            objOutput.write (objRs("FIELD") & vbcrlf)
      END IF
      
      objTS.Close
      
      intCount = intCount + 1
      
      objRs.MoveNext
WEND

'Write trailer records.
objOutput.write (vbcrlf & "TOTAL RECORDS PROCESSED: " & intCount & vbcrlf)
objOutput.write ("FINISH: " & NOW())

'Close all open objects
objRs.Close
set objRs = Nothing
objConn.Close
set objConn = Nothing
objOutput.Close
set objFSO = Nothing
msgbox ("Finished")
'**********************************************************

Any help will be greatly appreciated.
0
Comment
Question by:actmanre
  • 2
3 Comments
 
LVL 8

Accepted Solution

by:
hiteshgupta1 earned 500 total points
ID: 16910545
didn't get the time to look at ur code3
but just wanted to confirm
have u created FSO and File Objects for once only or not??
0
 

Author Comment

by:actmanre
ID: 16910704
The FSO object is created only once. The objTS object is set, then I search for a string, and then close objTS in the while loop. Is this not correct?
0
 

Author Comment

by:actmanre
ID: 16911488
I moved the code...
***************************************************
     set objTS = objFile.OpenAsTextStream(ForReading, TristateFalse)
     
     'Search for current value in recordset. Print record if found.
     strSearchThis = objTS.Read(objFile.Size)
***************************************************
...to above the while statement and the other code....
***************************************************
     objTS.Close
***************************************************
...to below the wend statement and I did not get the out of memory error message.
0

Featured Post

Independent Software Vendors: We Want Your Opinion

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Title # Comments Views Activity
countEvens challenge 2 114
fix34  challenge 9 166
Not needed 13 129
CONDITIONAL MAX STATEMENT IN T-SQL 3 83
There is an easy way, in .NET, to centralize the treatment of all unexpected errors. First of all, instead of launching the application directly in a Form, you need first to write a Sub called Main, in a module. Then, set the Startup Object to th…
Windows Script Host (WSH) has been part of Windows since Windows NT4. Windows Script Host provides architecture for building dynamic scripts that consist of a core object model, scripting hosts, and scripting engines. The key components of Window…
The viewer will learn how to implement Singleton Design Pattern in Java.
The viewer will be introduced to the technique of using vectors in C++. The video will cover how to define a vector, store values in the vector and retrieve data from the values stored in the vector.

733 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question