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

📄 regfibpluseditors.pas

📁 FIBPlus is a component suite intended for work with InterBase. It is direct, fast and flexible Inter
💻 PAS
📖 第 1 页 / 共 3 页
字号:
  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 + -