亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? datadrivereh.pas

?? 一個(gè)功能強(qiáng)大的DBGRID控件
?? PAS
?? 第 1 頁 / 共 5 頁
字號(hào):
    Result := nil;
end;
{$ENDIF}

function TDataDriverEh.ApplyUpdates(MemTableData: TMemTableDataEh): Integer;
var
  I: Integer;
  MemRec: TMemoryRecordEh;
  Action: TUpdateErrorActionEh;
//  UpdateKind: TUpdateKind;

  procedure ApplyUpdate;
  begin
    while True do
    begin
      try
        UpdateRecord(MemTableData, MemRec);
        Result := Result + 1;
      except
        on E: EDatabaseError do
        begin
          if Assigned(OnUpdateError)
            then OnUpdateError(Self, MemRec.RecordsList.MemTableData, MemRec, Action)
            else DefaultUpdateError(MemRec.RecordsList.MemTableData, MemRec, Action);

          if Action = ueaBreakRaiseEh then
            raise
          else begin
            if MemRec.UpdateError <> nil then
              MemRec.UpdateError.Free;
            MemRec.UpdateError := TUpdateErrorEh.Create(E);
{$IFNDEF CIL}
            AcquireExceptionObject;
{$ENDIF}
            if Action = ueaRetryEh
              then Continue
              else Break;
          end;
        end;
      end;
      Break;
    end;
  end;

begin
  Result := 0;
  for I := 0 to MemTableData.RecordsList.DeltaList.Count-1 do
  begin
    MemRec := TMemoryRecordEh(MemTableData.RecordsList.DeltaList[I]);
    if MemRec = nil then Continue;
    Action := ueaBreakRaiseEh;
    ApplyUpdate;
    if Action = ueaBreakAbortEh then
      Break;
    if Action <> ueaCountinueSkip then
      MemRec.MergeChanges;
//ueaBreakAbortEh, ueaBreakRaiseEh, ueaCountinueEh, ueaRetryEh
  end;

  MemTableData.RecordsList.CleanupChangedRecs;
end;

procedure TDataDriverEh.DefaultUpdateError(MemTableData: TMemTableDataEh;
  MemRec: TMemoryRecordEh; var Action: TUpdateErrorActionEh);
begin
  Action := ueaBreakRaiseEh;
end;

procedure TDataDriverEh.UpdateRecord(MemTableData: TMemTableDataEh; MemRec: TMemoryRecordEh);
begin
  if Assigned(OnUpdateRecord)
    then OnUpdateRecord(Self, MemTableData, MemRec)
    else DefaultUpdateRecord(MemTableData, MemRec);
end;

function TDataDriverEh.DefaultUpdateRecord(MemTableData: TMemTableDataEh; MemRec: TMemoryRecordEh): Integer;
var
  vOldValues: Variant;
  i: Integer;
  KeyFound: Boolean;
  Bookmark: TBookmarkStr;
  ProviderField: TField;
  UsedKeyFields: String;
begin
  Result := 0;
  if ResolveToDataSet and (ProviderDataSet <> nil) then
  begin
    Bookmark := ProviderDataSet.Bookmark;
    try
    if KeyFields <> '' then
      UsedKeyFields := KeyFields
    else
    begin
      UsedKeyFields := '';
      for i := 0 to ProviderDataSet.FieldCount - 1 do
        if i > 0
          then UsedKeyFields := UsedKeyFields + ';' + ProviderDataSet.Fields[i].FieldName
          else UsedKeyFields := ProviderDataSet.Fields[i].FieldName;
    end;

    if MemRec.UpdateStatus in [usModified, usDeleted] then
    begin
      vOldValues := MemRec.DataValues[UsedKeyFields, dvvOldestValue];
      KeyFound := ProviderDataSet.Locate(UsedKeyFields, vOldValues, []);
      if KeyFound then
      begin
        if (DataSetCompareBookmarks(ProviderDataSet,
          ProviderDataSet.Bookmark, Bookmark) = 0) and
          (MemRec.UpdateStatus = usDeleted)
        then // Will not go to the deleted bookmark
          Bookmark := '';
      end;
    end else
      KeyFound := True;

    if KeyFound then
    begin

      if MemRec.UpdateStatus = usModified then
        ProviderDataSet.Edit
      else if MemRec.UpdateStatus = usInserted then
        ProviderDataSet.Insert
      else
        ProviderDataSet.Delete;

      if MemRec.UpdateStatus in [usModified, usInserted] then
      begin
        try
          with MemRec do
            for i := 0 to DataStruct.Count-1 do
            begin
              ProviderField := ProviderDataSet.FindField(DataStruct[i].FieldName);
              if Assigned(ProviderField) and not ProviderField.ReadOnly then
                ProviderField.Value := Value[i, dvvValueEh];
            end;
          ProviderDataSet.Post;
        except
          on E: EDatabaseError do
          begin
            if ProviderDataSet.State in dsEditModes then
              ProviderDataSet.Cancel;
            raise;
          end;
        end;
