Database Function Summary
PowerBASIC has no built-in database support, such as standard SQL or Access file read/write capabilities.

Custom Database Applications
Despite having no built-in, standard database support, several of the file and string functions can be used to create simple, fast database applications where the database consists of records/lines of string data.

For example, suppose a database record includes a name, state and zip code and that a file "data.txt" contains the following three records.

    Bob:::Texas:::75300
    Mary:::Arkansas:::77001
    Helen:::Maine:::45622

Note that any separating character string can be used as long as it will not be used as data in any of the records. In this example, ":::" was used because because no Name/State/Zip will never be that value.

A simple database application using this basic file structure would be as follows. The basic technique is to put each text line into a string array, then use PowerBASIC functions to pull out fields from each record as needed. When all changes are made to the array, simply write it back out to the file, overwriting any prior content.

    1. Open Database (read text lines into array):
           Open "data.txt" For Input as #1
           Dim MyData() as String
 
           'first way to create array with 1 record per element
           'resizes array each time it reads a line of text
           While NOT eof(1)
              Line Input #1, MyData(Ubound)
              if NOT eof(1) then
                  REDIM Preserve MyData(Ubound(MyData)+1)
              end if
           Wend
 
          'second way to crate array with 1 record per element
          'uses filescan to count number of lines
           FILESCAN #1, RECORDS to iCount
           REDIM MyDATA(iCount-1)
           For i = 0 to UBound(MyData)
              Line Input #1, MyData(i)
           Next i

          'third way to create array with 1 record per element
          'if all records contain same number of characters
           iCount = LOF(1) / iRecordSize
           REDIM MyDATA(iCount-1)
           For i = 0 to UBound(MyData)
              Line Input #1, MyData(i)
           Next i


          Close #1

    2. Get/Set Name/State/Zip from any array element
           Dim RecordData(2) As String   '3 elements
           Dim iRecord as Long          
           For i = 0 to Ubound(MyArray)

              'first way to get Name/State/Zip
              PARSE MyData(iRecord), RecordData  'separates data
              Name$ = MyData(0)          'optional, for convenience only
              State$ = MyData(1)         'optional, for convenience only
              Zip$ = MyData(2)           'optional, for convenience only

              'second way to get Name/State/Zip
              Name$  = Parse$(MyData(iRecord), ":::", 1)
              State$ = Parse$(MyData(iRecord), ":::", 2)
              Zip$   = Parse$(MyData(iRecord), ":::", 3)

              'now use Name/State/Zip (including setting their values)
                  .... program statements using values
                  .... assign values to Name$, State$, Zip$

              'save results
              MyData(iRecord) = Build$(Name$, ":::", State$, ":::", Zip$)
           Next i

    2A.   'Use ARRAY INSERT to add records
          'Use ARRAY DELETE to delete records
          'Use ARRAY SCAN to search 
          'Use ARRAY SORT to sort records

    3. Write changed array to file:
           Open "data.txt" for Output as #1
           For i = 0 to Ubound(MyArray)
              Print #1, MyArray(i)
           Next i

For syntax and examples, follow the links to FILESCAN, PARSE and REDIM. These functions were used in the above approaches to treating a text file as a database.

If you have any suggestions or corrections, please let me know.