home *** CD-ROM | disk | FTP | other *** search
- Attribute VB_Name = "BTR32VBFieldMap"
- '{*************************************************************************
- '**
- '** Copyright 1998 Pervasive Software Inc. All Rights Reserved
- '**
- '*************************************************************************}
- '{*************************************************************************
- '**
- '** BTR32VBFieldMap.bas
- '**
- '** This software is part of the Pervasive Software Developer Kit.
- '**
- '** This source code is only intended as a supplement to the
- '** Pervasive.SQL documentation; see that documentation for detailed
- '** information regarding the use of Pervasive.SQL.
- '**
- '*************************************************************************}
-
- Option Explicit
-
- Declare Sub CopyMemory Lib "KERNEL32" Alias "RtlMoveMemory" (hpvDest As Any, hpvSource As Any, ByVal cbCopy As Long)
-
- '**************************************************************************
- 'When compiling a 32-bit application, Visual Basic aligns members of a
- 'user-defined data type (UDT) on 8-, 16-, or 32-bit boundaries, depending
- 'on the size of that particular member. Unlike structures, database rows
- 'are packed, meaning there is no unused space between fields. Because there
- 'is no way to turn alignment off, there must be some method to pack and
- 'unpack structures so that Visual Basic applications can access a database.
- 'The Pervasive Btrieve Alignment DLL, or PAln32.DLL, is designed to handle
- 'this structure alignment issue.
- '***************************************************************************
-
- '**************************************************************************
- 'The Pervasive Btrieve Alignment library (PAln32.DLL) is provided in the
- 'Pervasive Software Developer's Kit. This library is used for packing aligned
- 'structures and unpacking database rows.
- '**************************************************************************
-
- 'First, before the database can be accessed, there first must exist the
- 'required data structures needed to manipulate the data.
- 'Here we create structures to hold the data.
-
- '**************************************************************************
- 'Person Position Block
- '**************************************************************************
-
- Public Type PosBlock
- buf(0 To 127) As Byte
- End Type
-
- '***************************************************************************
- ' Record type definitions for Version operation
- '****************************************************************************
-
- Public Type Version_BaseStruct
- version As Integer
- revision As Integer
- MKDEId As String * 1
- End Type
-
- Public Type Version_Struct
- ver(0 To 2) As Version_BaseStruct
- End Type
-
-
- Public Type Client_ID
- networkandnode(0 To 11) As Byte
- applicationID(0 To 2) As Byte
- threadID As Integer
- End Type
-
- '***************************************************************************
- ' Record type definitions for Stat and Create operations
- '****************************************************************************
-
- Public Type BtrFileSpec
- length As Integer
- PageSize As Integer
- NumIndexes As Integer
- Reserved As Long
- FileFlags As Integer
- NumDupPtr As Byte
- NotUsed As Byte
- Allocation As Integer
- End Type
-
- '***************************************************************************
- ' Definition of record from 'sample.btr'
- '****************************************************************************
-
- Public Type PersonRecType
- ID As Long
- FirstName As String * 16
- LastName As String * 26
- Street As String * 31
- City As String * 31
- State As String * 3
- Zip As String * 11
- Country As String * 21
- Phone As String * 14
- End Type
-
- '***************************************************************************
- ' Record type definitions for Get Next Extended operation
- '****************************************************************************
-
- Public Type GNE_HEADER
- descriptionLen As Integer
- currencyConst As String * 2
- rejectCount As Integer
- numberTerms As Integer
- End Type
-
- Public Type TERM_HEADER
- fieldType As Byte
- fieldLen As Integer
- fieldOffset As Integer
- comparisonCode As Byte
- connector As Byte
- value As String * 3
- End Type
-
- Public Type RETRIEVAL_HEADER
- maxRecsToRetrieve As Integer
- noFieldsToRetrieve As Integer
- End Type
-
- Public Type FIELD_RETRIEVAL_HEADER
- fieldLen As Integer
- fieldOffset As Integer
- End Type
-
- Public Type PRE_GNE_BUFFER
- gneHeader As GNE_HEADER
- term1 As TERM_HEADER
- term2 As TERM_HEADER
- retrieval As RETRIEVAL_HEADER
- recordRet As FIELD_RETRIEVAL_HEADER
- End Type
-
- Public Type RETURNED_REC
- recLen As Integer
- recPos As Long
- personRecord As PersonRecType
- End Type
-
- Public Type POST_GNE_BUFFER
- numReturned As Integer
- recs(0 To 19) As RETURNED_REC
- End Type
-
- '***************************************************************
- ' Define FieldMaps. Create structure for holding file structure.
- '***************************************************************
-
- Global Version_StructMap(0 To 8) As FieldMap
- Const Versionsize = 15
-
- Global ClientIDFldMap(0 To 16) As FieldMap
- Const ClientIDsize = 17
-
- Global PersonFldMap(0 To 8) As FieldMap
- Const PersonRowSize = 157
-
- Global gneheaderMap(0 To 3) As FieldMap
- Const gneheadersize = 8
-
- Global termheaderMap(0 To 5) As FieldMap
- Const termheadersize = 10
-
- Global retrievalheaderMap(0 To 1) As FieldMap
- Const retrievalheadersize = 4
-
- Global fieldretrievalMap(0 To 1) As FieldMap
- Const fieldretrievalsize = 4
-
- Global pregnebufferMap(0 To 23) As FieldMap
- Const pregnebuffersize = 36
-
- Global returnrecMap(0 To 12) As FieldMap
- Const returnrecsize = 163
-
- Global Post_GNE_BUFFERFieldMap(0 To 281) As FieldMap
- Const postgnebuffersize = 3262
-
-
- '**************************************************************
- ' Define FldMapTypes. Create structures needed to store a packed
- ' database row.
- '**************************************************************
-
- Public Type PersonRowType
- buf(1 To PersonRowSize) As Byte
- End Type
-
- Public Type VersionType
- buf(1 To Versionsize) As Byte
- End Type
-
- Public Type ClientIDType
- buf(1 To ClientIDsize) As Byte
- End Type
-
- Public Type gneheaderType
- buf(1 To gneheadersize) As Byte
- End Type
-
- Public Type termheaderType
- buf(1 To termheadersize) As Byte
- End Type
-
- Public Type retrievalheadertype
- buf(1 To retrievalheadersize) As Byte
- End Type
-
- Public Type fieldretrievaltype
- buf(1 To fieldretrievalsize) As Byte
- End Type
-
- Public Type pregnebuffertype
- buf(1 To pregnebuffersize) As Byte
- End Type
-
- Public Type returnrectype
- buf(1 To returnrecsize) As Byte
- End Type
-
- Public Type postgnebuffertype
- buf(1 To postgnebuffersize) As Byte
- End Type
-
- Public Const FLD_PAD32 = 42
-
-
-
-
- '*******************************************************************
- 'Build FieldMaps. Load the file structure into memory.
- '*******************************************************************
-
- Sub AddField(map() As FieldMap, ByRef ctr As Integer, dataType As Long, _
- length As Long)
-
- SetField map(ctr), dataType, length
- ctr = ctr + 1
-
- End Sub
-
-
- Sub AddgneHeaderFldMap(map() As FieldMap, ByRef ctr As Integer)
-
- AddField map, ctr, FLD_INTEGER, 2 ' descriptionLen
- AddField map, ctr, FLD_STRING, 2 ' currencyConst
- AddField map, ctr, FLD_INTEGER, 2 ' rejectCount
- AddField map, ctr, FLD_INTEGER, 2 ' numberTerms
-
- End Sub
-
-
- Sub AddTERM_HEADERFldMap(map() As FieldMap, ByRef ctr As Integer)
-
- AddField map, ctr, FLD_BYTE, 1 ' fieldType
- AddField map, ctr, FLD_INTEGER, 2 ' fieldLen
- AddField map, ctr, FLD_INTEGER, 2 ' fieldOffset
- AddField map, ctr, FLD_BYTE, 1 ' comparisonCode
- AddField map, ctr, FLD_BYTE, 1 ' connector
- AddField map, ctr, FLD_STRING, 3 ' value
-
- End Sub
-
-
- Sub AddPersonFieldMap(map() As FieldMap, ByRef ctr As Integer)
-
- AddField map, ctr, FLD_INTEGER, 4 'ID
- AddField map, ctr, FLD_STRING, 16 'FirstName
- AddField map, ctr, FLD_STRING, 26 'LastName
- AddField map, ctr, FLD_STRING, 31 'Street
- AddField map, ctr, FLD_STRING, 31 'City
- AddField map, ctr, FLD_STRING, 3 'State
- AddField map, ctr, FLD_STRING, 11 'Zip
- AddField map, ctr, FLD_STRING, 21 'Country
- AddField map, ctr, FLD_STRING, 14 'Phone
-
- End Sub
-
-
- Sub AddFieldMap(out() As FieldMap, ByRef ctr As Integer, nin() As FieldMap)
- ' Append a fieldmap to another
- Dim fld As Integer
-
- For fld = LBound(nin) To UBound(nin)
- out(ctr) = nin(fld)
- ctr = ctr + 1
- Next fld
-
- End Sub
-
-
- Sub AddRETRIEVAL_HEADER(map() As FieldMap, ByRef ctr As Integer)
-
- AddField map, ctr, FLD_INTEGER, 2 ' maxRecsToRetrieve
- AddField map, ctr, FLD_INTEGER, 2 ' noFieldsToRetrieve
-
- End Sub
-
-
- Sub AddFIELD_RETRIEVAL_HEADER(map() As FieldMap, ByRef ctr As Integer)
-
- AddField map, ctr, FLD_INTEGER, 2 ' fieldLen
- AddField map, ctr, FLD_INTEGER, 2 ' fieldOffset
-
- End Sub
-
- Sub AddPreGNEBufferFldMap(map() As FieldMap, ByRef ctr As Integer)
-
- AddgneHeaderFldMap map, ctr 'gneHeader
- AddTERM_HEADERFldMap map, ctr ' term1
- AddTERM_HEADERFldMap map, ctr ' term2
- AddRETRIEVAL_HEADER map, ctr ' retrieval
- AddFIELD_RETRIEVAL_HEADER map, ctr ' recordRet
-
- End Sub
-
- Sub AddRETURNED_RECFldMap(map() As FieldMap, ByRef ctr As Integer)
-
- AddField map, ctr, FLD_INTEGER, 2 ' recLen
- AddField map, ctr, FLD_INTEGER, 4 ' recPos
- AddFieldMap map, ctr, PersonFldMap ' personRecord
-
- End Sub
-
-
- Sub AddPostGNEBufferFldMap(map() As FieldMap, ByRef ctr As Integer)
-
- Dim fld As Integer
-
- AddField map, ctr, FLD_INTEGER, 2 ' numReturned
-
- For fld = 0 To 19
- AddField map, ctr, FLD_PAD32, 0
- AddRETURNED_RECFldMap map, ctr ' recs
- Next fld
-
- End Sub
-
-
- Sub AddVersionBufferFldMap(map() As FieldMap, ByRef ctr As Integer)
- Dim fld As Integer
-
- For fld = 0 To 2
- AddField map, ctr, FLD_INTEGER, 2 ' version
- AddField map, ctr, FLD_INTEGER, 2 ' revision
- AddField map, ctr, FLD_STRING, 1 'MKDEId
- Next fld
-
- End Sub
-
- Sub AddClientIDBufferFldMap(map() As FieldMap, ByRef ctr As Integer)
- Dim fld As Integer
-
- For fld = 0 To 11
- AddField map, ctr, FLD_BYTE, 1 'networkandnode
- Next fld
-
- For fld = 0 To 2
- AddField map, ctr, FLD_BYTE, 1 'applicationID
- Next fld
-
- AddField map, ctr, FLD_INTEGER, 2 'threadID
-
- End Sub
-
-
- Sub InitFieldMaps()
- 'Initialize FieldMaps
-
- AddPersonFieldMap PersonFldMap, 0
- AddgneHeaderFldMap gneheaderMap, 0
- AddTERM_HEADERFldMap termheaderMap, 0
- AddFIELD_RETRIEVAL_HEADER fieldretrievalMap, 0
- AddRETRIEVAL_HEADER retrievalheaderMap, 0
- AddRETURNED_RECFldMap returnrecMap, 0
- AddPreGNEBufferFldMap pregnebufferMap, 0
- AddPostGNEBufferFldMap Post_GNE_BUFFERFieldMap, 0
- AddVersionBufferFldMap Version_StructMap, 0
- AddClientIDBufferFldMap ClientIDFldMap, 0
-
- End Sub
-
-