www.pudn.com > sybase_dblib4.zip > Sybedit.pas


unit sybedit; 
 
interface 
 
uses 
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, 
  StdCtrls,dsgnintf,mask; 
 
type SybObjectname = string[30]; 
 
type 
{  TTypes = (binary,bit,char,datetime,decimal,float,int,money,varchar);} 
  TTypes = (datetime,float,int,char,bit,text); 
 
type 
  Tsybobjectproperty = class(TStringProperty) 
  public 
    procedure GetValues(TheProc: TGetStrProc); override; 
    function getattributes:Tpropertyattributes; override; 
  end; 
 
type 
  TSybEdit = class(TMaskEdit) 
  private 
    { Private declarations } 
    fdatatype     :SybObjectname; {ttypes;} 
    flength       :smallint; 
    fdataset      :SybObjectname; 
    fdatafield    :SybObjectname; 
    fisprimarykey :boolean; 
    procedure setlength(value :smallint); 
    procedure Setdatafield(Value :SybObjectname); 
    function getvalue:string; 
    procedure setvalue(value:string); 
    procedure Setisprimarykey(Value :boolean); 
    procedure Setdataset(Value :SybObjectname); 
  protected 
    { Protected declarations } 
  public 
    { Public declarations } 
    procedure Setdatatype(Value :SybObjectname); 
    constructor Create(AOwner: TComponent); override; 
    destructor destroy; override; 
    procedure setname(const NewName:Tcomponentname); override; 
  published 
    { Published declarations } 
    property Datatype:SybObjectname {ttypes} read fdatatype write setdatatype; {fdatatype;} 
    property Length:smallint read flength write setlength; 
    property DataSet :SybObjectname read Fdataset write setdataset; 
    property DataField :SybObjectname read fdatafield write setdatafield; 
    property Value:string read getvalue write setvalue; 
    property IsPrimaryKey:boolean read fisprimarykey write setIsPrimaryKey stored false; 
  end; 
 
procedure Register; 
 
var from_create :boolean; 
 
implementation 
uses sybase_components, 
     sybtable, 
     sybquery, 
     sybsproc; 
 
procedure Register; 
begin 
  RegisterPropertyEditor(TypeInfo(SybObjectname),TSybEdit,'',Tsybobjectproperty); 
  RegisterComponents('Sybase DBLIB', [tsybedit]); 
end; 
 
constructor Tsybedit.Create(AOwner: TComponent); 
{var unitistream, formistream :timemorystream; 
    formstream,unitstream :tmemorystream;} 
begin 
  inherited Create(AOwner); 
 
{  formstream:=tmemorystream.create; 
  unitstream:=tmemorystream.create; 
  formstream.position:=0; 
  unitstream.position:=0; 
 
  formistream:=timemorystream.create(formstream); 
  unitistream:=timemorystream.create(unitstream); 
  showmessage('new unit'); 
  toolservices.CreateModule('test.pas',unitistream,formistream,[cmnewform]);} 
 
  from_create:=true; 
  fIsPrimaryKey:=false; 
  if fieldslist = nil then 
  begin 
    FieldsList:=TList.create; 
  end; 
end; 
 
destructor tsybedit.destroy; 
var thisform  :tform; 
    i,j       :smallint; 
    asybtable :tsybtable; 
    asybquery :tsybquery; 
begin 
  thisform:=tform(owner); 
  for i := 0 to thisform.ComponentCount - 1 do 
  begin 
    if (thisform.Components[i] is TSybTable) 
      and (thisform.Components[i].name=dataset) then 
    begin 
      asybtable:=tsybtable(thisform.Components[i]); 
      asybtable.deletefield(name); 
      break; 
    end; 
    if (thisform.Components[i] is TSybQuery) 
      and (thisform.Components[i].name=dataset) then 
    begin 
      asybquery:=tsybquery(thisform.Components[i]); 
      asybquery.deletefield(name); 
      break; 
    end; 
  end; 
 
  fieldslist.remove(self); 
  inherited destroy; 
 
end; 
 
procedure TSybedit.Setisprimarykey(Value :boolean); 
begin 
  fisprimarykey:=value; 
end; 
 
function TSybedit.getvalue:string; 
begin 
  result:=text; 
end; 
 
procedure TSybedit.setvalue(value:string); 
begin 
  text:=value; 
end; 
 
procedure TSybedit.setname(const NewName:Tcomponentname); 
var oldname :Tcomponentname; 
    thisform  :tform; 
    i         :smallint; 
    asybtable :tsybtable; 
    asybquery :tsybquery; 
begin 
  oldname:=name; 
  thisform:=tform(owner); 
  inherited setname(NewName); 
  for i := 0 to thisform.ComponentCount - 1 do 
  begin 
    if (thisform.Components[i] is TSybTable) 
      and (thisform.Components[i].name=dataset) then 
    begin 
      asybtable:=tsybtable(thisform.Components[i]); 
      asybtable.deletefield(oldname); 
      asybtable.addfield(name); 
      break; 
    end; 
    if (thisform.Components[i] is TSybQuery) 
      and (thisform.Components[i].name=dataset) then 
    begin 
      asybquery:=tsybquery(thisform.Components[i]); 
      asybquery.deletefield(oldname); 
      asybquery.addfield(name); 
      break; 
    end; 
  end; 
 
  if fieldslist.indexof(self) = -1 then 
    fieldslist.add(self) 
  else 
  begin 
    fieldslist.items[fieldslist.indexof(self)]:=self; 
  end; 
 
end; 
 
procedure Tsybedit.Setdatafield(Value :SybObjectname); 
var asybsproc :tsybsproc; 
    i,j       :integer; 
    thisform  :tform; 
