here is how i convert stored streaming data from data base into binary files:
you define your array first
Public Type sBin
ID_Rec As Long '4
Quote_Date As Date '8
Quote_Time As Date '8
Bid_Price As Single '4
Bid_Size As Long '4
Ask_Price As Single '4
Ask_Size As Long '4
Last_Time As Date '8
Last_Price As Single '8
Last_Size As Long '4
Tot_Vol As Long '4
Change As Single '4
High As Single '4
Low As Single '4
PrevDayClose As Single '4
sOpen As Single
End Type
Public arrData() As sBin
so the size in bytes is known ahead,this is why you don't have to redim each time you go thru each record(as you for example do,while filling up this array)
sQL = "Select Rec_ID,Quote_Date,Quote_Time,Bid_Size,Bid_Price,Ask_Price,Ask_Size,Last_Time,Last_Price,Last_Size,Total_Vol,sChange,sHigh,sLow,Prev_Day_Close,sOpen from " & s & " Order by Rec_ID asc;"
RS.Open sQL, IQ_DB
If RS.RecordCount > 0 Then
CountRecord = CountRecord + RS.RecordCount
ReDim arrData(RS.RecordCount + 1)
Do Until RS.EOF
If i = 0 Then
ReDim arrData(i)
arrData(i).ID_Rec = RS("Rec_ID")
arrData(i).Quote_Date = RS("Quote_Date")
arrData(i).Quote_Time = RS("Quote_Time")
arrData(i).Bid_Size = RS("Bid_Size")
arrData(i).Bid_Price = RS("Bid_Price")
arrData(i).Ask_Price = RS("Ask_Price")
arrData(i).Ask_Size = RS("Ask_Size")
arrData(i).Last_Time = RS("Last_Time")
arrData(i).Last_Price = RS("Last_Price")
arrData(i).Last_Size = RS("Last_Size")
arrData(i).Tot_Vol = RS("Total_Vol")
arrData(i).Change = RS("sChange")
arrData(i).High = RS("sHigh")
arrData(i).Low = RS("sLow")
arrData(i).PrevDayClose = RS("Prev_Day_Close")
arrData(i).sOpen = RS("sOpen")
i = i + 1
Else
ReDim Preserve arrData(i)
arrData(i).ID_Rec = RS("Rec_ID")
arrData(i).Quote_Date = RS("Quote_Date")
arrData(i).Quote_Time = RS("Quote_Time")
arrData(i).Bid_Size = RS("Bid_Size")
arrData(i).Bid_Price = RS("Bid_Price")
arrData(i).Ask_Price = RS("Ask_Price")
arrData(i).Ask_Size = RS("Ask_Size")
arrData(i).Last_Time = RS("Last_Time")
arrData(i).Last_Price = RS("Last_Price")
arrData(i).Last_Size = RS("Last_Size")
arrData(i).Tot_Vol = RS("Total_Vol")
arrData(i).Change = RS("sChange")
arrData(i).High = RS("sHigh")
arrData(i).Low = RS("sLow")
arrData(i).PrevDayClose = RS("Prev_Day_Close")
arrData(i).sOpen = RS("sOpen")
i = i + 1
End If
RS.MoveNext
Loop
End If
RS.Close
and then you store it like this :
sQL = GlobalFilePatch & "\" & s & ".bin"
FileNum = FreeFile
Open sQL For Binary Access Write Lock Read Write As #FileNum
Put #FileNum, , arrData
Close FileNum
--------------
and this is how you fill your array from binary file(note the difference between filling up array from ascii and binary):
Public Function Fill_Binary_Tick(ByVal sPat As String) As Long
Dim NumRec As Long
Dim FileNum As Integer
If Dir(sPat) = "" Then
Fill_Binary_Tick = 0
Exit Function
End If
Erase arrData
FileNum = FreeFile
NumRec = FileLen(sPat) / 76 ' 76 bytes in one line,defined above,remember? in sBin type
ReDim arrData(NumRec - 1)
Open sPat For Binary Access Read As #FileNum
Get #FileNum, , arrData
Close #FileNum
Fill_Binary_Tick = NumRec
End Function