[dba-Tech] Any ideas

MartyConnelly martyconnelly at shaw.ca
Tue Oct 21 13:21:16 CDT 2003


Are you writing to a sequential file with an append? How about writing 1 
record to a random file.
The disadvantage to a sequential file is that it must always be read 
from the beginning every time you read or append to it. There is 
probably a threshold for this method too.
You could also check, your sequential method is using
For Append Shared rather than Output
Open "G:\ReportLog.txt" For Append Shared As #1

Some sample code for random access.

Private Type MyPasswordData
    password as string * 15
    description as string * 30
    location as string * 30
    expiry as date
End Type

Dim MPD as MyPasswordData

Private Sub Command3_Click()
'WRITE A RANDOM ACCESS RECORD TO DISK

   Dim fileNo As Integer
   Dim totalRecords As Integer
   Dim newRecordNo As Integer

   Dim sfileName As String
 
  'retrieve the typed-in values, this time
  'assigning them to the appropriate
  'MyPasswordData member (MPD)
   MPD.password = txtPassword
   MPD.description = txtDescription
   MPD.location = txtLocation
   MPD.expiry = CDate(txtExpiry)

   sfileName = "d:\password.dat"
  
  'get the next free file handle
   fileNo = FreeFile
  
  'save to disk using Random Access Write
   Open sfileName For Random Access Write As #fileNo Len = Len(MPD)
  
     'determine how many records exist
     'in the file right now, so none are overwritten
      totalRecords = LOF(fileNo) \ Len(MPD)
     
     'the new record will be total records + 1
      newRecordNo = totalRecords + 1
     
      Put #fileNo, newRecordNo, MPD

    Close #fileNo
 
End Sub

Private Sub Command4_Click()
'READ A RANDOM ACCESS RECORD FROM DISK
 
   Dim fileNo As Integer
   Dim recordToGet As Integer
   Dim sfileName As String
  
   sfileName = "d:\password.dat"
  
  'get the next free file handle
   fileNo = FreeFile
  
  'read the first record from disk
   Open sfileName For Random Access Read As #fileNo Len = Len(MPD)
  
      recordToGet = 1
     
     'load the record indicated by recordToGet
     'into the MPD data
      Get #fileNo, recordToGet, MPD

    Close #fileNo
 
  'show the retrieved values
   txtPassword = MPD.password
   txtDescription = MPD.description
   txtLocation = MPD.location
   txtExpiry = Format$(MPD.expiry, "general date")

End Sub

Private Sub Command5_Click()
'READ ALL RECORDS FROM DISK INTO A COMBO

   Dim fileNo As Integer
   Dim recordToGet As Integer
   Dim totalRecords As Integer
  
   Dim sfileName As String
  
   sfileName = "d:\password.dat"
  
  'get the next free file handle
   fileNo = FreeFile
  
  'read the first record from disk
  '(all on 1 line!)
   Open sfileName For Random Access Read As #fileNo Len = Len(MPD)
  
     'determine how many records exist
     'in the file
      totalRecords = LOF(fileNo) \ Len(MPD)
     
     'if none, abort
      If totalRecords > 0 Then
     
        'there must be some, so get them all
         Do
           
           'set the record number to retrieve
           'and Get the record
            recordToGet = recordToGet + 1
            Get #fileNo, recordToGet, MPD
           
           'add the description to the combo
           'and in the combo items ItemData
           'property, save the record number
           'of the item retrieved for use later
            Combo1.AddItem MPD.description
            Combo1.ItemData(Combo1.NewIndex) = recordToGet
           
         Loop While recordToGet < totalRecords
     
      End If
   
    Close #fileNo
 
End Sub


Private Sub Combo1_Click()
'READ THE SELECTED RANDOM ACCESS RECORD FROM DISK

   Dim recordToGet As Integer
   Dim fileNo As Integer
   Dim sfileName As String
  
   sfileName = "d:\password.dat"
  
  'bail out if nothing is selected
   If Combo1.ListIndex > -1 Then
  
     'retrieve the record associated with
     'the description from the info stored
     'in the ItemData property
      recordToGet = Combo1.ItemData(Combo1.ListIndex)
     
     'bail out if its 0 - an error
      If recordToGet > 0 Then
     
        'get the next free file handle
         fileNo = FreeFile
        
        'read the specified record from disk
         Open sfileName For Random Access Read As #fileNo Len = Len(MPD)
        
            Get #fileNo, recordToGet, MPD
     
          Close #fileNo
       
        'display the data for the record
         txtPassword = MPD.password
         txtDescription = MPD.description
         txtLocation = MPD.location
         txtExpiry = Format$(MPD.expiry, "general date")
     
      End If
   End If
  
End Sub


Martin Reid wrote:

>Anyone have any ideas re the following?
>
>I have a system whereby each PC in the SCCs sends in one short line per
>minute to a central server. Each line is of the form IP address, time,
>date[, user id]. The central server is only a P450 with 256Mb memory but
>I have used a P733 with the same results.
>
>When a user logs in to a PC, it writes a line to the same file on the
>central server as all the other used PCs. Each PC writes at the same
>second each minute, but the PCs determine their second to write by
>chance, basically. Thus the incoming data for the file is reasonably
>well spread across 60 seconds.
>
>On the minute, the software on the central server renames the input
>file, thereby causing a new one to be created with the next record sent
>to it. The central file is held on a share to which each PC has to
>authenticate.
>
>When enough PCs are active, and I have not been able to deduce if there
>is a threshold figure for that number, some or most of a record may be
>lost. That can be seen from the input files.
>
>During stress tests, when my PC was the only system communicating with
>the server, My PC could send in about 630 lines per minute and none
>would be lost. And this over a period of say an hour. However, when
>multiple PCs send in lines, the data loss may arise with 50 PCs active.
>The difference is the number of active network connections.
>
>As I don't believe the data is being lost on the network (I have
>monitored this and have not seen losses so far), it is most likely being
>lost through the networking code/file system combination, and probably
>the former.
>
>I was wondering if anyone had a better method for collecting this
>asynchronous auditing information, one which did not lose data.
>_______________________________________________
>dba-Tech mailing list
>dba-Tech at databaseadvisors.com
>http://databaseadvisors.com/mailman/listinfo/dba-tech
>Website: http://www.databaseadvisors.com
>
>  
>

-- 
Marty Connelly
Victoria, B.C.
Canada





More information about the dba-Tech mailing list