//        if RefreshRecord then
//        begin
          MemRec.Edit;
          for i := 0 to MemRec.DataStruct.Count-1 do
            begin
              ProviderField := ProviderDataSet.FindField(MemRec.DataStruct[i].FieldName);
              if Assigned(ProviderField) and not ProviderField.ReadOnly then
                MemRec.Value[i, dvvValueEh] := ProviderField.Value;
            end;
          MemRec.Post;
//        end;
      end;

      Result := 1;
    end;
    finally
      if (Bookmark <> '') and DataSetBookmarkValid(ProviderDataSet, Bookmark) then
        ProviderDataSet.Bookmark := Bookmark;
    end;

//    MemRec.MergeChanges;
  end;
end;

procedure TDataDriverEh.ConsumerClosed(ConsumerDataSet: TDataSet);
begin
  if (ProviderDataSet <> nil) then
    ProviderDataSet.Close;
  ProviderEOF := True;
end;

function TDataDriverEh.RefreshReaderParamsFromCursor(DataSet: TDataSet): Boolean;
var
  FParams: TParams;
  Field: TField;
  I: Integer;
begin
  Result := False;
  FParams := nil;
{$IFDEF EH_LIB_5}
  if (ProviderDataSet <> nil) then
    FParams := IProviderSupport(ProviderDataSet).PSGetParams();
  if FParams <> nil then
    for I := 0 to FParams.Count - 1 do
    begin
      Field := DataSet.FindField(FParams[I].Name);
      if (Field <> nil) and not VarEquals(Field.Value, FParams[I].Value) then
      begin
        Result := True;
        Break;
      end;
    end;
{$ENDIF}
end;

procedure TDataDriverEh.SetReaderParamsFromCursor(DataSet: TDataSet);
var
  I: Integer;
  FParams: TParams;
begin
  FParams := nil;
{$IFDEF EH_LIB_5}
  if (ProviderDataSet <> nil) then
    FParams := IProviderSupport(ProviderDataSet).PSGetParams();
  if FParams <> nil then
  begin
    DataSet.FieldDefs.Update;
    for I := 0 to FParams.Count - 1 do
      with FParams[I] do
        if not Bound then
        begin
          AssignField(DataSet.FieldByName(Name));
          Bound := False;
        end;
  end;
{$ENDIF}
end;

procedure TDataDriverEh.BuildDataStruct(DataStruct: TMTDataStructEh);
var
  DS: TDataSet;
begin
  if Assigned(FOnBuildDataStruct) then
    OnBuildDataStruct(Self, DataStruct)
  else if Assigned(FOnProduceDataReader) then
  begin
    DS := GetDataReader;
    DataStruct.BuildStructFromFields(DS.Fields);
  end else
    DefaultBuildDataStruct(DataStruct);
end;

procedure TDataDriverEh.DefaultBuildDataStruct(DataStruct: TMTDataStructEh);
begin
  if (ReaderDataSet <> nil) then
  begin
    DataStruct.BuildStructFromFields(ReaderDataSet.Fields);
    SetAutoIncFields(ReaderDataSet.Fields, DataStruct);
  end else if (ProviderDataSet <> nil) then
  begin
    if ProviderDataSet.FieldCount > 0 then
      DataStruct.BuildStructFromFields(ProviderDataSet.Fields)
    else
    begin
      ProviderDataSet.Active := True;
      DataStruct.BuildStructFromFields(ProviderDataSet.Fields);
      ProviderDataSet.Active := False;
    end;
    SetAutoIncFields(ProviderDataSet.Fields, DataStruct);
  end;
end;

procedure TDataDriverEh.Notification(AComponent: TComponent; Operation: TOperation);
begin
  inherited Notification(AComponent, Operation);
  if (Operation = opRemove) then
  begin
    if AComponent = FProviderDataSet then
      ProviderDataSet := nil;
  end;
end;

function TDataDriverEh.GetDataReader: TDataSet;
begin
  if FReaderDataSet <> nil then
    Result := FReaderDataSet
  else
  begin
    FReaderDataSetFreeOnEof := False;
    ProviderEOF := False;
    if Assigned(FOnProduceDataReader) then
      OnProduceDataReader(Self, FReaderDataSet, FReaderDataSetFreeOnEof)
    else
      DefaultProduceDataReader(FReaderDataSet, FReaderDataSetFreeOnEof);
    Result := FReaderDataSet;
  end;
end;

procedure TDataDriverEh.DefaultProduceDataReader(var DataSet: TDataSet; var FreeOnEof: Boolean);
begin
  if (ProviderDataSet <> nil) then
  begin
    ProviderDataSet.Active := True;
    ProviderDataSet.First;
    FreeOnEof := False;
    DataSet := ProviderDataSet;
  end;
