DBFMOD.TPL 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189
  1. >>FILE NAME =DBF@TABLENAME@.mod
  2. IMPLEMENTATION MODULE DBF@TABLENAME@;
  3. FROM ModBase3 IMPORT InitDBF,OpenDBF,CloseDBF,ReadDBRec,GetField,DBFile,
  4. DeleteRecord,DefaultFixUp,NilDBF,PosOfField,DBFieldArray,
  5. DBFieldPtr,BuildDBF,DBFieldDescriptor;
  6. FROM DBCopier IMPORT DBPack;
  7. FROM DBIndxes IMPORT InitIndex,OpenIndex,AddToUpdateList,CloseIndex,
  8. CurrentRec,FindPositionCh,BuildIndex,GoTop,GoBottom,
  9. NextRecord,PrevRecord,CurrentKeyCh,FindPositionN,
  10. CurrentKeyN,InitCompIndex,BuildCompIndex,DBIndex;
  11. FROM StrEdit IMPORT CrunchBlanks;
  12. FROM HandleIO IMPORT FileExists;
  13. FROM Storage IMPORT ALLOCATE,DEALLOCATE;
  14. FROM DBStuff IMPORT MakeKey;
  15. FROM Drectory IMPORT DeleteFile;
  16. FROM StrConv IMPORT StrToReal;
  17. FROM NumTypes IMPORT Real8;
  18. FROM M2Strings IMPORT Assign;
  19. FROM DBStuff IMPORT MakeKey,MakeDescriptor;
  20. FROM ScanUtils IMPORT Present,CaseSens;
  21. FROM LowLevel IMPORT Fill;
  22. FROM DBFields IMPORT GetDateField,GetLogicalField,GetNumField,Replace,
  23. ReplaceD,ReplaceN;
  24. CONST
  25. Buffer = 0;
  26. Safty = TRUE;
  27. Exclusive = FALSE;
  28. AutoLock = TRUE;
  29. KeepDeleted = FALSE;
  30. VAR
  31. IndexOpen : BOOLEAN;
  32. >>MAKE DATABASE<<
  33. >>MOVE TO DB<<
  34. >>MOVE FROM DB<<
  35. PROCEDURE Open@TABLENAME@DBF(WithIdx : BOOLEAN);
  36. VAR ER : CARDINAL;
  37. BEGIN
  38. IndexOpen := WithIdx;
  39. (* Open the DBF file *)
  40. IF NOT FileExists("@TABLENAME@.DBF")
  41. THEN MakeDatabase();
  42. END;
  43. InitDBF("@TABLENAME@.DBF", @TABLENAME@DBF,Buffer,Safty,Exclusive,
  44. AutoLock,DefaultFixUp );
  45. IF NOT OpenDBF( @TABLENAME@DBF)
  46. THEN END;
  47. (* open all indexes and append to dbfile *)
  48. IF WithIdx THEN
  49. >>FOR EACH IDX<<
  50. InitIndex( "@IDXNAME@.NDX",@IDX@Idx,@TABLENAME@DBF,Buffer, Safty,
  51. KeepDeleted,Exclusive);
  52. IF NOT OpenIndex( @IDX@Idx )
  53. THEN
  54. ER := BuildIndex(@IDX@Idx,'@IDX@'); (* check key lenght *)
  55. END;
  56. AddToUpdateList( @TABLENAME@DBF, @IDX@Idx );
  57. Act@TABLENAME@Idx := @IDX@Idx; (* make current index *)
  58. >>END IDX<<
  59. GoTop(Act@TABLENAME@Idx);
  60. END; (* end with indext *)
  61. END Open@TABLENAME@DBF;
  62. PROCEDURE Close@TABLENAME@DBF (); (* close Data and index files *)
  63. BEGIN
  64. CloseDBF(@TABLENAME@DBF); (* close dbf file *)
  65. IF IndexOpen
  66. THEN
  67. >>FOR EACH IDX<<
  68. CloseIndex(@IDX@Idx ); (* close index file *)
  69. >>END IDX<<
  70. END; (* end index open*)
  71. END Close@TABLENAME@DBF;
  72. >>FOR EACH IDX<<
  73. >>IF INDEX =C
  74. PROCEDURE Find@TABLENAME@By@IDX@( Key : ARRAY OF CHAR) : BOOLEAN;
  75. VAR Found : BOOLEAN;
  76. CKey : ARRAY[0..80] OF CHAR;
  77. BEGIN
  78. Act@TABLENAME@Idx := @IDX@Idx ; (* make this index the active idx*)
  79. FindPositionCh( @IDX@Idx, Key, Found);
  80. CurrentKeyCh(@IDX@Idx,CKey);
  81. Found := Present(Key,CKey,CaseSens);
  82. IF Found
  83. THEN ReadDBRec( @TABLENAME@DBF, CurrentRec( @IDX@Idx));
  84. END;
  85. RETURN Found;
  86. END Find@TABLENAME@By@IDX@;
  87. >>END IF<<
  88. >>IF INDEX =N
  89. PROCEDURE Find@TABLENAME@By@IDX@( Key : ARRAY OF CHAR) : BOOLEAN;
  90. VAR
  91. CKey : Real8;
  92. R : Real8;
  93. B : BOOLEAN:
  94. BEGIN
  95. Act@TABLENAME@Idx := @IDX@Idx ; (* make this index the active idx*)
  96. FindPositionCh( @IDX@Idx, Key, Found);
  97. Assign( CurrentKeyCh(@IDX@Idx,CKey));
  98. B := StrToReal(Key,0,R);
  99. IF (Key = CKey)
  100. THEN
  101. ReadDBRec( @TABLENAME@DBF, CurrentRec( @IDX@Idx));
  102. RETURN TRUE;
  103. END;
  104. RETURN FALSE;
  105. END Find@TABLENAME@By@IDX@;
  106. >>END IF<<
  107. >>END IDX<<
  108. PROCEDURE Next@TABLENAME@ () : BOOLEAN;
  109. VAR
  110. L : LONGINT; (* record number *)
  111. BEGIN
  112. IF NextRecord( Act@TABLENAME@Idx,L)
  113. THEN ReadDBRec( @TABLENAME@DBF,L );
  114. RETURN TRUE;
  115. ELSE RETURN FALSE;
  116. END;
  117. END Next@TABLENAME@;
  118. PROCEDURE Prev@TABLENAME@ () : BOOLEAN;
  119. VAR
  120. L : LONGINT; (* record number *)
  121. BEGIN
  122. IF PrevRecord( Act@TABLENAME@Idx,L)
  123. THEN ReadDBRec( @TABLENAME@DBF,L );
  124. RETURN TRUE;
  125. ELSE RETURN FALSE;
  126. END;
  127. END Prev@TABLENAME@;
  128. PROCEDURE First@TABLENAME@ ();
  129. VAR
  130. L : LONGINT; (* record number *)
  131. BEGIN
  132. GoTop(Act@TABLENAME@Idx);
  133. ReadDBRec( @TABLENAME@DBF,CurrentRec( Act@TABLENAME@Idx));
  134. END First@TABLENAME@;
  135. PROCEDURE Last@TABLENAME@ ();
  136. VAR
  137. L : LONGINT; (* record number *)
  138. BEGIN
  139. GoBottom(Act@TABLENAME@Idx);
  140. ReadDBRec( @TABLENAME@DBF,CurrentRec( Act@TABLENAME@Idx));
  141. END Last@TABLENAME@;
  142. PROCEDURE Pack@TABLENAME@();
  143. VAR
  144. EM : CARDINAL;
  145. LI : LONGINT;
  146. Tmp : @TABLENAME@Rec;
  147. BEGIN
  148. Close@TABLENAME@DBF();
  149. Open@TABLENAME@DBF(FALSE); (* open with no index *)
  150. DBPack(@TABLENAME@DBF);
  151. Close@TABLENAME@DBF();
  152. >>FOR EACH IDX<<
  153. EM := DeleteFile('@IDXNAME@');
  154. >>END IDX<<
  155. Open@TABLENAME@DBF(TRUE); (* open to rebuild the indexes*)
  156. Close@TABLENAME@DBF();
  157. END Pack@TABLENAME@;
  158. (* initialization code *)
  159. BEGIN
  160. NilDBF(@TABLENAME@DBF);
  161. IndexOpen := FALSE;
  162. END DBF@TABLENAME@.
  163.