ViewVC Help
View File | Revision Log | Show Annotations | Download File | View Changeset | Root Listing
root/public/ibx/trunk/runtime/nongui/IBTable.pas
(Generate patch)

Comparing ibx/trunk/runtime/nongui/IBTable.pas (file contents):
Revision 209 by tony, Wed Mar 14 12:48:51 2018 UTC vs.
Revision 315 by tony, Thu Feb 25 11:56:36 2021 UTC

# Line 39 | Line 39 | unit IBTable;
39  
40   interface
41  
42 < uses SysUtils, Classes, DB, IB,  IBCustomDataSet,
43 <     IBSQL, IBUtils;
42 > uses SysUtils, Classes, DB, IB,  IBCustomDataSet, IBDatabase, IBSQL, IBUtils;
43      
44   type
45  
# Line 161 | Line 160 | type
160      property EnableStatistics;
161      property Filter;
162      property Filtered;
163 +    property SQLFiltered;
164 +    property SQLFilterParams;
165      property GeneratorField;
166      property IndexDefs: TIndexDefs read FIndexDefs write SetIndexDefs stored IndexDefsStored;
167      property IndexFieldNames: string read GetIndexFieldNames write SetIndexFieldNames;
# Line 186 | Line 187 | type
187  
188   implementation
189  
190 < uses FBMessages, fpTimer;
190 > uses IBMessages, IBInternals;
191  
192   type
193  
# Line 195 | Line 196 | type
196    TIBMasterDataLink = class(TMasterDataLink)
197    private
198      FDelayTimerValue: integer;
199 <    FTimer: TFPTimer;
199 >    FTimer: IIBTimerInf;
200      procedure HandleRefreshTimer(Sender: TObject);
201 +    procedure SetDelayTimerValue(AValue: integer);
202    protected
203      procedure DoMasterChange; override;
204    public
205      constructor Create(ADataSet: TDataSet); override;
204    destructor Destroy; override;
206      property DelayTimerValue: integer {in Milliseconds}
207 <            read FDelayTimerValue write FDelayTimerValue;
207 >            read FDelayTimerValue write SetDelayTimerValue;
208    end;
209  
210   { TIBMasterDataLink }
211  
212   procedure TIBMasterDataLink.HandleRefreshTimer(Sender: TObject);
213   begin
214 <  FTimer.Interval := 0;
215 <  inherited DoMasterChange;
214 >  FTimer.Enabled := false;
215 >  if GetDetailDataSet.Active then
216 >    inherited DoMasterChange;
217 > end;
218 >
219 > procedure TIBMasterDataLink.SetDelayTimerValue(AValue: integer);
220 > begin
221 >  if FDelayTimerValue = AValue then Exit;
222 >  if assigned(FTimer) then
223 >    FTimer.Enabled := false;
224 >  FDelayTimerValue := AValue;
225   end;
226  
227   procedure TIBMasterDataLink.DoMasterChange;
228   begin
229 <  if FDelayTimerValue = 0 then
230 <    inherited DoMasterChange
221 <  else
229 >  if assigned(FTimer) and (FDelayTimerValue > 0) then
230 >  with FTimer do
231    begin
232 +    FTimer.Enabled := false;
233      FTimer.Interval := FDelayTimerValue;
234 <    FTimer.StartTimer;
235 <  end;
234 >    FTimer.Enabled := true;
235 >  end
236 >  else
237 >    inherited DoMasterChange
238   end;
239  
240   constructor TIBMasterDataLink.Create(ADataSet: TDataSet);
241   begin
242    inherited Create(ADataSet);
243 <  FTimer := TFPTimer.Create(nil);
244 <  FTimer.Enabled := true;
245 <  FTimer.Interval := 0;
246 <  FTimer.OnTimer := HandleRefreshTimer;
243 >  if assigned(IBGUIInterface) then
244 >  begin
245 >    FTimer := IBGUIInterface.CreateTimer;
246 >    if FTimer <> nil then
247 >    begin
248 >      FTimer.Enabled := false;
249 >      FTimer.Interval := 0;
250 >      FTimer.OnTimer := HandleRefreshTimer;
251 >    end;
252 >  end;
253    FDelayTimerValue := 0;
254   end;
255  
238 destructor TIBMasterDataLink.Destroy;
239 begin
240  if assigned(FTimer) then FTimer.Free;
241  inherited Destroy;
242 end;
243
256   { TIBTable }
257  
258   constructor TIBTable.Create(AOwner: TComponent);
# Line 541 | Line 553 | var
553          ExtractIdentifier(Database.SQLDialect,
554            QuoteIdentifier(DataBase.SQLDialect, Name)) +
555          ''' ' +
556 <        'AND RDB$CONSTRAINT_TYPE = ''PRIMARY KEY''';
556 >        'AND Trim(RDB$CONSTRAINT_TYPE) = ''PRIMARY KEY''';
557        Query.Prepare;
558        Query.ExecQuery;
559        if not Query.EOF then
# Line 735 | Line 747 | begin
747      Query.Database := DataBase;
748      Query.Transaction := Database.InternalTransaction;
749      Query.SQL.Text :=
750 <    'Select USER from RDB$RELATIONS where RDB$RELATION_NAME = ' + {do not localize}
750 >    'Select USER from RDB$RELATIONS where Trim(RDB$RELATION_NAME) = ' + {do not localize}
751      '''' +
752      ExtractIdentifier(Database.SQLDialect,
753        QuoteIdentifier(DataBase.SQLDialect, FTableName)) + '''';
# Line 850 | Line 862 | var
862              FieldList := FieldList +
863                QuoteIdentifier(DataBase.SQLDialect, Name) +
864                ' BLOB SUB_TYPE 0'; {do not localize}
865 +          ftFmtBCD:
866 +            if Database.Attachment.HasDecFloatSupport then
867 +              FieldList := FieldList +
868 +                QuoteIdentifier(DataBase.SQLDialect, Name) +
869 +                ' Decfloat(34)' {do not localize}
870 +            else
871 +              IBError(ibxeFieldUnsupportedType,[nil]);
872            ftUnknown, ftADT, ftArray, ftReference, ftDataSet,
873            ftCursor, ftWideString, ftAutoInc:
874              IBError(ibxeFieldUnsupportedType,[nil]);
# Line 946 | Line 965 | begin
965      if Active then
966      begin
967        ClearBuffers;
968 +      ResetBufferCache;
969        DataEvent(deDataSetChange, 0);
970      end;
971    finally
# Line 982 | Line 1002 | begin
1002      Query.Database := DataBase;
1003      Query.Transaction := Database.InternalTransaction;
1004      Query.SQL.Text := 'Select RDB$SYSTEM_FLAG, RDB$DBKEY_LENGTH ' + {do not localize}
1005 <                    'from RDB$RELATIONS where RDB$RELATION_NAME = ' + {do not localize}
1005 >                    'from RDB$RELATIONS where Trim(RDB$RELATION_NAME)  = ' + {do not localize}
1006                      '''' +
1007                      ExtractIdentifier(Database.SQLDialect,
1008                        QuoteIdentifier(DataBase.SQLDialect, FTableName)) + '''';

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines