home *** CD-ROM | disk | FTP | other *** search
/ DP Tool Club 11 / CD_ASCQ_11_0294.iso / maj / 558 / example6.pas < prev    next >
Pascal/Delphi Source File  |  1993-12-18  |  4KB  |  164 lines

  1. {$X+}
  2. {$V-}
  3. { EXAMPLE6.PAS - demonstrates use of external programmer defined key buffer
  4.  
  5.   Requires Turbo Pascal version 6.0, 7.0
  6.  
  7. }
  8. Uses
  9.   {$IFDEF WINDOWS}
  10.   WinCrt,
  11.   {$ELSE}
  12.   Crt,
  13.   {$ENDIF}
  14.   {$IFDEF VER70}
  15.   WinDos,
  16.   {$ELSE}
  17.   Dos,
  18.   {$ENDIF}
  19.   BtvConst,
  20.   Btv;
  21.  
  22.  
  23. type
  24.   ErrorType = Object(ErrorDisplay)
  25.     Function    Display(Error     : Integer;
  26.                         ErrorMsg  : String;
  27.                         OpCode    : Integer;
  28.                         OpCodeMsg : String;
  29.                         FileName  : PathStr
  30.                         ): ErrorAction;             Virtual;
  31.   end;
  32.  
  33.  
  34. var
  35.   F           : BtrieveFile;
  36.   Buff        : record
  37.                   Name    : String[30];
  38.                   Number  : Integer;
  39.                   Comment : String[80];
  40.                 end;
  41.   Key         : record
  42.                   Case Byte of
  43.                     1:(Name    : String[30]);
  44.                     2:(Number  : Integer);
  45.                   end;
  46.   Name        : String[30];
  47.   Number      : Integer;
  48.   Comment     : String[80];
  49.   ErrHandler  : DefErrorHandler;
  50.   ErrDisplay  : ErrorType;
  51.  
  52.  
  53. { Heres our error display object  }
  54. Function ErrorType.Display(Error     : Integer;
  55.                            ErrorMsg  : String;
  56.                            OpCode    : Integer;
  57.                            OpCodeMsg : String;
  58.                            FileName  : PathStr
  59.                            ): ErrorAction;
  60.   begin
  61.     ClrScr;
  62.     Writeln('Btrieve IO error for ' + FileName);
  63.     Writeln(Error,  ' - ', ErrorMsg);
  64.     Writeln(Opcode, ' - ', OpCodeMsg);
  65.     Writeln('Press any key ....');
  66.     ReadKey;
  67.     Display := erDone;  { just let the program continue }
  68.     ClrScr;
  69.   end;
  70.  
  71. begin
  72.   { first make a error display }
  73.   ErrDisplay.Init;
  74.   { now make an error handler, it needs a display object  }
  75.   ErrHandler.Init(@ErrDisplay);
  76.  
  77.   ClrScr;
  78.   Writeln('Creating a file called TEST6.DAT');
  79.  
  80.   { init the file passing it the error handler and }
  81.   { address of our data buffer                     }
  82.   F.Init('TEST6.DAT', @ErrHandler, @Buff, SizeOf(Buff));
  83.   { the first thing to do is define the key }
  84.   { #1 is a string }
  85.   F.AddKeySegment(1, 31, bExtended, bLstring, 0, bNoJustify);
  86.   { #2 is an integer }
  87.   F.AddKeySegment(32, 2, bExtended, bInteger, 0, bNormal);
  88.   F.AddKeyBuffer(@Key, SizeOf(Key));
  89.   F.Create(bNormal, SizeOf(Buff), 1024, 15, bNormal);
  90.   F.Open(bNormal, '');
  91.  
  92.   { lets add a couple records  }
  93.   Write('Adding some records .');
  94.  
  95.   Buff.Name   := 'AAAAAAAAAA';
  96.   Buff.Number := 1;
  97.   Buff.Comment:= 'Record #1';
  98.   F.Insert;
  99.   {$IFNDEF WINDOWS}
  100.   Delay(500);
  101.   {$ENDIF}
  102.  
  103.   Buff.Name   := 'BBBBBBBBBB';
  104.   Buff.Number := 2;
  105.   Buff.Comment:= 'Record #2';
  106.   F.Insert;
  107.   Write('.');
  108.   {$IFNDEF WINDOWS}
  109.   Delay(500);
  110.   {$ENDIF}
  111.  
  112.   Buff.Name   := 'CCCCCCCCCC';
  113.   Buff.Number := 3;
  114.   Buff.Comment:= 'Record #3';
  115.   F.Insert;
  116.   Write('.');
  117.   {$IFNDEF WINDOWS}
  118.   Delay(500);
  119.   {$ENDIF}
  120.  
  121.   Buff.Name   := 'DDDDDDDDDD';
  122.   Buff.Number := 4;
  123.   Buff.Comment:= 'Record #4';
  124.   F.Insert;
  125.   Write('.');
  126.   {$IFNDEF WINDOWS}
  127.   Delay(500);
  128.   {$ENDIF}
  129.  
  130.   Buff.Name   := 'EEEEEEEEEE';
  131.   Buff.Number := 5;
  132.   Buff.Comment:= 'Record #5';
  133.   F.Insert;
  134.   Writeln('.');
  135.  
  136.   { how about reading a record by key }
  137.   Writeln;
  138.   Writeln('Reading by key 1');
  139.   { build a key }
  140.   F.ClearKey;
  141.   Key.Number := 3;
  142.   F.SetKeyPath(1);
  143.   F.Get(bGetEqual, bNoLock);
  144.   Writeln(Buff.Name);
  145.   Writeln(Buff.Number);
  146.   Writeln(Buff.Comment);
  147.   Writeln('Press a key...');
  148.   ReadKey;
  149.  
  150.   Writeln;
  151.   Writeln('Reading by key 2');
  152.   F.ClearKey;
  153.   Key.Name := 'EEEEEEEEEE';
  154.   F.SetKeyPath(0);
  155.   F.Get(bGetEqual, bNoLock);
  156.   Writeln(Buff.Name);
  157.   Writeln(Buff.Number);
  158.   Writeln(Buff.Comment);
  159.   Writeln('Press a key...');
  160.   ReadKey;
  161.  
  162.   F.Close;
  163. end.
  164.