begin 
  fdatafield:=value; 
 
  thisform:=tform(owner); 
 
  for i := 0 to thisform.ComponentCount - 1 do 
  begin 
    if (thisform.Components[i] is TSybSProc) then 
    begin 
      if tsybsproc(thisform.Components[i]).name=dataset then 
      begin 
        asybsproc:=tsybsproc(thisform.Components[i]); 
        for j:=0 to asybsproc.paramcount-1 do 
        begin 
          if asybsproc.params.items[j].name=value then 
          begin 
            asybsproc.params.items[j].appfieldname:=name; 
            break; 
          end; 
        end; 
      end; 
    end; 
  end; 
 
end; 
 
procedure Tsybedit.Setdatatype(Value :SybObjectname); 
begin 
  fdatatype:=value; 
end; 
 
procedure Tsybedit.Setdataset(Value :SybObjectname); 
var thisform  :tform; 
    i,j       :smallint; 
    asybtable :tsybtable; 
    asybquery :tsybquery; 
    asybsproc :tsybsproc; 
begin 
  thisform:=tform(owner); 
 
  for i := 0 to thisform.ComponentCount - 1 do 
  begin 
    if (thisform.Components[i] is TSybTable) 
      and (thisform.Components[i].name=value) then 
    begin 
      asybtable:=tsybtable(thisform.Components[i]); 
      asybtable.deletefield(name); 
      break; 
    end; 
    if (thisform.Components[i] is TSybSProc) 
      and (thisform.Components[i].name=value) then 
    begin 
      asybsproc:=tsybsproc(thisform.Components[i]); 
      asybsproc.deletefield(name); 
      break; 
    end; 
    if (thisform.Components[i] is TSybQuery) 
      and (thisform.Components[i].name=value) then 
    begin 
      asybQuery:=tsybQuery(thisform.Components[i]); 
      asybQuery.deletefield(name); 
      break; 
    end; 
  end; 
 
  Fdataset:=value; 
 
  for i := 0 to thisform.ComponentCount - 1 do 
  begin 
    if (thisform.Components[i] is TSybTable) 
      and (thisform.Components[i].name=value) then 
    begin 
      asybtable:=tsybtable(thisform.Components[i]); 
      asybtable.addfield(name); 
      break; 
    end; 
    if (thisform.Components[i] is TSybSProc) 
      and (thisform.Components[i].name=value) then 
    begin 
      asybsproc:=tsybsproc(thisform.Components[i]); 
      asybsproc.addfield(name); 
      break; 
    end; 
    if (thisform.Components[i] is TSybquery) 
      and (thisform.Components[i].name=value) then 
    begin 
      asybquery:=tsybquery(thisform.Components[i]); 
      asybquery.addfield(name); 
      break; 
    end; 
  end; 
end; 
 
procedure tsybedit.setlength(value:smallint); 
begin 
  flength:=value; 
end; 
 
procedure Tsybobjectproperty.GetValues(TheProc: TGetStrProc); 
var i,j       :integer; 
    thisform  :tform; 
    teditf    :tsybedit; 
    nm        :string; 
    asybtable :tsybtable; 
    asybquery :tsybquery; 
    asybsproc :tsybsproc; 
 
begin 
  teditf:=tsybedit(getcomponent(0)); 
  thisform:=tform(teditf.owner); 
  if getname = 'DataSet' then 
  begin 
    for i := 0 to thisform.ComponentCount - 1 do 
    begin 
      with thisform.Components[i] do { as TControl) do} 
      begin 
        if thisform.Components[i] is TSybTable then 
         theproc(thisform.Components[i].name) 
        else 
        if thisform.Components[i] is TSybSProc then 
         theproc(thisform.Components[i].name) 
        else 
        if thisform.Components[i] is TSybQuery then 
         theproc(thisform.Components[i].name); 
      end; 
    end; 
  end; 
{  if getname = 'QueryName' then 
  begin 
    for i := 0 to thisform.ComponentCount - 1 do 
    begin 
      with thisform.Components[i] do { as TControl) do 
      begin 
        if thisform.Components[i] is TSybQuery then 
         theproc(thisform.Components[i].name); 
      end; 
    end; 
  end;} 
  if getname = 'Datatype' then 
  begin 
    theproc('datetime'); 
    theproc('float'); 
    theproc('int'); 
    theproc('char'); 
    theproc('bit'); 
    theproc('text'); 
  end; 
  if getname = 'DataField' then 
  begin 
    for i := 0 to thisform.ComponentCount - 1 do 
    begin 
      if (thisform.Components[i] is TSybTable) 
        and (thisform.Components[i].name=teditf.dataset) then 
      begin 
        asybtable:=tsybtable(thisform.Components[i]); 
        for j:=1 to asybtable.datafieldscount do 
          theproc(asybtable.datafields[j]); 
      end 
      else 
      if (thisform.Components[i] is TSybSProc) 
        and (thisform.Components[i].name=teditf.dataset) then 
      begin 
        asybsproc:=tsybsproc(thisform.Components[i]); 
        for j:=0 to asybsproc.paramcount-1 do 
        begin 
          theproc(asybsproc.params.items[j].name); 
        end; 
      end 
      else 
      if (thisform.Components[i] is TSybQuery) 
        and (thisform.Components[i].name=teditf.dataset) then 
      begin 
        asybquery:=tsybquery(thisform.Components[i]); 
        for j:=1 to asybquery.datafieldscount do 
          theproc(asybquery.datafields[j]); 
      end; 
    end; 
 
  end; 
 
end; 
 
function Tsybobjectproperty.getattributes:Tpropertyattributes; 
begin 
  Result := [paValueList,paAutoUpdate,paMultiSelect]; 
end; 
 
end.