📄 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.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -