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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? datadrivereh.pas

?? 一個功能強大的DBGRID控件
?? PAS
?? 第 1 頁 / 共 5 頁
字號:
  FDesignDataBase := nil;
  FreeAndNil(FSpecParams);
  inherited Destroy;
end;

procedure TCustomSQLDataDriverEh.SetSelectCommand(const Value: TCustomSQLCommandEh);
begin
  FSelectCommand.Assign(Value);
end;

procedure TCustomSQLDataDriverEh.SetDeleteCommand(const Value: TCustomSQLCommandEh);
begin
  FDeleteCommand.Assign(Value);
end;

procedure TCustomSQLDataDriverEh.SetInsertCommand(const Value: TCustomSQLCommandEh);
begin
  FInsertCommand.Assign(Value);
end;

procedure TCustomSQLDataDriverEh.SetGetrecCommand(const Value: TCustomSQLCommandEh);
begin
  FGetrecCommand.Assign(Value);
end;

procedure TCustomSQLDataDriverEh.SetUpdateCommand(const Value: TCustomSQLCommandEh);
begin
  FUpdateCommand.Assign(Value);
end;

procedure TCustomSQLDataDriverEh.DefaultProduceDataReader(var DataSet: TDataSet; var FreeOnEof: Boolean);
begin
  if ProviderDataSet <> nil
    then inherited DefaultProduceDataReader(DataSet, FreeOnEof)
    else ExecuteCommand(SelectCommand, DataSet, FreeOnEof);
end;

procedure TCustomSQLDataDriverEh.DefaultBuildDataStruct(DataStruct: TMTDataStructEh);
var
  AReaderDS: TDataSet;
  AFreeOnEof: Boolean;
begin
  if (ReaderDataSet <> nil) or (ProviderDataSet <> nil) then
    inherited DefaultBuildDataStruct(DataStruct)
  else
  begin
//    if AReaderDS = nil then
      ExecuteCommand(SelectCommand, AReaderDS, AFreeOnEof);
    if AReaderDS = nil then
      raise Exception.Create('SelectCommand.Execute does not get DataSet');
    AReaderDS.Active := True;
    DataStruct.BuildStructFromFields(AReaderDS.Fields);
    AReaderDS.Active := False;
    if AFreeOnEof then
      AReaderDS.Free;
  end;
end;

function TCustomSQLDataDriverEh.DefaultExecuteCommand(Command: TCustomSQLCommandEh;
  var Cursor: TDataSet; var FreeOnEof: Boolean): Integer;
var
  Processed: Boolean;
  DesignDataBaseIntf: IDesignDataBaseEh;
begin
//  ShowMessage('DefaultExecuteCommand 1');

  { TODO : Is it valid technology? }
  if HaveDataConnection then
    Result := Command.Execute(Cursor, FreeOnEof)
  else
  begin
//    ShowMessage('DefaultExecuteCommand 2');
    Result := -1;
    Processed := False;
    if (csDesigning in ComponentState) and
       (GetDesignDataBase <> nil) and
       (Supports(DesignDataBase, IDesignDataBaseEh, DesignDataBaseIntf)) then
    begin
      DesignDataBaseIntf.Execute(Command, Cursor, FreeOnEof);
      Processed := True;
    end else
    begin
      if Assigned(FDefaultSQLDataDriverResolver) then
        Result := FDefaultSQLDataDriverResolver.ExecuteCommand(Self, Command, Cursor, FreeOnEof, Processed);
      if not Processed then
        Result := Command.Execute(Cursor, FreeOnEof);
    end;
  end;
end;

function TCustomSQLDataDriverEh.ExecuteCommand(Command: TCustomSQLCommandEh;
  var Cursor: TDataSet; var FreeOnEof: Boolean): Integer;
begin
  if Assigned(OnExecuteCommand)
    then Result := OnExecuteCommand(Self, Command, Cursor, FreeOnEof)
    else Result := DefaultExecuteCommand(Command, Cursor, FreeOnEof);
end;

procedure TCustomSQLDataDriverEh.DefaultRefreshRecord(MemRecord: TMemoryRecordEh);
var
  i: Integer;
  RecDataSet: TDataSet;
  AFreeOnEof: Boolean;
begin
  if ResolveToDataSet then
    inherited RefreshRecord(MemRecord)
  else
  begin
    GetrecCommand.RefreshParams(MemRecord, dvvOldestValue);
    ExecuteCommand(GetrecCommand, RecDataSet, AFreeOnEof);
    try
      if RecDataSet.IsEmpty then
        raise Exception.Create('There are no fresh record on server');

      for i := 0 to MemRecord.DataStruct.Count-1 do
        AssignFieldValue(MemRecord.DataStruct.MemTableData, MemRecord, i,
          dvvOldestValue, RecDataSet)
{      begin
        Field := RecDataSet.FindField(MemRecord.DataStruct[i].FieldName);
        if Field <> nil then
          MemRecord.Value[i, dvtOldestValue] := Field.Value;
      end;}

    finally
      if AFreeOnEof then
        RecDataSet.Free;
    end;
  end;
end;

function TCustomSQLDataDriverEh.DoUpdateRecord(MemTableData: TMemTableDataEh; MemRec: TMemoryRecordEh): Integer;
var
  Command: TCustomSQLCommandEh;
  ResDataSet: TDataSet;
  AFreeOnEof: Boolean;
begin
  Result := 0;
  if ResolveToDataSet then
    Result := inherited DefaultUpdateRecord(MemTableData, MemRec)
  else
  begin
    Command := nil;
    if  ((MemRec.UpdateStatus = usModified) and (dsoDynamicSQLUpdateEh in DynaSQLParams.Options))
     or ((MemRec.UpdateStatus = usInserted) and (dsoDynamicSQLInsertEh in DynaSQLParams.Options))
     or ((MemRec.UpdateStatus = usDeleted) and (dsoDynamicSQLDeleteEh in DynaSQLParams.Options)) then
    begin
      GenerateDynamicSQLCommand(MemRec, ServiceCommand);
      Command := ServiceCommand;
    end else
      case MemRec.UpdateStatus of
        usModified: Command := UpdateCommand;
        usInserted: Command := InsertCommand;
        usDeleted: Command := DeleteCommand;
      end;
    if Command = nil then Exit;
    Command.RefreshParams(MemRec, dvvValueEh);
    Result := ExecuteCommand(Command, ResDataSet, AFreeOnEof);
    GetBackUpdatedValues(MemRec, Command, ResDataSet);
    if AFreeOnEof then
      ResDataSet.Free;
//    MemRec.MergeChanges;
  end
end;

function TCustomSQLDataDriverEh.DefaultUpdateRecord(MemTableData: TMemTableDataEh;
  MemRec: TMemoryRecordEh): Integer;
var
  Processed: Boolean;
begin
  Result := 0;
  Processed := False;
  if Assigned(FDefaultSQLDataDriverResolver) then
    FDefaultSQLDataDriverResolver.UpdateRecord(Self, MemTableData, MemRec, Processed);
  if not Processed then
  begin
    if InternalGetServerSpecOperations <> nil
      then Result := InternalGetServerSpecOperations.UpdateRecord(Self, MemTableData, MemRec)
      else Result := DoUpdateRecord(MemTableData, MemRec);
  end;
end;

procedure TCustomSQLDataDriverEh.GetBackUpdatedValues(MemRec: TMemoryRecordEh; Command: TCustomSQLCommandEh; ResDataSet: TDataSet);
begin
  if Assigned(FOnGetBackUpdatedValues)
    then OnGetBackUpdatedValues(Self, MemRec, Command, ResDataSet)
    else DefaultGetUpdatedServerValues(MemRec, Command, ResDataSet);
end;

procedure TCustomSQLDataDriverEh.DefaultGetUpdatedServerValues(
  MemRec: TMemoryRecordEh; Command: TCustomSQLCommandEh; ResDataSet: TDataSet);
var
  Processed: Boolean;
begin
  Processed := False;
  if Assigned(FDefaultSQLDataDriverResolver) then
    FDefaultSQLDataDriverResolver.GetBackUpdatedValues(Self, MemRec, Command, ResDataSet, Processed);
  if not Processed and (InternalGetServerSpecOperations <> nil) then
    InternalGetServerSpecOperations.GetBackUpdatedValues(MemRec, Command, ResDataSet);
end;

function TCustomSQLDataDriverEh.CreateDeleteCommand: TCustomSQLCommandEh;
begin
  Result := CreateCommand;
end;

function TCustomSQLDataDriverEh.CreateInsertCommand: TCustomSQLCommandEh;
begin
  Result := CreateCommand;
end;

function TCustomSQLDataDriverEh.CreateSelectCommand: TCustomSQLCommandEh;
begin
  Result := CreateCommand;
end;

function TCustomSQLDataDriverEh.CreateGetrecCommand: TCustomSQLCommandEh;
begin
  Result := CreateCommand;
end;

function TCustomSQLDataDriverEh.CreateUpdateCommand: TCustomSQLCommandEh;
begin
  Result := CreateCommand;
end;

{
function TCustomSQLDataDriverEh.GetReaderDataSet: TDataSet;
begin
  if ProviderDataSet <> nil
    then Result := inherited GetReaderDataSet
    else Result := FReaderDataSet;
end;
}

function TCustomSQLDataDriverEh.GetDefaultCommandTypeFor(Command: TCustomSQLCommandEh): TSQLCommandTypeEh;
begin
  if (Command = SelectCommand) or (Command = GetrecCommand)
    then Result := cthSelectQuery
    else Result := cthUpdateQuery;
end;

procedure RegisterDesignDataBuilderProcEh(DataDriverClass: TSQLDataDriverEhClass;
  DesignDataBaseProc: TSetDesignDataBaseProcEh);
var
  ExistsIdx: Integer;
begin
  if DesignDataBuilderClasses = nil then
  begin
    DesignDataBuilderClasses := TList.Create;
    DesignDataBuilderProcs := TList.Create;
  end;
  ExistsIdx := DesignDataBuilderClasses.IndexOf(TObject(DataDriverClass));
  if ExistsIdx >= 0 then
    DesignDataBuilderProcs[ExistsIdx] := @DesignDataBaseProc
  else
  begin
    DesignDataBuilderClasses.Add(TObject(DataDriverClass));
    DesignDataBuilderProcs.Add(@DesignDataBaseProc);
  end;
end;

procedure UnregisterDesignDataBuilderProcEh(DataDriverClass: TSQLDataDriverEhClass);
var
  ExistsIdx: Integer;
begin
  if DesignDataBuilderClasses = nil then Exit;
  ExistsIdx := DesignDataBuilderClasses.IndexOf(TObject(DataDriverClass));
  if ExistsIdx >= 0 then
  begin
    DesignDataBuilderClasses.Delete(ExistsIdx);
    DesignDataBuilderProcs.Delete(ExistsIdx);
  end;
end;

function GetDesignDataBuilderProcEh(DataDriverClass: TSQLDataDriverEhClass):
  TSetDesignDataBaseProcEh;

  function GetDatasetFeaturesDeep(ARootClass, AClass: TClass): Integer;
  begin
    Result := 0;
    while True do
    begin
      if ARootClass = AClass then
        Exit;
      Inc(Result);
      AClass := AClass.ClassParent;
      if AClass = nil then
      begin
        Result := MAXINT;
        Exit;
      end;
    end;
  end;

var
  Deep, MeenDeep, i: Integer;
  TargetClass: TSQLDataDriverEhClass;
begin
  Result := nil;
  if DesignDataBuilderClasses = nil then Exit;
  MeenDeep := MAXINT;
  for i := 0 to DesignDataBuilderClasses.Count - 1 do
  begin
    if DataDriverClass.InheritsFrom(TSQLDataDriverEhClass(DesignDataBuilderClasses[i])) then
    begin
      TargetClass := TSQLDataDriverEhClass(DesignDataBuilderClasses[i]);
      Deep := GetDatasetFeaturesDeep(TargetClass, DataDriverClass);
      if Deep < MeenDeep then
      begin
        MeenDeep := Deep;
        Result := TSetDesignDataBaseProcEh(DesignDataBuilderProcs[i]);
      end;
    end;
  end;
end;

function TCustomSQLDataDriverEh.CreateDesignDataBase: TComponent;
begin
  Result := nil;
end;

procedure TCustomSQLDataDriverEh.AssignFromDesignDriver(DesignDataDriver: TCustomSQLDataDriverEh);
begin
  SelectCommand := DesignDataDriver.SelectCommand;
  UpdateCommand := DesignDataDriver.UpdateCommand;
  InsertCommand := DesignDataDriver.InsertCommand;
  DeleteCommand := DesignDataDriver.DeleteCommand;
  GetrecCommand := DesignDataDriver.GetrecCommand;
end;

function TCustomSQLDataDriverEh.CreateDesignCopy: TCustomSQLDataDriverEh;
begin
  Result := TCustomSQLDataDriverEh.Create(nil);
  Result.SelectCommand := SelectCommand;
  Result.UpdateCommand := UpdateCommand;
  Result.InsertCommand := InsertCommand;
  Result.DeleteCommand := DeleteCommand;
  Result.GetrecCommand := GetrecCommand;
end;


function TCustomSQLDataDriverEh.GetSelectSQL: TStrings;
begin
  Result := SelectCommand.CommandText;
end;

procedure TCustomSQLDataDriverEh.SetSelectSQL(const Value: TStrings);
begin
  SelectCommand.CommandText := Value;
end;

function TCustomSQLDataDriverEh.GetDeleteSQL: TStrings;
begin
  Result := DeleteCommand.CommandText;
end;

procedure TCustomSQLDataDriverEh.SetDeleteSQL(

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久99精品久久久久久国产越南 | 2023国产精品| 成人一区二区三区在线观看| 一区二区视频在线| yourporn久久国产精品| 亚洲二区视频在线| 国产欧美日韩亚州综合| 成人av在线一区二区三区| 国产精品高潮呻吟| 精品国产制服丝袜高跟| 91年精品国产| 韩国视频一区二区| 午夜电影一区二区| 日韩午夜激情视频| 欧美亚洲国产怡红院影院| 国产高清久久久| 蜜桃av噜噜一区| 亚洲自拍与偷拍| 国产精品丝袜一区| 欧美性videosxxxxx| 95精品视频在线| 午夜精品福利久久久| 亚洲欧美综合网| 国产日韩视频一区二区三区| 欧美一区二区观看视频| 在线观看国产一区二区| 免费欧美日韩国产三级电影| 中文字幕成人在线观看| 欧美人妇做爰xxxⅹ性高电影| 日韩电影在线免费观看| 亚洲一二三四在线| 2019国产精品| 色欧美乱欧美15图片| 美女网站色91| 日本sm残虐另类| 午夜精品久久久久久久久| 日本不卡视频在线观看| 亚洲一二三四区| 亚洲精品老司机| 亚洲欧美日本在线| 亚洲国产高清在线| 91麻豆精品国产91久久久资源速度 | 日韩欧美自拍偷拍| 欧美男女性生活在线直播观看| 91在线观看免费视频| 裸体歌舞表演一区二区| 麻豆一区二区三| 免费成人性网站| 一区二区在线看| 亚洲精品国产第一综合99久久| 日韩欧美国产一区在线观看| 日韩免费视频线观看| 99国产麻豆精品| 色悠悠久久综合| 国产精品一区二区在线看| 国产盗摄女厕一区二区三区| 日韩综合小视频| 中文字幕av一区二区三区| 国产日韩综合av| 国产精品久久久久国产精品日日| 国产精品入口麻豆原神| 精品少妇一区二区三区日产乱码| 欧美大度的电影原声| 在线免费观看不卡av| 精品1区2区3区| 制服丝袜中文字幕一区| 91美女视频网站| 欧美日韩不卡视频| 91免费观看在线| 欧美视频一区二区在线观看| 欧美美女喷水视频| 精品人在线二区三区| 欧美美女一区二区三区| 91国模大尺度私拍在线视频| 色狠狠av一区二区三区| 在线成人午夜影院| 欧美性淫爽ww久久久久无| 洋洋成人永久网站入口| 成人免费在线视频| 日本一区二区三区高清不卡| 亚洲欧洲性图库| 午夜伦理一区二区| 久久99久久精品| 亚洲欧美综合色| 亚洲啪啪综合av一区二区三区| 午夜电影网一区| 国产精品亚洲人在线观看| 91麻豆国产福利精品| 欧美日韩国产大片| 欧美午夜精品久久久久久超碰| 欧美一级免费观看| 7777精品伊人久久久大香线蕉超级流畅 | 亚洲成在线观看| 精品一区二区三区在线观看 | 国产精品乱码一区二区三区软件| 久久久久久久久久久久久久久99| 亚洲天堂精品在线观看| 欧美aaa在线| 色综合天天在线| 欧美不卡在线视频| 亚洲欧美国产毛片在线| 麻豆专区一区二区三区四区五区| 国产亚洲福利社区一区| 26uuu国产在线精品一区二区| 亚洲精品免费一二三区| 国内精品国产成人国产三级粉色 | 欧美无人高清视频在线观看| 欧美一卡二卡在线观看| 最新国产の精品合集bt伙计| 蜜臀av国产精品久久久久| 不卡av电影在线播放| 日韩欧美的一区| 亚洲制服丝袜一区| 午夜欧美2019年伦理| 老司机精品视频线观看86| 色哟哟在线观看一区二区三区| 久久综合九色综合欧美98| 亚洲午夜免费福利视频| 日日夜夜精品视频免费| 91色porny在线视频| 欧美私人免费视频| 国产精品国产三级国产普通话蜜臀| 亚洲精品视频免费看| 亚洲超丰满肉感bbw| jlzzjlzz欧美大全| 精品视频全国免费看| 亚洲美女淫视频| 美女久久久精品| 欧美日韩一区国产| 一区二区三区在线不卡| 免费xxxx性欧美18vr| 风流少妇一区二区| 久久久精品人体av艺术| 奇米影视7777精品一区二区| 丁香激情综合国产| 欧美mv日韩mv| 蜜臀av性久久久久av蜜臀妖精| 欧美日韩一区二区电影| 久久综合九色综合97_久久久| 亚洲欧美怡红院| 99精品久久99久久久久| 久久久激情视频| 国产精品影视天天线| 欧美亚男人的天堂| 亚洲综合在线观看视频| 麻豆精品精品国产自在97香蕉| yourporn久久国产精品| 国产精品国产三级国产aⅴ原创| 国产成人精品一区二| 麻豆精品在线视频| 91精品麻豆日日躁夜夜躁| 国产精品久久久久久久久搜平片| 成人午夜在线免费| 日韩免费在线观看| 亚洲一区二区三区在线| 在线观看日韩国产| 国产欧美日韩另类一区| 国产1区2区3区精品美女| 欧美日韩视频在线观看一区二区三区| 国产日韩欧美a| 成人黄色电影在线| 精品国产乱码久久久久久久| 国产原创一区二区| 国产欧美综合在线| 91在线观看成人| 国产女主播视频一区二区| 成人性生交大合| 亚洲蜜臀av乱码久久精品蜜桃| 欧美色图天堂网| 天天av天天翘天天综合网 | 欧美日韩亚洲综合一区二区三区| 一区二区三区中文在线| 国产成人av影院| 26uuu久久综合| 久久精品久久综合| 中文字幕高清一区| 欧美性色黄大片手机版| 亚洲色图欧洲色图婷婷| 丁香天五香天堂综合| 一区二区三区色| 91精品国产麻豆| 国产精品资源网| 久久久久久影视| 日本精品视频一区二区三区| 国产精品久久久久影院亚瑟 | 日韩一区二区免费电影| 午夜精品一区在线观看| 欧美mv日韩mv亚洲| 91热门视频在线观看| 国产精品久久午夜| 欧美高清性hdvideosex| 国产一区激情在线| 亚洲另类色综合网站| 日韩欧美一二区| 色综合久久88色综合天天| 亚洲美女在线国产| 亚洲精品一区二区三区精华液| 91免费观看视频| 亚洲精品国久久99热| 在线视频欧美区|