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

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

?? datadrivereh.pas

?? EHlib CN For Delphi2009
?? 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: TBookmark;
  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 := nil;
      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 <> nil) 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一区二区三区免费野_久草精品视频
www国产成人免费观看视频 深夜成人网 | 日韩欧美卡一卡二| 精品国产伦一区二区三区观看体验| 久久久.com| 一区二区三区精品在线观看| 青青草精品视频| 成人一区二区三区视频在线观看| 色婷婷综合五月| 精品美女被调教视频大全网站| 国产精品人人做人人爽人人添| 亚洲午夜激情av| 国产一区二区三区久久久| 91麻豆精品在线观看| 日韩视频在线观看一区二区| 国产精品五月天| 日韩不卡一区二区| 91尤物视频在线观看| 日韩欧美一级二级三级久久久| 国产精品毛片高清在线完整版| 日韩精品免费视频人成| 菠萝蜜视频在线观看一区| 欧美一区二区精品| 亚洲色图20p| 国产真实乱偷精品视频免| 欧美色图在线观看| 国产精品视频你懂的| 欧美aaa在线| 色天使色偷偷av一区二区| 久久综合国产精品| 亚洲成a人v欧美综合天堂| eeuss鲁片一区二区三区在线看| 日韩一区二区免费高清| 亚洲欧美另类久久久精品| 国产麻豆欧美日韩一区| 欧美喷水一区二区| 午夜不卡av在线| 欧美片网站yy| 国产精品视频免费| 精品中文字幕一区二区| 精品视频1区2区3区| 日韩码欧中文字| 国产成人av资源| 精品欧美一区二区久久| 天天操天天干天天综合网| 成人高清视频在线| 国产亚洲成aⅴ人片在线观看| 亚洲自拍偷拍av| 色综合色综合色综合色综合色综合 | 精品国产一区二区三区不卡| 亚洲成人动漫在线免费观看| 91国在线观看| 18涩涩午夜精品.www| 国产成人av资源| 久久久www成人免费毛片麻豆 | 日韩女优av电影| 天堂精品中文字幕在线| 欧美日韩久久久| 亚洲二区在线观看| 在线免费观看日韩欧美| 一区二区三区四区高清精品免费观看| 成人福利电影精品一区二区在线观看| 久久精品一区四区| 国产成人一区二区精品非洲| 久久久久久久久蜜桃| 国产最新精品精品你懂的| 欧美成人a在线| 久久成人免费网| 欧美mv日韩mv| 国内精品久久久久影院色| 久久免费看少妇高潮| 国产一区二区三区av电影| 精品国产sm最大网站| 国产乱码精品1区2区3区| 久久人人爽人人爽| 国产一区二区久久| 欧美激情综合五月色丁香| 成人黄色小视频| 亚洲日本乱码在线观看| 色婷婷久久久久swag精品 | 欧美性xxxxx极品少妇| 夜夜夜精品看看| 欧美色偷偷大香| 肉丝袜脚交视频一区二区| 欧美一卡二卡在线观看| 激情小说亚洲一区| 国产偷国产偷精品高清尤物| eeuss鲁片一区二区三区在线看| 亚洲婷婷在线视频| 欧美日韩免费一区二区三区| 三级欧美韩日大片在线看| 精品剧情v国产在线观看在线| 国产一区二区三区免费| 欧美日韩一级视频| 亚洲美女淫视频| 6080午夜不卡| 国产一二三精品| 国产精品理伦片| 欧美优质美女网站| 免费欧美高清视频| 亚洲国产高清在线观看视频| 色综合久久精品| 日本欧美大码aⅴ在线播放| www国产精品av| 一本色道久久综合亚洲精品按摩| 午夜精品久久久久久久99水蜜桃| 欧美zozo另类异族| av在线不卡免费看| 婷婷中文字幕一区三区| 久久久.com| 欧美在线啊v一区| 精品一区二区三区的国产在线播放| 国产精品视频你懂的| 欧美日高清视频| 国产黄色精品网站| 亚洲成av人片| 国产日产欧美一区二区三区| 欧美性欧美巨大黑白大战| 久久精品999| 亚洲精品免费一二三区| 欧美大片在线观看| 色一情一乱一乱一91av| 黄网站免费久久| 亚洲人妖av一区二区| 欧美成人精品福利| 色婷婷久久综合| 国产酒店精品激情| 午夜激情久久久| 亚洲欧美一区二区视频| 欧美成人a视频| 欧美日韩在线免费视频| 丰满少妇在线播放bd日韩电影| 午夜亚洲福利老司机| 国产精品欧美精品| 欧美一级精品在线| 色妹子一区二区| 国产成人精品1024| 日本sm残虐另类| 亚洲一区二区高清| 国产精品国产自产拍高清av| 欧美成人女星排行榜| 欧美三级中文字| 91在线视频网址| 国产一区二区久久| 热久久一区二区| 亚洲国产欧美日韩另类综合| 国产精品毛片久久久久久久| 精品国产一区二区三区久久久蜜月| 欧美视频一区二区三区四区 | 中文字幕二三区不卡| 日韩一区二区三区三四区视频在线观看| 99久久精品免费看| 大白屁股一区二区视频| 精品一区二区三区免费毛片爱| 午夜一区二区三区视频| 亚洲精品中文在线观看| 国产精品传媒入口麻豆| 国产婷婷色一区二区三区四区| 欧美videofree性高清杂交| 欧美日韩成人综合| 欧亚洲嫩模精品一区三区| 99久久伊人精品| 粉嫩嫩av羞羞动漫久久久 | 18成人在线观看| 中文字幕国产一区| 久久久精品人体av艺术| 精品国产一区二区亚洲人成毛片| 91精品国产综合久久精品性色 | 欧美日韩国产免费一区二区| 色94色欧美sute亚洲线路二| 99久久99久久精品免费观看| av毛片久久久久**hd| 国产成人在线视频免费播放| 精品在线亚洲视频| 精彩视频一区二区三区| 韩日欧美一区二区三区| 韩国av一区二区三区| 国产专区综合网| 国产高清亚洲一区| 风间由美一区二区三区在线观看| 国产91精品露脸国语对白| 国产乱码一区二区三区| 国产成人福利片| 成熟亚洲日本毛茸茸凸凹| 成人黄动漫网站免费app| 99精品欧美一区| 色综合天天综合给合国产| 91麻豆精品视频| 在线观看国产91| 欧美精品三级在线观看| 这里只有精品99re| 日韩女优制服丝袜电影| 久久网站热最新地址| 国产欧美日韩激情| 亚洲日本va午夜在线影院| 一区二区三区四区国产精品| 亚洲成在人线在线播放| 男女男精品视频| 国产美女一区二区三区| 成人高清伦理免费影院在线观看| 91麻豆国产福利精品|