end;

function TDataDriverEh.ReadData(MemTableData: TMemTableDataEh; Count: Integer): Integer;
var
  Rec: TMemoryRecordEh;
  AProviderEOF: Boolean;
begin
  Result := 0;
  if ProviderEOF = True then Exit;
  while Count <> 0 do
  begin
    Rec := MemTableData.RecordsList.NewRecord;
    try
      if Assigned(OnReadRecord)
        then OnReadRecord(Self, MemTableData, Rec, AProviderEOF)
        else DefaultReadRecord(MemTableData, Rec, AProviderEOF);
    except
      Rec.Free;
      raise;
    end;
    ProviderEOF := AProviderEOF;
    if ProviderEOF
      then Rec.Free
      else MemTableData.RecordsList.FetchRecord(Rec);

    Inc(Result);
    if ProviderEOF then Exit;
    Dec(Count);
  end;
end;

procedure TDataDriverEh.DefaultReadRecord(MemTableData: TMemTableDataEh;
  Rec: TMemoryRecordEh; var ProviderEOF: Boolean);
var
  i: Integer;
begin
  ProviderEOF := False;
  if (ReaderDataSet = nil) or
   ((ReaderDataSet <> nil) and not ReaderDataSet.Active) or
   ((ReaderDataSet <> nil) and ReaderDataSet.Active and ReaderDataSet.Eof)
  then
    ProviderEOF := True;
  if (ReaderDataSet = nil) or (ProviderEOF = True) then
    Exit;

  for i := 0 to Rec.DataStruct.Count-1 do
    AssignFieldValue(MemTableData, Rec, i, dvvValueEh, ReaderDataSet);

  ReaderDataSet.Next;
end;

procedure TDataDriverEh.AssignFieldValue(MemTableData: TMemTableDataEh;
  MemRec: TMemoryRecordEh; DataFieldIndex: Integer;
  DataValueVersion: TDataValueVersionEh; ReaderDataSet: TDataSet);
begin
  if Assigned(OnAssignFieldValue)
    then OnAssignFieldValue(Self, MemTableData, MemRec, DataFieldIndex, DataValueVersion, ReaderDataSet)
    else DefaultAssignFieldValue(MemTableData, MemRec, DataFieldIndex, DataValueVersion, ReaderDataSet);
end;

procedure TDataDriverEh.DefaultAssignFieldValue(MemTableData: TMemTableDataEh;
  MemRec: TMemoryRecordEh; DataFieldIndex: Integer;
  DataValueVersion: TDataValueVersionEh; ReaderDataSet: TDataSet);
var
  Field: TField;
begin
  Field := ReaderDataSet.FindField(MemRec.DataStruct[DataFieldIndex].FieldName);
  if Field <> nil then

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
天天操天天综合网| 人人狠狠综合久久亚洲| 5月丁香婷婷综合| 国产91丝袜在线播放0| 亚洲一区二区综合| 久久精品人人做人人综合| 欧美日韩大陆在线| 色婷婷狠狠综合| 国产成人精品www牛牛影视| 99久久99久久精品免费观看| 日本女优在线视频一区二区| 一区二区三区四区在线免费观看| 久久这里只有精品视频网| 678五月天丁香亚洲综合网| 色呦呦日韩精品| 粉嫩嫩av羞羞动漫久久久| 久久99久久精品| 日本亚洲欧美天堂免费| 亚洲午夜一区二区三区| 亚洲视频一区二区在线| 国产精品欧美极品| 国产亚洲制服色| 久久久九九九九| 精品国产伦一区二区三区观看体验| 欧美精品18+| 欧美日高清视频| 欧美三区在线观看| 在线亚洲一区二区| 日本韩国精品在线| 色婷婷国产精品综合在线观看| 成人h动漫精品一区二| 国产精品综合一区二区| 激情综合色综合久久| 激情小说欧美图片| 精品一区二区三区蜜桃| 激情五月婷婷综合| 久久精品99久久久| 毛片一区二区三区| 久久av资源网| 蜜臀av性久久久久蜜臀av麻豆| 午夜影院久久久| 午夜精品免费在线| 日本不卡在线视频| 美国av一区二区| 国产麻豆午夜三级精品| 国产精品乡下勾搭老头1| 国产成人在线视频网址| 成人免费毛片a| 99久久99久久精品免费看蜜桃| 91丝袜呻吟高潮美腿白嫩在线观看| www.色精品| 欧日韩精品视频| 欧美日韩黄视频| 宅男噜噜噜66一区二区66| 欧美一区二区网站| 欧美精品一区二区三区蜜桃| 久久蜜桃av一区精品变态类天堂 | 在线播放欧美女士性生活| 欧美日本在线一区| 日韩欧美电影在线| 国产亚洲视频系列| 亚洲欧美色综合| 亚洲成人av一区| 狠狠色狠狠色综合| 国产婷婷色一区二区三区四区 | 亚洲成精国产精品女| 日一区二区三区| 国产一区二区三区香蕉| www.激情成人| 欧美日韩成人在线一区| 精品久久久久久久久久久院品网 | 91麻豆国产香蕉久久精品| 欧美系列亚洲系列| 精品三级av在线| 国产精品国产自产拍高清av| 亚洲一区二区视频在线观看| 免费日本视频一区| 97精品久久久午夜一区二区三区 | 欧美自拍偷拍一区| 日韩精品一区二区三区四区| 国产精品麻豆网站| 日韩精品亚洲一区| www.日本不卡| 日韩视频一区二区在线观看| 亚洲欧美怡红院| 免费精品视频在线| 色综合久久久久| 精品粉嫩超白一线天av| 亚洲九九爱视频| 国产主播一区二区| 欧美视频一区二区三区| 国产日韩精品一区二区浪潮av| 亚洲国产美国国产综合一区二区| 精品亚洲aⅴ乱码一区二区三区| 91免费在线视频观看| 26uuuu精品一区二区| 洋洋成人永久网站入口| 国产精品18久久久久久久网站| 在线观看免费成人| 国产精品理论片在线观看| 久久精品国产久精国产| 色婷婷精品久久二区二区蜜臂av| 久久综合狠狠综合久久激情| 天堂在线一区二区| av成人老司机| 国产午夜精品一区二区三区视频| 香蕉久久夜色精品国产使用方法 | 夜夜揉揉日日人人青青一国产精品 | 欧美日精品一区视频| 国产欧美一区二区在线| 毛片不卡一区二区| 在线播放日韩导航| 尤物av一区二区| 99麻豆久久久国产精品免费优播| 日韩免费电影一区| 丝瓜av网站精品一区二区| 99re这里只有精品首页| 久久久久久免费网| 91精品免费观看| 亚洲已满18点击进入久久| 国产精品自拍在线| 精品国产91亚洲一区二区三区婷婷| 亚洲国产日韩一级| 日本乱人伦一区| 中文字幕在线播放不卡一区| 国产aⅴ综合色| 久久尤物电影视频在线观看| 免费在线观看不卡| 日韩一区二区三区四区| 视频一区二区不卡| 欧美精品第1页| 视频一区免费在线观看| 欧美精品色综合| 日韩av电影一区| 日韩亚洲欧美成人一区| 免费在线观看一区| 精品国产一区二区三区忘忧草| 婷婷综合五月天| 这里只有精品免费| 男人的j进女人的j一区| 91精品免费在线| 久久精品国产久精国产| 精品国产成人在线影院 | 欧美在线免费播放| 亚洲已满18点击进入久久| 欧美日韩一卡二卡| 秋霞午夜鲁丝一区二区老狼| 欧美电影精品一区二区| 337p亚洲精品色噜噜噜| 久久精品国产成人一区二区三区| 日韩女优电影在线观看| 国产成人鲁色资源国产91色综| 国产欧美日韩精品在线| 91丨porny丨最新| 亚洲成av人片观看| 欧美一级xxx| 国产v综合v亚洲欧| 亚洲精品视频免费看| 欧美亚洲一区二区三区四区| 日韩在线播放一区二区| 欧美精品一区二区久久婷婷| 国产激情一区二区三区桃花岛亚洲| 国产精品麻豆99久久久久久| 在线视频国内自拍亚洲视频| 丝袜亚洲精品中文字幕一区| 精品久久久久久最新网址| 成人黄色电影在线| 亚洲第一主播视频| 精品日本一线二线三线不卡| 白白色亚洲国产精品| 无码av免费一区二区三区试看| 精品国产精品一区二区夜夜嗨| 成人国产免费视频| 五月婷婷色综合| 国产欧美一区二区精品性色| 色综合中文字幕国产| 日本免费新一区视频 | 蜜臂av日日欢夜夜爽一区| 国产欧美一区二区精品久导航| 91浏览器打开| 久久www免费人成看片高清| 亚洲欧美一区二区在线观看| 91精品国产综合久久精品app | 亚洲成av人片在线观看无码| 2020国产精品| 欧美三级乱人伦电影| 国产乱妇无码大片在线观看| 亚洲国产精品久久人人爱蜜臀| 精品sm捆绑视频| 欧美亚洲国产一卡| 国产精品1区2区| 免费观看日韩电影| av亚洲产国偷v产偷v自拍| 蜜臀久久99精品久久久久宅男| 中文字幕五月欧美| 精品国产乱码久久久久久影片| 欧美综合久久久| 91在线国产观看| 国产乱子伦视频一区二区三区| 亚洲国产精品欧美一二99|