⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sybedit.pas

📁 sybase大全
💻 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.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -