function ADODataSetDriverName(DataSet: TADODataSet): String; begin //Result := 'MSACCESS'; Result := 'MSSQL'; end;
function DateValueToADOSQLStringProc(DataSet: TDataSet; Value: Variant): String; begin Result := DateValueToDataBaseSQLString(ADODataSetDriverName(TADODataSet(DataSet)), Value) end;
procedure SortDataInADODataSet(Grid: TCustomDBGridEh; DataSet: TCustomADODataSet); var s: String; i: Integer; begin s := '; for i := 0 to Grid.SortMarkedColumns.Count - 1 do begin s := s + Grid.SortMarkedColumns[i].FieldName; if Grid.SortMarkedColumns[i].Title.SortMarker = smUpEh then s := s + ' DESC, ' else s := s + ', '; end; DataSet.Sort := Copy(s, 1, Length(s) - 2); end;
procedure TADOSQLDatasetFeaturesEh.ApplySorting(Sender: TObject; DataSet: TDataSet; IsReopen: Boolean); begin if Sender is TCustomDBGridEh then if TCustomDBGridEh(Sender).SortLocal then SortDataInADODataSet(TCustomDBGridEh(Sender), TCustomADODataSet(DataSet)) else inherited ApplySorting(Sender, DataSet, IsReopen); end;
procedure TADOCommandTextDatasetFeaturesEh.ApplySorting(Sender: TObject; DataSet: TDataSet; IsReopen: Boolean); begin if Sender is TCustomDBGridEh then if TCustomDBGridEh(Sender).SortLocal then SortDataInADODataSet(TCustomDBGridEh(Sender), TCustomADODataSet(DataSet)) else inherited ApplySorting(Sender, DataSet, IsReopen); end;
function BDEDataSetDriverName(DataSet: TBDEDataSet): String; var hCur: hDBICur; rslt: DBIResult; {$IFDEF CIL} {$ELSE} Descs: STMTBaseDesc; {$ENDIF} dbDes: DBDesc; begin hCur := nil; try // Look at DbiQGetBaseDescs in the BDE32.HLP for more information... {$IFDEF CIL} if DataSet is TQuery then Check(DbiQGetBaseDescs(TQuery(DataSet).STMTHandle, hCur)) else begin Result := '; Exit; end; { TODO : How to get DriverName under Delphi8??? } Exit; // rslt := DbiGetNextRecord(hCur, dbiNOLOCK, Descs, nil); // Check(DbiGetDatabaseDesc(Descs.szDatabase, dbDes)); {$ELSE} Check(DbiQGetBaseDescs(TBDEDataSetCrack(DataSet).STMTHandle, hCur)); rslt := DbiGetNextRecord(hCur, dbiNOLOCK, @Descs, nil); Check(DbiGetDatabaseDesc(Descs.szDatabase, @dbDes)); {$ENDIF} if (rslt = DBIERR_NONE) then // Look at STMTBaseDescs in the BDE32.HLP for more information... Result := dbDes.szDbType; finally if (hCur <> nil) then check(DbiCloseCursor(hCur)); end; end;
function DateValueToBDESQLStringProc(DataSet: TDataSet; Value: Variant): String; begin Result := DateValueToDataBaseSQLString(BDEDataSetDriverName(TBDEDataSet(DataSet)), Value) end;
type TBDEDatasetFeaturesEh = class(TSQLDatasetFeaturesEh) public procedure ApplyFilter(Sender: TObject; DataSet: TDataSet; IsReopen: Boolean); override; end;
{ TBDEDatasetFeaturesEh }
procedure TBDEDatasetFeaturesEh.ApplyFilter(Sender: TObject; DataSet: TDataSet; IsReopen: Boolean); begin if TDBGridEh(Sender).STFilter.Local then TDBGridEh(Sender).DataSource.DataSet.Filter := GetExpressionAsFilterString(TDBGridEh(Sender), GetOneExpressionAsLocalFilterString, nil) else ApplyFilterSQLBasedDataSet(TDBGridEh(Sender), DateValueToBDESQLStringProc, IsReopen, 'SQL'); end;