|
.FieldByName(List.FFieldName[I]); except Field := nil; end; end else Field := nil; if Assigned(Field) then begin if Field.DataType <> ftString then List[I].DataType := Field.DataType else if TStringField(Field).FixedChar then List[I].DataType := ftFixedChar else List[I].DataType := ftString; end; end; except // ignore all exceptions end; finally DataSet.Free; end; finally if List.Count > 0 then Params.Assign(List); List.Free; end; end; end;
procedure TBDEClientDataSet.SetSQL(const Value: string); begin if Assigned(Provider.DataSet) then begin TQuery(Provider.DataSet).SQL.Clear; if Value <> '''''''' then TQuery(Provider.DataSet).SQL.Add(Value); inherited SetCommandText(Value); end else DataBaseError(SNoDataProvider); end;
procedure TBDEClientDataSet.Loaded; begin inherited Loaded; if FStreamedActive then begin SetActive(True); FStreamedActive := False; end; end;
function TBDEClientDataSet.GetMasterFields: string; begin Result := inherited MasterFields; end;
procedure TBDEClientDataSet.SetMasterFields(const Value: string); begin inherited MasterFields := Value; if Value <> '''''''' then IndexFieldNames := Value; FDataSet.FKeyFields := ''''''''; end;
procedure TBDEClientDataSet.SetCommandText(Value: String); begin inherited SetCommandText(Value); FCommandText := Value; if not (csLoading in ComponentState) then begin FDataSet.FKeyFields := ''''''''; IndexFieldNames := ''''''''; MasterFields := ''''''''; IndexName := ''''''''; IndexDefs.Clear; Params.Clear; if (csDesigning in ComponentState) and (Value <> '''''''') then SetParamsFromSQL(Value); end; end;
function TBDEClientDataSet.GetConnection: TDatabase; begin Result := FDataBase; end;
procedure TBDEClientDataSet.SetConnection(Value: TDataBase); begin if Value = FDatabase then exit; CheckInactive; if Assigned(Value) then begin if not (csLoading in ComponentState) and (Value.DatabaseName = '''''''') then DatabaseError(SDatabaseNameMissing); FDataSet.DatabaseName := Value.DatabaseName; end else FDataSet.DataBaseName := ''''''''; FDataBase := Value; end;
function TBDEClientDataSet.GetQuoteChar: String; begin Result := ''''''''; if Assigned(FDataSet) then Result := FDataSet.PSGetQuoteChar; end;
procedure TBDEClientDataSet.CloneCursor(Source: TCustomClientDataSet; Reset: Boolean; KeepSettings: Boolean = False); begin if not (Source is TBDEClientDataSet) then DatabaseError(SInvalidClone); Provider.DataSet := TBDEClientDataSet(Source).Provider.DataSet; DBConnection := TBDEClientDataSet(Source).DBConnection; CommandText := TBDEClientDataSet(Source).CommandText; inherited CloneCursor(Source, Reset, KeepSettings); end;
procedure TBDEClientDataSet.Notification(AComponent: TComponent; Operation: TOperation); begin inherited Notification(AComponent, Operation); if Operation = opRemove then if AComponent = FDatabase then begin FDataBase := nil; SetActive(False); end; end;
procedure TBDEClientDataSet.SetLocalParams;
procedure CreateParamsFromMasterFields(Create: Boolean); var I: Integer; List: TStrings; begin List := TStringList.Create; try if Create then FLocalParams.Clear; FDataSet.FKeyFields := MasterFields; List.CommaText := MasterFields; for I := 0 to List.Count -1 do begin if Create then FLocalParams.CreateParam( ftUnknown, MasterSource.DataSet.FieldByName(List[I]).FieldName, ptInput); FLocalParams[I].AssignField(MasterSource.DataSet.FieldByName(List[I])); end; finally List.Free; end; end;
begin if (MasterFields <> '''''''') and Assigned(MasterSource) and Assigned(MasterSource.DataSet) then begin CreateParamsFromMasterFields(True); FCurrentCommand := AddParamSQLForDetail(FLocalParams, CommandText, True, GetQuoteChar); end; end;
procedure TBDEClientDataSet.SetDataSource(Value: TDataSource); begin inherited MasterSource := Value; if Assigned(Value) then begin if PacketRecords = -1 then PacketRecords := 0; end else begin if PacketRecords = 0 then PacketRecords := -1; end; end;
function TBDEClientDataSet.GetMasterSource: TDataSource; begin Result := inherited MasterSource; end;
procedure TBDEClientDataSet.SetDetailsActive(Value: Boolean); var DetailList: TList; I: Integer; begin DetailList := TList.Create; try GetDetailDataSets(DetailList); for I := 0 to DetailList.Count -1 do if TDataSet(DetailList[I]) is TBDEClientDataSet then TBDEClientDataSet(TDataSet(DetailList[I])).Active := Value; finally DetailList.Free; end; end;
procedure TBDEClientDataSet.SetActive(Value: Boolean); begin if Value then begin if csLoading in ComponentState then begin FStreamedActive := True; exit; end; if MasterFields <> '''''''' then begin if not (csLoading in ComponentState) then CheckMasterSourceActive(MasterSource); SetLocalParams; SetSQL(FCurrentCommand); Params := FLocalParams; FetchParams; end else begin SetSQL(FCommandText); if Params.Count > 0 then begin FDataSet.Params := Params; FetchParams; end; end; end; if Value and (FDataSet.ObjectView <> ObjectView) then FDataSet.ObjectView := ObjectView; inherited SetActive(Value); SetDetailsActive(Value); end;
procedure Register; begin RegisterComponents(''''BDE'''', [TBDEClientDataSet]); end;
end.
//以上经DBLocalB.pas改装而成,可存为任意文件名,当然扩展名是PAS //然后安装此控件即可
上一页 [1] [2] 没有相关教程
|