Чтение онлайн

ЖАНРЫ

Советы по Delphi. Версия 1.4.3 от 1.1.2001

Озеров Валентин

Шрифт:

uses SysUtils, Classes, DB, DBTables, rxLookup, RxQuery;

{ TrxDBLookup }

procedure RefreshRXLookup(Lookup: TrxLookupControl);

procedure RefreshRXLookupLookupSource(Lookup: TrxLookupControl);

function RxLookupValueInteger(Lookup: TrxLookupControl): Integer;

{ TRxQuery }

{ Applicatable to SQL's without SELECT * syntax }

{ Inserts FieldName into first position in '%Order' macro and refreshes query }

procedure HandleOrderMacro(Query: TRxQuery; Field: TField);

{ Sets '%Order' macro, if defined, and refreshes query }

procedure InsertOrderBy(Query: TRxQuery; NewOrder: String);

{ Converts list of order fields if defined and refreshes query }

procedure UpdateOrderFields(Query: TQuery; OrderFields: TStrings);

implementation

uses vgUtils, vgDBUtl, vgBDEUtl;

{ TrxDBLookup refresh }

type TRXLookupControlHack = class(TrxLookupControl)

 property DataSource;

 property LookupSource;

 property Value;

 property EmptyValue;

end;

procedure RefreshRXLookup(Lookup: TrxLookupControl);

var SaveField: String;

begin

 with TRXLookupControlHack(Lookup) do begin

SaveField := DataField;

DataField := '';

DataField := SaveField;

 end;

end;

procedure RefreshRXLookupLookupSource(Lookup: TrxLookupControl);

var SaveField: String;

begin

 with TRXLookupControlHack(Lookup) do begin

SaveField := LookupDisplay;

LookupDisplay := '';

LookupDisplay := SaveField;

 end;

end;

function RxLookupValueInteger(Lookup: TrxLookupControl): Integer;

begin

 with TRXLookupControlHack(Lookup) do try

if Value <> EmptyValue then Result := StrToInt(Value)

else Result := 0;

 except

Result := 0;

 end;

end;

procedure InsertOrderBy(Query: TRxQuery; NewOrder: String);

var

 Param: TParam;

 OldActive: Boolean;

 OldOrder: String;

 Bmk: TPKBookMark;

begin

 Param := FindParam(Query.Macros, 'Order');

 if not Assigned(Param) then Exit;

 OldOrder := Param.AsString;

 if OldOrder <> NewOrder then begin

OldActive := Query.Active;

if OldActive then Bmk := GetPKBookmark(Query, '');

try

Query.Close;

Param.AsString := NewOrder;

try

Query.Prepare;

except

Param.AsString := OldOrder;

end;

Query.Active := OldActive;

if OldActive then SetToPKBookMark(Query, Bmk);

finally

if OldActive then FreePKBookmark(Bmk);

end;

 end;

end;

procedure UpdateOrderFields(Query: TQuery; OrderFields: TStrings);

var NewOrderFields: TStrings;

 procedure AddOrderField(S: String);

 begin

if NewOrderFields.IndexOf(S) < 0 then NewOrderFields.Add(S);

 end;

var

 I, J: Integer;

 Field: TField;

 FieldDef: TFieldDef;

 S: String;

begin

 NewOrderFields := TStringList.Create;

Поделиться с друзьями: