database.inc 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202
  1. {
  2. $Id$
  3. This file is part of the Free Pascal run time library.
  4. Copyright (c) 1999-2000 by Michael Van Canneyt, member of the
  5. Free Pascal development team
  6. TDatabase and related objects implementation
  7. See the file COPYING.FPC, included in this distribution,
  8. for details about the copyright.
  9. This program is distributed in the hope that it will be useful,
  10. but WITHOUT ANY WARRANTY; without even the implied warranty of
  11. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  12. **********************************************************************}
  13. { ---------------------------------------------------------------------
  14. TDatabase
  15. ---------------------------------------------------------------------}
  16. Procedure TDatabase.CheckConnected;
  17. begin
  18. If Not Connected Then
  19. DatabaseError(SNotConnected,Self);
  20. end;
  21. Procedure TDatabase.CheckDisConnected;
  22. begin
  23. If Connected Then
  24. DatabaseError(SConnected,Self);
  25. end;
  26. procedure TDataBase.Loaded;
  27. begin
  28. //!! To be implemented.
  29. end;
  30. procedure TDataBase.SetConnected (Value : boolean);
  31. begin
  32. If Value<>FConnected then
  33. begin
  34. If Value then
  35. DoInternalConnect
  36. else
  37. begin
  38. Closedatasets;
  39. DoInternalDisConnect;
  40. end;
  41. FConnected:=Value;
  42. end;
  43. end;
  44. procedure TDatabase.Notification(AComponent: TComponent; Operation: TOperation);
  45. begin
  46. //!! To be implemented.
  47. end;
  48. constructor TDatabase.Create(AOwner: TComponent);
  49. begin
  50. Inherited Create(AOwner);
  51. FParams:=TStringlist.Create;
  52. FDatasets:=TList.Create;
  53. end;
  54. destructor TDatabase.Destroy;
  55. begin
  56. Connected:=False;
  57. RemoveDatasets;
  58. FDatasets.Free;
  59. FParams.Free;
  60. Inherited Destroy;
  61. end;
  62. procedure TDatabase.Close;
  63. begin
  64. Connected:=False;
  65. end;
  66. procedure TDatabase.CloseDataSets;
  67. Var I : longint;
  68. begin
  69. If Assigned(FDatasets) then
  70. begin
  71. For I:=FDatasets.Count-1 downto 0 do
  72. TDBDataset(FDatasets[i]).Close;
  73. end;
  74. end;
  75. procedure TDatabase.RemoveDataSets;
  76. Var I : longint;
  77. begin
  78. If Assigned(FDatasets) then
  79. For I:=FDataSets.Count-1 downto 0 do
  80. TDBDataset(FDataSets[i]).Database:=Nil;
  81. end;
  82. procedure TDatabase.Open;
  83. begin
  84. Connected:=True;
  85. end;
  86. Function TDatabase.GetDataSetCount : Longint;
  87. begin
  88. If Assigned(FDatasets) Then
  89. Result:=FDatasets.Count
  90. else
  91. Result:=0;
  92. end;
  93. Function TDatabase.GetDataset(Index : longint) : TDBDataset;
  94. begin
  95. If Assigned(FDatasets) then
  96. Result:=TDBDataset(FDatasets[Index])
  97. else
  98. DatabaseError(SNoDatasets);
  99. end;
  100. procedure TDatabase.RegisterDataset (DS : TDBDataset);
  101. Var I : longint;
  102. begin
  103. I:=FDatasets.IndexOf(DS);
  104. If I=-1 then
  105. FDatasets.Add(DS)
  106. else
  107. DatabaseErrorFmt(SDatasetRegistered,[DS.Name]);
  108. end;
  109. procedure TDatabase.UnRegisterDataset (DS : TDBDataset);
  110. Var I : longint;
  111. begin
  112. I:=FDatasets.IndexOf(DS);
  113. If I<>-1 then
  114. FDatasets.Delete(I)
  115. else
  116. DatabaseErrorFmt(SNoDatasetRegistered,[DS.Name]);
  117. end;
  118. { ---------------------------------------------------------------------
  119. TDBdataset
  120. ---------------------------------------------------------------------}
  121. Procedure TDBDataset.SetDatabase (Value : TDatabase);
  122. begin
  123. CheckInactive;
  124. If Value<>FDatabase then
  125. begin
  126. If Assigned(FDatabase) then
  127. FDatabase.UnregisterDataset(Self);
  128. If Value<>Nil Then
  129. Value.RegisterDataset(Self);
  130. FDatabase:=Value;
  131. end;
  132. end;
  133. Procedure TDBDataset.CheckDatabase;
  134. begin
  135. If (FDatabase=Nil) then
  136. DatabaseError(SErrNoDatabaseAvailable,Self)
  137. end;
  138. Destructor TDBDataset.Destroy;
  139. begin
  140. Database:=Nil;
  141. Inherited;
  142. end;
  143. {
  144. $Log$
  145. Revision 1.4 2003-08-16 16:42:21 michael
  146. + Fixes in TDBDataset etc. Changed MySQLDb to use database as well
  147. Revision 1.3 2002/09/07 15:15:22 peter
  148. * old logs removed and tabs fixed
  149. }