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

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

本文简介:选择自 mzyp2002 的 blog

      if (sqltoken = stvalue) and (lasttoken = stwhere) then
        sqltoken := stfieldname;
      if sqltoken in sqlsections then cursection := sqltoken;
    until sqltoken in [stfieldname, stend];
    if fwherefound and (sqltoken in [stfieldname]) then
      repeat
        sqltoken := nextsqltoken(start, value, cursection);
          if sqltoken in sqlsections then cursection := sqltoken;
      until sqltoken in [stend,stvalue,stisnull,stisnotnull,stfieldname];
    if value='?' then
    begin
      ffieldname.add(fname);
      inc(params);
    end;
  until (params = count) or (sqltoken in [stend]);
end;

{ tbdequery }

  function tbdequery.psgetdefaultorder: tindexdef;
  begin
    if fkeyfields = '' then
      result := inherited psgetdefaultorder
    else
    begin  // detail table default order
      result := tindexdef.create(nil);
      result.options := [ixunique];      // keyfield is unique
      result.name := stringreplace(fkeyfields, ';', '_', [rfreplaceall]);
      result.fields := fkeyfields;
    end;
  end;

{ tbdeclientdataset }

constructor tbdeclientdataset.create(aowner: tcomponent);
begin
  inherited create(aowner);
  fdataset := tbdequery.create(nil);
  fdataset.name := self.name + 'dataset1';
  provider.dataset := fdataset;
  sqldbtype := typebde;
  flocalparams := tparams.create;
end;

destructor tbdeclientdataset.destroy;
begin
  freeandnil(flocalparams);
  fdataset.close;
  freeandnil(fdataset);
  inherited destroy;
end;

procedure tbdeclientdataset.getfieldnames(list: tstrings);
var
  opened: boolean;
begin
  opened := (active = false);
  try
    if opened then
      open;
    inherited getfieldnames(list);
  finally
    if opened then close;
  end;
end;

function tbdeclientdataset.getcommandtext: string;
begin
  result := fcommandtext;
end;

function tbdeclientdataset.getdataset: tdataset;
begin
  result := fdataset as tdataset;
end;

procedure tbdeclientdataset.checkmastersourceactive(mastersource: tdatasource);
begin
  if assigned(mastersource) and assigned(mastersource.dataset) then
    if not mastersource.dataset.active then
      databaseerror(smasternotopen);
end;

procedure tbdeclientdataset.setparamsfromsql(const value: string);
var
  dataset: tquery;
  tablename, tempquery, q: string;
  list: tbdecdsparams;
  i: integer;
  field: tfield;
begin
  tablename := gettablenamefromsql(value);
  if tablename <> '' then
  begin
    tempquery := value;
    list := tbdecdsparams.create(self);
    try
      list.parseselect(tempquery);
        list.assignvalues(params);
      for i := 0 to list.count - 1 do
        list[i].paramtype := ptinput;
      dataset := tquery.create(nil);
      try
        dataset.databasename := fdataset.databasename;
        q := getquotechar;
        dataset.sql.add('select * from ' + q + tablename + q + ' where 0 = 1'); { do not localize }
        try
          dataset.open;
          for i := 0 to list.count - 1 do
          begin
            if list.ffieldname.count > i then
            begin
              try

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

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

go top