📄 regfibpluseditors.pas
字号:
end;
end;
procedure TpFIBTransactionEditor.ExecuteVerb(Index: Integer);
begin
case Index of
0: if EditFIBTrParams(TpFIBTransaction(Component)) then
Designer.Modified
end;
end;
//===========
procedure TpFIBDatabaseEditor.ExecuteVerb(Index: Integer);
var Tr:TFIBTransaction;
begin
case Index of
0 :if EditFIBDatabase(TFIBDataBase(Component)) then
Designer.Modified;
1:
begin
// try to connect
if not TFIBDataBase(Component).Connected then
begin
MessageDlg(SCompDatabaseNotConnected, mtConfirmation, [mbOK], 0);
Exit;
end;
if not
pFIBDataInfo.ExistFRepositaryTable(TFIBDataBase(Component)) then
begin
if not (urFieldsInfo in TFIBDataBase(Component).UseRepositories) then
raise Exception.Create(SCompEditInfoFieldsForbid);
if MessageDlg(SCompEditInfoFieldsNotExist, mtConfirmation, [mbOK, mbCancel], 0) <> mrOk
then Exit;
CreateFRepositaryTable(TFIBDataBase(Component));
end
else
begin
Tr:=TFIBTransaction.Create(nil);
try
Tr.DefaultDatabase:=TFIBDataBase(Component);
Update1RepositaryTable(Tr);
finally
Tr.Free;
end
end;
ShowFieldInfo(TFIBDataBase(Component))
end;
2: begin
// try to connect
if not TFIBDataBase(Component).Connected then
begin
MessageDlg(SCompDatabaseNotConnected, mtConfirmation, [mbOK], 0);
Exit;
end;
if not
pFIBDataInfo.ExistERepositaryTable(TFIBDataBase(Component)) then
begin
if not (urErrorMessagesInfo in TFIBDataBase(Component).UseRepositories) then
raise Exception.Create(SCompEditErrorTableForbid);
if MessageDlg(SCompEditErrorTableNotExist, mtConfirmation, [mbOK, mbCancel], 0) <> mrOk
then Exit;
CreateERepositaryTable(TFIBDataBase(Component));
end;
ShowErrorInfo(TFIBDataBase(Component))
end;
3: begin
if not ExistDRepositaryTable(TpFIBDataBase(Component)) then
begin
if
MessageDlg(SCompEditInfoTableNotExist, mtConfirmation, [mbOK, mbCancel], 0
) <> mrOk
then Exit;
CreateDRepositaryTable(TpFIBDataBase(Component));
end;
EditDSInfo(TpFIBDataBase(Component));
end;
end;
end;
function TpFIBDatabaseEditor.GetVerb(Index: Integer): string;
begin
case Index of
0: Result := SCompEditDBEditor;
1: Result := SCompEditEditFieldInfo;
2: Result := SCompEditErrorMessages;
3: Result := SCompEditDataSetInfo;
end;
end;
function TpFIBDatabaseEditor.GetVerbCount: Integer;
begin
Result := 4
end;
type
TGeneratorNameEdit = class(TStringProperty)
function GetAttributes: TPropertyAttributes; override;
procedure GetValues(Proc: TGetStrProc); override;
end;
function TGeneratorNameEdit.GetAttributes: TPropertyAttributes;
begin
Result := inherited GetAttributes;
Result := Result + [paValueList]
end;
procedure TGeneratorNameEdit.GetValues(Proc: TGetStrProc);
var
Qry: TpFIBQuery;
Trans: TpFIBTransaction;
Dset: TpFIBDataset;
lSQLDA: TFIBXSQLDA;
begin
if PropCount > 1 then Exit;
if not (TAutoUpdateOptions(GetComponent(0)).Owner is TpFIBDataSet) then Exit;
Dset:= (TAutoUpdateOptions(GetComponent(0)).Owner as TpFIBDataSet);
if not Assigned(Dset.Database) then Exit;
Qry := nil; Trans := nil;
try
Trans := TpFIBTransaction.Create(nil);
Qry := TpFIBQuery.Create(nil);
Qry.ParamCheck:=false;
Qry.Database := Dset.Database;
Trans.DefaultDatabase := Dset.Database;
Qry.Transaction := Trans;
Qry.SQL.Text := 'select RDB$GENERATOR_NAME '+
'from RDB$GENERATORS '+
'where (RDB$SYSTEM_FLAG is NULL) or (RDB$SYSTEM_FLAG = 0)'+
'order by RDB$GENERATOR_NAME';
try
Trans.StartTransaction;
Qry.ExecQuery;
lSQLDA := Qry.Current;
while not Qry.Eof do
begin
Proc(Trim(lSQLDA.ByName['RDB$GENERATOR_NAME'].AsString));
lSQLDA := Qry.Next;
end;
Qry.Close;
finally
Trans.Commit;
end;
finally
Qry.Free;
Trans.Free;
end
end;
// DataSet component editors
procedure ShowDataSetSQLEditor(Component:TComponent;Kind:integer;Designer:IDesigner);
const
SQLNames:array[0..4] of string =('SelectSQL','InsertSQL','UpdateSQL',
'DeleteSQL','RefreshSQL'
);
var
k:byte;
ExitToCodeEditor:integer;
begin
for k:=0 to 4 do
begin
SaveModule(Component,SQLNames[k]);
end;
if ShowDSSQLEdit(TpFIBDataSet(Component),Kind,ExitToCodeEditor) then
begin
Designer.Modified;
end;
if ExitToCodeEditor>=0 then
begin
for k:=0 to 4 do
begin
if ExitToCodeEditor<>k then
if CloseModule(Component,SQLNames[k]) then
CreatePropInCode(Component,SQLNames[k],
nil,True
);
SaveModule(Component,SQLNames[k]);
end;
if ExitToCodeEditor>=0 then
FindPropInCode(Component,SQLNames[ExitToCodeEditor]);
end;
end;
type
PClass = ^TClass;
{$IFDEF VER100}
constructor TFIBGenSQlEd.Create(AComponent: TComponent; ADesigner: TFormDesigner);
{$ELSE}
{$IFNDEF D6+}
constructor TFIBGenSQlEd.Create(AComponent: TComponent; ADesigner: IFormDesigner);
{$ELSE}
constructor TFIBGenSQlEd.Create(AComponent: TComponent; ADesigner: IDesigner);
{$ENDIF}
{$ENDIF}
var CompClass: TClass;
begin
inherited Create(AComponent, ADesigner);
CompClass := PClass(Acomponent)^;
try
PClass(AComponent)^ := TDataSet;
DefaultEditor := GetComponentEditor(AComponent, ADesigner);
finally
PClass(AComponent)^ := CompClass;
end;
end;
destructor TFIBGenSQlEd.Destroy;
begin
{$IFDEF D6+}
// DefaultEditor._Release;
// DefaultEditor.;
{$ELSE}
DefaultEditor.Free;
{$ENDIF}
inherited Destroy
end;
function TFIBGenSQlEd.GetVerbCount: Integer;
begin
if (Component is TpFIBDataSet) then
Result := DefaultEditor.GetVerbCount + 4
else
Result := DefaultEditor.GetVerbCount + 2;
end;
function TFIBGenSQlEd.GetVerb(Index: Integer): string;
begin
if Index < DefaultEditor.GetVerbCount then
Result := DefaultEditor.GetVerb(Index)
else
case Index - DefaultEditor.GetVerbCount of
0: Result := SCompEditSQLGenerator;
1: Result := SCompSaveToDataSetInfo;
2: Result := SCompChooseDataSetInfo;
3: Result := SCheckSQLs;
end;
end;
procedure TFIBGenSQlEd.ExecuteVerb(Index: Integer);
var SText:string;
k:integer;
Reopen:boolean;
ErrStr:string;
begin
if Index < DefaultEditor.GetVerbCount then
with TFIBDataSet(Component) do
begin
try
Reopen:=Active;
Close;
QSelect.FreeHandle;
if Database<>nil then
ListTableInfo.ClearForDataBase(Database);
Prepare;
if Reopen then Open;
except
end;
DefaultEditor.ExecuteVerb(Index);
end
else
begin
SText:=TFIBDataSet(Component).SelectSQL.Text;
case Index - DefaultEditor.GetVerbCount of
0: ShowDataSetSQLEditor(Component,0,Designer);
1: SaveDataSetInfo;
2:
begin
// try to connect
if (not Assigned(TpFibDataSet(Component).DataBase)) or
(not TpFibDataSet(Component).DataBase.Connected) then
begin
MessageDlg(SCompDatabaseNotConnected, mtConfirmation, [mbOK], 0);
Exit;
end;
if not ExistDRepositaryTable(TpFibDataSet(Component).DataBase) then
begin
if
MessageDlg(SCompEditInfoTableNotExist, mtConfirmation, [mbOK, mbCancel], 0
) <> mrOk
then Exit;
CreateDRepositaryTable(TpFibDataSet(Component).DataBase);
end;
k := TpFIBDataSet(Component).DataSet_ID;
ChooseDSInfo(TpFIBDataSet(Component));
if k <> TpFIBDataSet(Component).DataSet_ID then
Designer.Modified
end;
3:
with TFIBDataSet(Component) do
begin
ErrStr:=SErrorIn;
if SelectSQL.Count>0 then
try
QSelect.CheckValidStatement;
except
ErrStr:=ErrStr+'SelectSQL'#13#10;
end;
if UpdateSQL.Count>0 then
try
QUpdate.CheckValidStatement;
except
ErrStr:=ErrStr+'UpdateSQL'#13#10;
end;
if DeleteSQL.Count>0 then
try
QDelete.CheckValidStatement;
except
ErrStr:=ErrStr+'DeleteSQL'#13#10;
end;
if InsertSQL.Count>0 then
try
QInsert.CheckValidStatement;
except
ErrStr:=ErrStr+'InsertSQL'#13#10;
end;
if RefreshSQL.Count>0 then
try
QRefresh.CheckValidStatement;
except
ErrStr:=ErrStr+'RefreshSQL'#13#10;
end;
if ErrStr<>SErrorIn then
ShowMessage(ErrStr)
else
ShowMessage(SNoErrors)
end;
end;
if SText<>TFIBDataSet(Component).SelectSQL.Text then
Designer.Modified;
end;
end;
procedure TFIBGenSQlEd.SaveDataSetInfo;
var
vDescription:string;
begin
with Component as TpFibDataSet do
if DataSet_ID = 0 then ShowMessage(Name + SCompEditDataSet_ID)
else
if DataBase = nil then ShowMessage(SDataBaseNotAssigned)
else
begin
if not ExistDRepositaryTable(TFIBDataset(Component).DataBase) then
begin
if
MessageDlg(SCompEditInfoTableNotExist, mtConfirmation, [mbOK, mbCancel], 0
) <> mrOk
then Exit;
CreateDRepositaryTable(TFibDataSet(Component).DataBase);
end;
vDescription:=TpFibDataSet(Component).Description;
if not InputQuery(SCompEditSaveDataSetProperty, SCompEditDataSetDesc, vDescription) then
Exit;
SaveFIBDataSetInfo(TpFibDataSet(Component),vDescription);
TpFibDataSet(Component).Description:=vDescription;
end;
end;
{ TFIBSQLsProperties }
function TFIBSQLsProperties.GetAttributes: TPropertyAttributes;
begin
Result := inherited GetAttributes + [paDialog,paSubProperties];
end;
function TFIBSQLsProperties.GetValue: string;
begin
Result := '(SQLs)'
end;
procedure TFIBSQLsProperties.Edit;
begin
ShowDataSetSQLEditor(TComponent(GetComponent(0)),0,Designer);
end;
{ TFIBSQLsProperty }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -