delphi7找不到TBDEClientDataSet控件的解决方案[4]

[入库:2005年8月18日] [更新:2007年3月24日]

本文简介:选择自 mzyp2002 的 blog

    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

本文关键:delphi7找不到TBDEClientDataSet控件的解决方案
  相关方案
Google
 

本站最佳浏览方式为 分辨率 1024x768 IE 6.0(或更高版本的 IE浏览器)

go top