| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201 |
- IMPLEMENTATION MODULE DBFTest;
- FROM ModBase3 IMPORT InitDBF,OpenDBF,CloseDBF,ReadDBRec,GetField,DBFile,
- DeleteRecord,DefaultFixUp,NilDBF,PosOfField,DBFieldArray,
- DBFieldPtr,BuildDBF,DBFieldDescriptor;
- FROM DBCopier IMPORT DBPack;
- FROM DBIndxes IMPORT InitIndex,OpenIndex,AddToUpdateList,CloseIndex,
- CurrentRec,FindPositionCh,BuildIndex,GoTop,GoBottom,
- NextRecord,PrevRecord,CurrentKeyCh,FindPositionN,
- CurrentKeyN,InitCompIndex,BuildCompIndex,DBIndex;
- FROM StrEdit IMPORT CrunchBlanks;
- FROM HandleIO IMPORT FileExists;
- FROM Storage IMPORT ALLOCATE,DEALLOCATE;
- FROM DBStuff IMPORT MakeKey;
- FROM Drectory IMPORT DeleteFile;
- FROM StrConv IMPORT StrToReal;
- FROM NumTypes IMPORT Real8;
- FROM M2Strings IMPORT Assign;
- FROM DBStuff IMPORT MakeKey,MakeDescriptor;
- FROM ScanUtils IMPORT Present,CaseSens;
- FROM LowLevel IMPORT Fill;
- FROM DBFields IMPORT GetDateField,GetLogicalField,GetNumField,Replace,
- ReplaceD,ReplaceN;
- CONST
- Buffer = 0;
- Safty = TRUE;
- Exclusive = FALSE;
- AutoLock = TRUE;
- KeepDeleted = FALSE;
- VAR
- IndexOpen : BOOLEAN;
-
- PROCEDURE MakeDatabase();
- VAR
- Error : CARDINAL;
- Desc : POINTER TO ARRAY [1..200] OF DBFieldDescriptor;
- BEGIN
- ALLOCATE(Desc, 2 * SIZE(DBFieldDescriptor));
- Fill(Desc, 2 * SIZE(DBFieldDescriptor),0);
- MakeDescriptor( Desc^[ 1], 'TEST', 30, 0, 'C');
- MakeDescriptor( Desc^[ 2], 'TEMP', 20, 0, 'C');
- InitDBF('Test.DBF',TestDBF,0,FALSE,TRUE,FALSE,DefaultFixUp);
- (* It would be a good to test error.*)
- Error:=BuildDBF(Desc^, 2,TestDBF);
- CloseDBF(TestDBF);
- DEALLOCATE(Desc, 2 * SIZE(DBFieldDescriptor));
- END MakeDatabase;
-
- PROCEDURE MoveTestToDBF(Rec : TestRec );
- (* This code will move the data from the record to *)
- (* the data base *)
- BEGIN
- WITH Rec DO
- Replace( TestDBF, 1,TEST); (* *)
- Replace( TestDBF, 2,TEMP); (* *)
- END; (* end of with REC *)
- END MoveTestToDBF;
- PROCEDURE MoveTestFromDBF(VAR Rec : TestRec );
- (* This code will move the data from the Database to *)
- (* the record *)
- VAR B : BOOLEAN;
- R : Real8;
- BEGIN
- WITH Rec DO
- GetField( TestDBF, 1,TEST); (* *)
- GetField( TestDBF, 2,TEMP); (* *)
- END; (* end of with REC^ *)
- END MoveTestFromDBF;
- PROCEDURE OpenTestDBF(WithIdx : BOOLEAN);
- VAR ER : CARDINAL;
- BEGIN
- IndexOpen := WithIdx;
- (* Open the DBF file *)
- IF NOT FileExists("Test.DBF")
- THEN MakeDatabase();
- END;
- InitDBF("Test.DBF", TestDBF,Buffer,Safty,Exclusive,
- AutoLock,DefaultFixUp );
- IF NOT OpenDBF( TestDBF)
- THEN END;
- (* open all indexes and append to dbfile *)
- IF WithIdx THEN
- InitIndex( "Test.NDX",TestIdx,TestDBF,Buffer, Safty,
- KeepDeleted,Exclusive);
- IF NOT OpenIndex( TestIdx )
- THEN
- ER := BuildIndex(TestIdx,'Test'); (* check key lenght *)
- END;
- AddToUpdateList( TestDBF, TestIdx );
- ActTestIdx := TestIdx; (* make current index *)
- GoTop(ActTestIdx);
- END; (* end with indext *)
- END OpenTestDBF;
- PROCEDURE CloseTestDBF (); (* close Data and index files *)
- BEGIN
- CloseDBF(TestDBF); (* close dbf file *)
- IF IndexOpen
- THEN
- CloseIndex(TestIdx ); (* close index file *)
- END; (* end index open*)
- END CloseTestDBF;
- PROCEDURE FindTestByTest( Key : ARRAY OF CHAR) : BOOLEAN;
- VAR Found : BOOLEAN;
- CKey : ARRAY[0..80] OF CHAR;
- BEGIN
- ActTestIdx := TestIdx ; (* make this index the active idx*)
- FindPositionCh( TestIdx, Key, Found);
- CurrentKeyCh(TestIdx,CKey);
- Found := Present(Key,CKey,CaseSens);
- IF Found
- THEN ReadDBRec( TestDBF, CurrentRec( TestIdx));
- END;
- RETURN Found;
- END FindTestByTest;
- PROCEDURE NextTest () : BOOLEAN;
- VAR
- L : LONGINT; (* record number *)
- BEGIN
- IF NextRecord( ActTestIdx,L)
- THEN ReadDBRec( TestDBF,L );
- RETURN TRUE;
- ELSE RETURN FALSE;
- END;
- END NextTest;
- PROCEDURE PrevTest () : BOOLEAN;
- VAR
- L : LONGINT; (* record number *)
- BEGIN
- IF PrevRecord( ActTestIdx,L)
- THEN ReadDBRec( TestDBF,L );
- RETURN TRUE;
- ELSE RETURN FALSE;
- END;
- END PrevTest;
- PROCEDURE FirstTest ();
- VAR
- L : LONGINT; (* record number *)
- BEGIN
- GoTop(ActTestIdx);
- ReadDBRec( TestDBF,CurrentRec( ActTestIdx));
- END FirstTest;
- PROCEDURE LastTest ();
- VAR
- L : LONGINT; (* record number *)
- BEGIN
- GoBottom(ActTestIdx);
- ReadDBRec( TestDBF,CurrentRec( ActTestIdx));
- END LastTest;
- PROCEDURE PackTest();
- VAR
- EM : CARDINAL;
- LI : LONGINT;
- Tmp : TestRec;
- BEGIN
- CloseTestDBF();
- OpenTestDBF(FALSE); (* open with no index *)
- DBPack(TestDBF);
- CloseTestDBF();
- EM := DeleteFile('Test');
- OpenTestDBF(TRUE); (* open to rebuild the indexes*)
- CloseTestDBF();
- END PackTest;
- (* initialization code *)
- BEGIN
- NilDBF(TestDBF);
- IndexOpen := FALSE;
- END DBFTest.
|