cxdbdata.pas
来自「胜天进销存源码,国产优秀的进销存」· PAS 代码 · 共 1,895 行 · 第 1/5 页
PAS
1,895 行
end;
{$ENDIF}
Provider.LayoutChanged([lcStructure, lcData]);
{$IFDEF DELPHI7}
FLayoutChangedFlag := False;
{$ENDIF}
end;
procedure TcxDBDataLink.RecordChanged(Field: TField);
begin
Provider.RecordChanged(Field);
end;
procedure TcxDBDataLink.UpdateData;
begin
Provider.DoUpdateData;
// A2136!!!
// if Provider.IsSmartRefresh then
RecordChanged(nil);
Provider.ResetChanging;
end;
procedure TcxDBDataLink.DoInsertingRecord;
begin
Provider.FInInserting := True;
try
Provider.InsertingRecord(Provider.IsEOF and not Provider.FInsertOperation);
finally
Provider.FInInserting := False;
end;
end;
{ TcxDBDataAssignedFieldNames }
constructor TcxDBDataAssignedFields.Create;
begin
inherited;
FFields := TList.Create;
end;
destructor TcxDBDataAssignedFields.Destroy;
begin
FFields.Free;
FFields := nil;
inherited Destroy;
end;
procedure TcxDBDataAssignedFields.AddField(AField: TField);
begin
if FFields.IndexOf(AField) = -1 then
FFields.Add(AField);
end;
procedure TcxDBDataAssignedFields.AddFieldsByFieldList(AFieldList: TList);
var
I: Integer;
begin
for I := 0 to AFieldList.Count - 1 do
if AFieldList[I] <> nil then
FFields.Add(AFieldList[I]);
end;
procedure TcxDBDataAssignedFields.AddFieldsByFieldNames(ADataSet: TDataSet; const AFieldNames: string);
begin
ADataSet.GetFieldList(FFields, AFieldNames);
end;
procedure TcxDBDataAssignedFields.Clear;
begin
FFields.Clear;
end;
function TcxDBDataAssignedFields.IsEmpty: Boolean;
begin
Result := FFields.Count = 0;
end;
function TcxDBDataAssignedFields.IsFieldExists(AField: TField): Boolean;
begin
Result := FFields.IndexOf(AField) <> -1;
end;
{ TcxDBDataProvider }
constructor TcxDBDataProvider.Create(ADataController: TcxCustomDataController);
begin
inherited Create(ADataController);
FAssignedFields := TcxDBDataAssignedFields.Create;
if DBDataProviders = nil then
DBDataProviders := TList.Create;
DBDataProviders.Add(Self);
FDataLink := TcxDBDataLink.Create(Self);
FUpdatingRecordIndex := cxNullEditingRecordIndex;
FUpdatingNewRecordIndex := -1;
FListeners := TList.Create;
end;
destructor TcxDBDataProvider.Destroy;
begin
RemoveFromListeners;
FListeners.Free;
FListeners := nil;
FDataLink.Free;
FDataLink := nil;
DBDataProviders.Remove(Self);
if DBDataProviders.Count = 0 then
begin
DBDataProviders.Free;
DBDataProviders := nil;
end;
FAssignedFields.Free;
FAssignedFields := nil;
inherited Destroy;
end;
function TcxDBDataProvider.IsCanInitEditingBusy: Boolean;
var
I: Integer;
ADBDataProvider: TcxDBDataProvider;
begin
Result := False;
for I := 0 to DBDataProviders.Count - 1 do
begin
ADBDataProvider := TcxDBDataProvider(DBDataProviders[I]);
if (ADBDataProvider.DataSet = Self.DataSet) and
ADBDataProvider.FInCanInitEditing then
begin
Result := True;
Break;
end;
end;
end;
function TcxDBDataProvider.IsDataSetBusy: Boolean;
var
I: Integer;
ADBDataProvider: TcxDBDataProvider;
begin
Result := False;
for I := 0 to DBDataProviders.Count - 1 do
begin
ADBDataProvider := TcxDBDataProvider(DBDataProviders[I]);
if {(ADBDataProvider <> Self) and}
(ADBDataProvider.DataSet = Self.DataSet) and
((ADBDataProvider.LockCount <> 0) or ADBDataProvider.FInNotify or
((Self.IsKeyNavigation or Self.DataController.IsGridMode) and (ADBDataProvider.LocateCount <> 0))) then
begin
if ADBDataProvider.FInNotify then
begin
if not FPostLocateFlag then
Result := True;
end
else
if not FPostLocateFlag then
begin
Result := True;
if Self.DataController.IsGridMode and (Self.DataController.LockGridModeNotifyCount <> 0) then
Result := False;
end;
Break;
end;
end;
end;
function TcxDBDataProvider.IsDetailDataSetBusy: Boolean;
var
I: Integer;
ADBDataProvider: TcxDBDataProvider;
begin
Result := False;
for I := 0 to DBDataProviders.Count - 1 do
begin
ADBDataProvider := TcxDBDataProvider(DBDataProviders[I]);
if (ADBDataProvider.DataSet = Self.DataSet) and
((ADBDataProvider.LockCount <> 0){ or ADBDataProvider.FInFirst}) and
ADBDataProvider.DataController.IsDetailMode {ADBDataProvider.FInFirst} then
begin
Result := True;
Break;
end;
end;
end;
function TcxDBDataProvider.IsOtherDataControllerUpdating: Boolean;
var
I: Integer;
ADBDataProvider: TcxDBDataProvider;
begin
Result := False;
for I := 0 to DBDataProviders.Count - 1 do
begin
ADBDataProvider := TcxDBDataProvider(DBDataProviders[I]);
if (ADBDataProvider <> Self) and
(ADBDataProvider.DataSet = Self.DataSet) and
((ADBDataProvider.LockCount <> 0) or
(Self.IsKeyNavigation and (ADBDataProvider.LocateCount <> 0))) then
begin
if ADBDataProvider.DataController.LockGridModeNotifyCount = 0 then
ADBDataProvider.AddListener(Self);
Result := True;
Break;
end;
end;
end;
function TcxDBDataProvider.IsOtherDetailDataSetInInsert: Boolean;
var
I: Integer;
ADBDataProvider: TcxDBDataProvider;
begin
Result := False;
for I := 0 to DBDataProviders.Count - 1 do
begin
ADBDataProvider := TcxDBDataProvider(DBDataProviders[I]);
if (ADBDataProvider <> Self) and (ADBDataProvider.DataSet = Self.DataSet) and
ADBDataProvider.FInInsert then
begin
Result := True;
Break;
end;
end;
end;
function TcxDBDataProvider.IsOtherDetailChanged: Boolean;
begin
Result := DataController.IsOtherDetailChanged;
end;
function TcxDBDataProvider.IsUniDirectional: Boolean;
begin
{$IFDEF DELPHI6}
if Assigned(DataSet) and DataSet.IsUniDirectional then
Result := True
else
{$ENDIF}
Result := False;
end;
function TcxDBDataProvider.IsCustomDataSourceSupported: Boolean;
begin
Result := False;
end;
function TcxDBDataProvider.IsGridMode: Boolean;
begin
Result := DataController.DataModeController.GridMode and
not IsUniDirectional and not FLoadAllNeeded and
{not DataController.IsDetailMode}
(DataController.DetailMode <> dcdmPattern);
end;
function TcxDBDataProvider.IsDataSource: Boolean;
begin
Result := (DataSet <> nil) and (DataSet.State <> dsInactive);
end;
function TcxDBDataProvider.IsKeyNavigation: Boolean;
begin
Result := DataController.IsKeyNavigation;
end;
function TcxDBDataProvider.IsOtherInsert: Boolean;
var
I: Integer;
ADBDataProvider: TcxDBDataProvider;
begin
Result := False;
for I := 0 to DBDataProviders.Count - 1 do
begin
ADBDataProvider := TcxDBDataProvider(DBDataProviders[I]);
if (ADBDataProvider <> Self) and
(ADBDataProvider.DataSet = Self.DataSet) and ADBDataProvider.FInInsert then
begin
Result := True;
Break;
end;
end;
end;
function TcxDBDataProvider.IsSyncInsert: Boolean;
begin
Result := not DataController.IsPattern and
DataController.DataModeController.SyncInsert and
IsSyncMode;
end;
function TcxDBDataProvider.IsSyncMode: Boolean;
begin
Result := Assigned(DataSet) and DataSet.Active and
(IsGridMode or DataController.DataModeController.SyncMode) and
not IsUniDirectional;
if DataController.IsDetailMode then
begin
if not DataController.DataModeController.DetailInSyncMode then
Result := False
else
if DataController.DataModeController.DetailInSQLMode then
begin
if not IsDataSetCurrent then
Result := False;
end
else
if not (IsKeyNavigation or IsGridMode) then
Result := False;
end;
end;
function TcxDBDataProvider.DataSet_ActiveRecord: Integer;
begin
Result := TDataSetAccess(DataSet).ActiveRecord;
end;
function TcxDBDataProvider.DataSet_BookmarkAvailable: Boolean;
begin
Result := TDataSetAccess(DataSet).BookmarkAvailable;
end;
function TcxDBDataProvider.DataSet_BufferCount: Integer;
begin
Result := TDataSetAccess(DataSet).BufferCount;
end;
function TcxDBDataProvider.IsActive: Boolean;
begin
Result := Assigned(DataSet) and DataSet.Active; // WARNING: DataLink.Active <> DataSet.Active!
Result := Result and not DataSet.ControlsDisabled;
end;
function TcxDBDataProvider.IsActiveDataSet: Boolean;
begin
Result := Assigned(DataSet) and (DataSet.FieldCount > 0) and
(DataSet.Active or not DataSet.DefaultFields);
end;
function TcxDBDataProvider.IsBOF: Boolean;
begin
if Assigned(DataSet) then
Result := DataSet.BOF or not DataLink.Active
else
Result := inherited IsBOF;
end;
function TcxDBDataProvider.IsChanging: Boolean;
begin
Result := inherited IsChanging;
end;
function TcxDBDataProvider.IsEditing: Boolean;
begin
if IsUnboundColumnMode then
Result := inherited IsEditing
else
Result := Assigned(DataSet) and (DataSet.State in dsEditModes);
end;
function TcxDBDataProvider.IsEOF: Boolean;
begin
if Assigned(DataSet) then
begin
with DataController do
begin
if IsDetailMode and not IsGridMode then
begin
if not VarIsEmpty(MasterDetailKeyValues) then
Result := DataSet.EOF or
(not (DataSet.State in dsEditModes) and
not VarEquals(GetDataSetValues(DataSet, MasterDetailKeyFields), MasterDetailKeyValues))
else
Result := True;
end
else
Result := DataSet.EOF or not DataLink.Active;
end;
end
else
Result := inherited IsEOF;
end;
function TcxDBDataPr
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?