Конференция "Прочее" » override or overload ?
 
  • User1 (12.05.08 16:02) [0]
    ...
     public
       { Public declarations }
       constructor Create(AOwner: TComponent); overload;
     end;



    Собственно вопрос... :o)
  • Сергей М. © (12.05.08 16:06) [1]
    = class(?)

    Собссно контрвопрос)
  • Palladin © (12.05.08 16:11) [2]
    вопрос какой то странный, я его собственно и не вижу, в чем он?

    overload - с помощью этой директивы ты можешь объявлять одноименные методы/процедуры с разным набором параметров

    override - эта деректива перекрывает реализацию виртуального/динамического метода/конструктора/деструктора/(да и мало ли чего) родительского класса и обозначает, что у наследника она будет своя

    и в чем'же твой вопрос после ликбеза?
  • oxffff © (12.05.08 16:31) [3]

    > User1   (12.05.08 16:02)  


    1. Без разницы, если инстранцировать будешь как TForm1.Create.

    2. Если инстранцировать будешь через  Application.CreateForm(TForm1, Form1), тогда Override, в случае необходимости вызова твоего конструктора.
  • Kolan © (12.05.08 16:37) [4]
    > вопрос какой то странный

    Ну, почему не спросить stdcall или reitroduce, сабжевые слова просто похожи, отсюда и вопрос что ли ....
  • User1 (12.05.08 18:57) [5]
    Сори на писал только сейчас смог к ветке вернуться....


    > Сергей М. ©   (12.05.08 16:06) [1]


    да, class
    > Palladin ©   (12.05.08 16:11) [2]

    > override - эта деректива перекрывает реализацию виртуального/динамического
    > метода/конструктора/деструктора/(да и мало ли чего) родительского
    > класса и обозначает, что у наследника она будет своя


    Совершенно верно ! :o)

    Только не найду ошибки, когда делаю override вылетает вот что:

    Declaration of 'Create' differs from previous declaration.



    Непойму почему...
  • Сергей М, (12.05.08 19:02) [6]

    > да, class


    ЧЕЙ наследник этот твой класс ?
  • Юрий Зотов © (12.05.08 19:05) [7]
    > User1   (12.05.08 18:57) [5]

    Вы не поняли. Сергей спрашивал, от какого класса наследуется Ваш класс. Точнее, нужно знать объявление его конструктора - от этого зависит ответ на Ваш вопрос.
  • User1 (12.05.08 19:06) [8]

    > Юрий Зотов ©   (12.05.08 19:05) [7]

    TForm
  • User1 (12.05.08 19:07) [9]
    Дочернее окно. MDIChild
  • Юрий Зотов © (12.05.08 19:13) [10]
    Тогда override.
  • User1 (12.05.08 19:17) [11]

    > Юрий Зотов ©   (12.05.08 19:13) [10]

    Как раз при подстановке этого оператора и выскакивает:

    Declaration of 'Create' differs from previous declaration.

  • User1 (12.05.08 19:23) [12]
    Прошу прощения ребята !
    Нашел ошибку, а скорее недоучет.

    Дело в том, я забыл обозначить, что передается еще один параметр
    ARec

    :
    constructor Create(AOwner: TComponent; ARec: THandBook); overload

    ; а в этом случае поможет только
    overload

    .

    Вопрос снят !
  • User1 (12.05.08 19:24) [13]
    Потому и соответствующее сообщение :
    Declaration of 'Create' differs from previous declaration.
  • tesseract © (12.05.08 20:26) [14]
    overload - полиморфизм, для разных параметров в методе.
    override - переопределяем сам метод.
    reintroduce - просто убирает предупреждение компилятора.


    > Declaration of 'Create' differs from previous declaration.


    Ессно ты же параметры у Create меняешь - этого лучше не делать. inherited конструктор вызвать не забудь только.
  • User1 (12.05.08 20:30) [15]

    > inherited конструктор вызвать не забудь только.

    C этим норм.

    А вообще суечусь для справочника.

    Тип такого чтот:

    unit uHandBook;

    interface

    uses
     Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
     Dialogs, Buttons, ExtCtrls, ComCtrls, ToolWin, DBCtrls, Grids, DBGridEh,
     DB, StdCtrls;

    type

    { TfHandBook }

     TShowHandBook = (shbUnknown, shbRequisite, shbEmployee, shbJobTitle, shbUser, shbRole,
       shbLog, shbPlace, shbPoint, shbTpPoint, shbStreet, shbTpStreet, shbHome,
       shbTpHome, shbPost, shbManagement, shbProperty, shbOtherRem, shbEntrance,
       shbApartment, shbRoom, shbTpRoom);

     PHandBook = ^THandBook;
     THandBook = packed record
       ShowType: TShowHandBook;
       case Integer of
         0: (
           GoToIndex: Integer);
     end;

     TfHandBook = class(TForm)
       pnl: TPanel;
       sBtnClose: TSpeedButton;
       sBtnPrint: TSpeedButton;
       sBtnHelp: TSpeedButton;
       tb: TToolBar;
       sbInfo: TStatusBar;
       sb: TStatusBar;
       nv: TDBNavigator;
       tSprt1: TToolButton;
       tBtnFilter: TToolButton;
       grd: TDBGridEh;
       ds: TDataSource;
       procedure FormCreate(Sender: TObject);
       procedure FormShow(Sender: TObject);
       procedure FormPaint(Sender: TObject);
       procedure FormActivate(Sender: TObject);
       procedure FormResize(Sender: TObject);
       procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
       procedure FormClose(Sender: TObject; var Action: TCloseAction);
       procedure FormDeactivate(Sender: TObject);
       procedure FormHide(Sender: TObject);
       procedure FormDestroy(Sender: TObject);
     private
       { Private declarations }
       FRec: THandBook;
     public
       { Public declarations }
       constructor Create(AOwner: TComponent; ARec: THandBook); overload;
     end;

    function CreateHandBook(AOwner: TComponent; ARec: THandBook): Boolean;

    resourcestring
     SUnknown = 'Íåèçâåñòíûé ñïðàâî÷íèê';
     SRequisite = 'Ñïðàâî÷íèê ðåêâèçèòû ïðåäïðèÿòèÿ';
     SEmployee = '';
     SJobTitle = '';
     SUser = '';
     SRole = '';
     SLog = '';
     SPlace = '';
     SPoint = '';
     STpPoint = '';
     SStreet = '';
     STpStreet = '';
     SHome = '';
     STpHome = '';
     SPost = '';
     SManagement = '';
     SProperty = '';
     SOtherRem = '';
     SEntrance = '';
     SApartment = '';
     SRoom = '';
     STpRoom = '';

    var
     fHandBook: TfHandBook;

    implementation

    uses
    { Ïîäêëþ÷åíèå äîïîëíèòåëüíû&# 245; ìîäóëåé. }
     uDm, IniFiles, uConstants, uDbs;

    {$R *.dfm}

    function CreateHandBook(AOwner: TComponent; ARec: THandBook): Boolean;
    begin
     if Assigned(fHandBook) then
       if (fHandBook.FRec.ShowType <> ARec.ShowType) or
         (fHandBook.FRec.GoToIndex <> ARec.GoToIndex) then
         fHandBook.Free
       else
         if not (fHandBook.WindowState in [wsNormal, wsMaximized]) then
           fHandBook.WindowState := wsNormal
         else
           fHandBook.Show;

     Result := True;
     try
       if not Assigned(fHandBook) then
         fHandBook := TfHandBook.Create(AOwner, ARec);
     except
       Result := False;
       fHandBook.Free;
       fHandBook := nil;
     end;
    end;

    constructor TfHandBook.Create(AOwner: TComponent; ARec: THandBook);
    begin
     inherited Create(AOwner);
     FRec := ARec;
     case FRec.ShowType of
       shbUnknown:
         begin
           Close;
         end;
       shbRequisite:
         begin
           Caption := SRequisite;
           ds.DataSet := dm.qRequisite;
         end;
     else
       begin
         //&#205;&#229;&#232;&#231;&#226;&#229;&#241;&#242;&#237;&#251;&#233; &#226;&#232;&#228; &#226;&#251;&#231;&#251;&#226;&#224;&#229;&#236;&#238;&#227;&#238; &#241;&#239;&#240;&#224;&#226;&#238;&#247;&#237;&#232;&#234;&#232;.
       end;
     end;
    end;

    procedure TfHandBook.FormCreate(Sender: TObject);
    begin
     if OpenDataSet(ds.DataSet) then
       begin
         //
       end
     else
       begin
         //
       end;
    end;

    procedure TfHandBook.FormShow(Sender: TObject);
    begin
     //
    end;

    procedure TfHandBook.FormPaint(Sender: TObject);
    begin
     //
    end;

    procedure TfHandBook.FormActivate(Sender: TObject);
    begin
     //
    end;

    procedure TfHandBook.FormResize(Sender: TObject);
    begin
     //
    end;

    procedure TfHandBook.FormCloseQuery(Sender: TObject;
     var CanClose: Boolean);
    begin
     //
    end;

    procedure TfHandBook.FormClose(Sender: TObject; var Action: TCloseAction);
    begin
     //
    end;

    procedure TfHandBook.FormDeactivate(Sender: TObject);
    begin
     //
    end;

    procedure TfHandBook.FormHide(Sender: TObject);
    begin
     //
    end;

    procedure TfHandBook.FormDestroy(Sender: TObject);
    begin
     //
    end;

    end.

  • Игорь Шевченко © (12.05.08 20:32) [16]
    Чему вас только Пачеко учил...
  • User1 (12.05.08 20:36) [17]

    > Игорь Шевченко ©   (12.05.08 20:32) [16]

    И чему же... ? :o)
  • tesseract © (12.05.08 20:36) [18]

    begin
    inherited Create(AOwner);
    FRec := ARec;
    case FRec.ShowType of
      shbUnknown:
        begin
          Close;
        end;
      shbRequisite:
        begin
          Caption := SRequisite;
          ds.DataSet := dm.qRequisite;
        end;
    else
      begin
        //Íåèçâåñòíûé âèä âûçûâàåìîãî ñïðàâî÷íèêè.
      end;
    end;
    end;


    Какой Close в OnCreate ? И в OnShow тоже нельзя. Проверяй перед созданием формы, а не в ней. Или Error взводи.
  • User1 (12.05.08 20:40) [19]

    > tesseract ©   (12.05.08 20:36) [18]

    Честно, налобал даже не проверял.... :o) просто "мысль гения" пришла, а сому "последовательность" shbUnknown даже ниразу не вызывал... :o)))
  • Юрий Зотов © (12.05.08 20:44) [20]
    > tesseract ©   (12.05.08 20:26) [14]

    Overload - НЕ полиморфизм (а перегрузка). А вот override - это как раз полиморфизм и есть.
  • Сергей М, (12.05.08 20:45) [21]

    > налобал даже не проверял


    Да уж..
    Тело ф-ции CreateHandBook - шедевр, достойный истинного "лобуха")
  • User1 (12.05.08 20:46) [22]

    > Юрий Зотов ©   (12.05.08 20:44) [20]

    Не предал значения. Совершенно верно !
  • tesseract © (12.05.08 20:53) [23]

    > Overload - НЕ полиморфизм (а перегрузка).


    В общем-то да. overload не перекрывает сам метод. Определение "полиморфизма" само по себе туманновато.
  • User1 (12.05.08 21:00) [24]

    > tesseract ©   (12.05.08 20:53) [23]


    Это да. :o)

    http://ru.wikipedia.org/wiki/%D0%9F%D0%BE%D0%BB%D0%B8%D0%BC%D0%BE%D1%80%D1%84%D0%B8%D0%B7%D0%BC_%D0%B2_%D1%8F%D0%B7%D1%8B%D0%BA%D0%B0%D1%85_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F

    Кратко смысл полиморфизма можно выразить фразой: «Один интерфейс, множество методов».

    Полиморфизм — один из трех важнейших механизмов объектно-ориентированного программирования (наряду с инкапсуляцией и наследованием).

    Полиморфизм позволяет писать более абстрактные программы и повысить коэффициент повторного использования кода. Общие свойства объектов объединяются в систему, которую могут называть по-разному — интерфейс, класс. Общность имеет внешнее и внутреннее выражение. Внешне общность проявляется как одинаковый набор методов с одинаковыми именами и сигнатурами (типами аргументов и результатов). Внутренняя общность есть одинаковая функциональность методов. Её можно описать интуитивно или выразить в виде строгих законов, правил, которым должны подчиняться методы. Возможность приписывать разную функциональность одному методу (функции, операции) называется перегрузкой метода (функций, операций).

  • Юрий Зотов © (12.05.08 21:24) [25]
    > tesseract ©   (12.05.08 20:53) [23]

    > Определение "полиморфизма" само по себе туманновато.

    По смыслу - разное поведение одного и того же метода в зависимости от класса. По сути - всего лишь косвенная адресация. Ничего туманного.
  • tesseract © (12.05.08 21:33) [26]

    > По смыслу - разное поведение одного и того же метода в зависимости
    > от класса.


    Определение туманно. Как работает, ясно конечно.
  • main © (13.05.08 02:06) [27]

    > tesseract ©   (12.05.08 21:33) [26]


    Ну хватит оправдываться. Все ошибаются.
    :)
  • Германн © (13.05.08 04:16) [28]

    > tesseract ©   (12.05.08 21:33) [26]
    >
    >
    > > По смыслу - разное поведение одного и того же метода в
    > зависимости
    > > от класса.
    >
    >
    > Определение туманно. Как работает, ясно конечно.

    Очень напомнило "Координаты чудес" Шэкли. :)
  • User1 (13.05.08 06:56) [29]

    > Сергей М,   (12.05.08 20:45) [21]

    Почему ? :o)
  • Сергей М. © (13.05.08 08:28) [30]
    function CreateHandBook...
    begin
    if Assigned(fHandBook) then
    ..
        fHandBook.Free //разрушение объекта, в fHandBook остается мусор (1)
    ..
    try
      if not Assigned(fHandBook) then // в случае (1) уловие будет ложным
        fHandBook := TfHandBook.Create(AOwner, ARec); //и эта строчка никогда не будет выполнена (2)
    except
      fHandBook.Free; // в случае исключения при выполнении (2) разрушение заведомо несозданного объекта лишено всякого смысла
      fHandBook := nil; // равно как лишена смысла и эта строчка
    end;
    end;

  • User1 (13.05.08 08:35) [31]

    > Сергей М. ©   (13.05.08 08:28) [30]

    function CreateHandBook(AOwner: TComponent; ARec: THandBook): Boolean;
    begin
    if Assigned(fHandBook) then
      if (fHandBook.FRec.ShowType <> ARec.ShowType) or
        (fHandBook.FRec.GoToIndex <> ARec.GoToIndex) then
        begin
          fHandBook.Free;
          fHandBook := nil;
        end
      else
        if not (fHandBook.WindowState in [wsNormal, wsMaximized]) then
          fHandBook.WindowState := wsNormal
        else
          fHandBook.Show;

    Result := True;
    try
      if not Assigned(fHandBook) then
        fHandBook := TfHandBook.Create(AOwner, ARec);
    except
      Result := False;
    end;
    end;



    ?
  • Сергей М. © (13.05.08 08:59) [32]
    function CreateHandBook(AOwner: TComponent; ARec: THandBook): Boolean;
    begin
    Result := True;
    if Assigned(fHandBook) then
     if (fHandBook.FRec.ShowType <> ARec.ShowType) or
       (fHandBook.FRec.GoToIndex <> ARec.GoToIndex) then
         FreeAndNil(fHandBook)
     else
       if not (fHandBook.WindowState in [wsNormal, wsMaximized]) then
         fHandBook.WindowState := wsNormal
       else
         fHandBook.Show;

     if not Assigned(fHandBook) then
     try
       fHandBook := TfHandBook.Create(AOwner, ARec);
     except
       Result := False;
     end;
    end;

  • XentaAbsenta © (13.05.08 09:42) [33]
    Удалено модератором
  • User1 (13.05.08 10:57) [34]
    Кто-то писал справочники такого вида, как я пытаюсь написать ?
    Если да, то кто, что посоветует по этому поводу...

    Заранее спасибо !
  • Сергей М. © (13.05.08 11:00) [35]
    Какого "такого" ?
  • User1 (13.05.08 11:06) [36]

    > Сергей М. ©   (13.05.08 11:00) [35]

    unit uHandBook;

    interface

    uses
    Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
    Dialogs, Buttons, ExtCtrls, ComCtrls, ToolWin, DBCtrls, Grids, DBGridEh,
    DB, StdCtrls;

    type

    { TfHandBook }

    TShowHandBook = (shbUnknown, shbRequisite, shbEmployee, shbJobTitle, shbUser, shbRole,
      shbLog, shbPlace, shbPoint, shbTpPoint, shbStreet, shbTpStreet, shbHome,
      shbTpHome, shbPost, shbManagement, shbProperty, shbOtherRem, shbEntrance,
      shbApartment, shbRoom, shbTpRoom);

    PHandBook = ^THandBook;
    THandBook = packed record
      ShowType: TShowHandBook;
      case Integer of
        0: (
          GoToIndex: Integer);
    end;

    TfHandBook = class(TForm)
      pnl: TPanel;
      sBtnClose: TSpeedButton;
      sBtnPrint: TSpeedButton;
      sBtnHelp: TSpeedButton;
      tb: TToolBar;
      sbInfo: TStatusBar;
      sb: TStatusBar;
      nv: TDBNavigator;
      tSprt1: TToolButton;
      tBtnFilter: TToolButton;
      grd: TDBGridEh;
      ds: TDataSource;
      procedure FormCreate(Sender: TObject);
      procedure FormShow(Sender: TObject);
      procedure FormPaint(Sender: TObject);
      procedure FormActivate(Sender: TObject);
      procedure FormResize(Sender: TObject);
      procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
      procedure FormClose(Sender: TObject; var Action: TCloseAction);
      procedure FormDeactivate(Sender: TObject);
      procedure FormHide(Sender: TObject);
      procedure FormDestroy(Sender: TObject);
    private
      { Private declarations }
      FRec: THandBook;
    public
      { Public declarations }
      constructor Create(AOwner: TComponent; ARec: THandBook); overload;
    end;

    function CreateHandBook(AOwner: TComponent; ARec: THandBook): Boolean;

    resourcestring
    SUnknown = 'Íåèçâåñòíûé ñïðàâî÷íèê';
    SRequisite = 'Ñïðàâî÷íèê ðåêâèçèòû ïðåäïðèÿòèÿ';
    SEmployee = '';
    SJobTitle = '';
    SUser = '';
    SRole = '';
    SLog = '';
    SPlace = '';
    SPoint = '';
    STpPoint = '';
    SStreet = '';
    STpStreet = '';
    SHome = '';
    STpHome = '';
    SPost = '';
    SManagement = '';
    SProperty = '';
    SOtherRem = '';
    SEntrance = '';
    SApartment = '';
    SRoom = '';
    STpRoom = '';

    var
    fHandBook: TfHandBook;

    implementation

    uses
    { &#207;&#238;&#228;&#234;&#235;&#254;&#247;&#229;&#237;&#232;&#229; &#228;&#238;&#239;&#238;&#235;&#237;&#232;&#242;&#229;&#235;&#252;&#237;&#251;&#  245; &#236;&#238;&#228;&#243;&#235;&#229;&#233;. }
    uDm, IniFiles, uConstants, uDbs;

    {$R *.dfm}

    function CreateHandBook(AOwner: TComponent; ARec: THandBook): Boolean;
    begin
    if Assigned(fHandBook) then
      if (fHandBook.FRec.ShowType <> ARec.ShowType) or
        (fHandBook.FRec.GoToIndex <> ARec.GoToIndex) then
        fHandBook.Free
      else
        if not (fHandBook.WindowState in [wsNormal, wsMaximized]) then
          fHandBook.WindowState := wsNormal
        else
          fHandBook.Show;

    Result := True;
    try
      if not Assigned(fHandBook) then
        fHandBook := TfHandBook.Create(AOwner, ARec);
    except
      Result := False;
      fHandBook.Free;
      fHandBook := nil;
    end;
    end;

    constructor TfHandBook.Create(AOwner: TComponent; ARec: THandBook);
    begin
    inherited Create(AOwner);
    FRec := ARec;
    case FRec.ShowType of
      shbUnknown:
        begin
          Close;
        end;
      shbRequisite:
        begin
          Caption := SRequisite;
          ds.DataSet := dm.qRequisite;
        end;
    else
      begin
        //&#205;&#229;&#232;&#231;&#226;&#229;&#241;&#242;&#237;&#251;&#233; &#226;&#232;&#228; &#226;&#251;&#231;&#251;&#226;&#224;&#229;&#236;&#238;&#227;&#238; &#241;&#239;&#240;&#224;&#226;&#238;&#247;&#237;&#232;&#234;&#232;.
      end;
    end;
    end;

    procedure TfHandBook.FormCreate(Sender: TObject);
    begin
    if OpenDataSet(ds.DataSet) then
      begin
        //
      end
    else
      begin
        //
      end;
    end;

    procedure TfHandBook.FormShow(Sender: TObject);
    begin
    //
    end;

    procedure TfHandBook.FormPaint(Sender: TObject);
    begin
    //
    end;

    procedure TfHandBook.FormActivate(Sender: TObject);
    begin
    //
    end;

    procedure TfHandBook.FormResize(Sender: TObject);
    begin
    //
    end;

    procedure TfHandBook.FormCloseQuery(Sender: TObject;
    var CanClose: Boolean);
    begin
    //
    end;

    procedure TfHandBook.FormClose(Sender: TObject; var Action: TCloseAction);
    begin
    //
    end;

    procedure TfHandBook.FormDeactivate(Sender: TObject);
    begin
    //
    end;

    procedure TfHandBook.FormHide(Sender: TObject);
    begin
    //
    end;

    procedure TfHandBook.FormDestroy(Sender: TObject);
    begin
    //
    end;

    end.

  • Игорь Шевченко © (13.05.08 11:15) [37]
    Все выбросить на помойку клавишей Shift+Delete

    Читать Тейксейру с Пачеко
  • Сергей М. © (13.05.08 11:20) [38]

    > User1   (13.05.08 11:06) [36]


    Это не справочник, это просто лобуховая декларация и реализация некоего класса формы)
  • User1 (13.05.08 12:30) [39]

    > Сергей М. ©   (13.05.08 11:20) [38]

    А что же догда понимать под справочником программы ?

    Тогда объясните как реализовать "гибкий справочник" для работы с некоторыми таблицами в БД ?...
  • Сергей М. © (13.05.08 12:40) [40]

    > что же догда понимать под справочником программы ?


    Это тебя надо спросить, что ты под этим понимаешь)


    > как реализовать "гибкий справочник"


    Какой такой "гибкий" ?)
  • Skyle © (13.05.08 12:41) [41]

    > User1   (13.05.08 12:30) [39]

    Определение "гибкого справочника для работы с некоторыми таблицами в БД" в студию.
  • Игорь Шевченко © (13.05.08 12:50) [42]
    Любой "гибкий справочник" подлежит безусловному сожжению в топке
  • Сергей М. © (13.05.08 12:58) [43]
    Мож и не любой, но "справочник программы" типа Гандбук гореть будет хорошо)
  • User1 (13.05.08 13:04) [44]

    > Игорь Шевченко ©   (13.05.08 12:50) [42]

    Почему ?
  • Игорь Шевченко © (13.05.08 13:08) [45]
    User1   (13.05.08 13:04) [44]

    Потому что нет ничего более уродливого и не сопровождабельного, чем "гибкое".
  • Сергей М. © (13.05.08 13:14) [46]

    > User1   (13.05.08 13:04) [44]


    ИШ хотел сказать, что колоть орехи можно и микроскопом, со всеми вытекающими последствиями.
  • Anatoly Podgoretsky © (13.05.08 13:26) [47]
    > User1  (13.05.2008 13:04:44)  [44]

    Гнется куда не надо.
  • User1 (13.05.08 13:49) [48]

    > Игорь Шевченко ©   (13.05.08 13:08) [45]

    Может быть, но тогда посоветуйте из своего опыта:
    Как тогда лучше реализовать справочник n таблиц ?
    Помещать на форму DataSource, DataSet, Grid- ы для каждой таблицы ?

    Это конечно вариант, но тогда увеличатся размеры программы, а хочется как-то менее масштабной сделать.
  • Игорь Шевченко © (13.05.08 14:04) [49]
    User1   (13.05.08 13:49) [48]


    > Как тогда лучше реализовать справочник n таблиц ?


    Наверное как лучше реализовать интерфейс к n справочникам, находящимся в n таблицах ?

    Воспользоваться механизмом наследования, например, сделав базовую функциональность в форме-предке, а работу с конкретными справочниками вынести в наследников этой формы, если есть различия. Ну и разумеется на каждый справочник свой DataSet, в датамодуле или в одном кучу или в нескольких, по вкусу. Соответственно, Grid и DataSource будут находиться в предке. Один раз.

    Но это чаще всего идиотский интерфейс, сделанный, потому что "по другому не умеем". Делать работу со справочниками в программе вместо того, чтобы заполнять их один раз, стоит только в единственном случае - когда данные в справочниках меняются примерно с той же интенсивностью, что и данные, в которых эти справочники используются.

    Размер программы - это последнее, на что стоит обращать внимание при ее разработке.
  • User1 (13.05.08 14:37) [50]

    > Делать работу со справочниками в программе вместо того,
    > чтобы заполнять их один раз, стоит только в единственном
    > случае - когда данные в справочниках меняются примерно с
    > той же интенсивностью, что и данные, в которых эти справочники
    > используются.

    Очень верно заметили, спасибо что обозначили направление в котором необходимо двигаться. Теперь немного понял суть "общего" дела.

    Хотелось бы последний вопрос запостить в этой ветке, а именно:


    > Воспользоваться механизмом наследования, например, сделав
    > базовую функциональность в форме-предке, а работу с конкретными
    > справочниками вынести в наследников этой формы, если есть
    > различия.


    Вот этого примеры есть ?
  • oxffff © (13.05.08 14:38) [51]

    > Игорь Шевченко ©   (13.05.08 13:08) [45]
    > User1   (13.05.08 13:04) [44]
    >
    > Потому что нет ничего более уродливого и не сопровождабельного,
    >  чем "гибкое".


    Честно говоря слух режет.
    У вас был печальный опыт?
    Может вы хотели сказать о недокументированном коде?

    Гибкостью имеет смысл жертвовать в угоду скорости, но в угоду выразительности не стоит. IMHO.
  • User1 (13.05.08 14:39) [52]
    К
    > User1   (13.05.08 14:37) [50]


    Наверное как лучше реализовать интерфейс к n справочникам, находящимся в n таблицах ?
  • Kolan © (13.05.08 14:39) [53]
    > Потому что нет ничего более уродливого и не сопровождабельного,
    > чем «гибкое».

    Соглдасен.


    > Как тогда лучше реализовать справочник n таблиц ?

    Просто. Надо сделать n форм для каждого справочника. Причем уи должен учитывать особенноти конкретного справочника.
  • Игорь Шевченко © (13.05.08 14:50) [54]
    oxffff ©   (13.05.08 14:38) [51]


    > У вас был печальный опыт?
    > Может вы хотели сказать о недокументированном коде?


    Честно говоря, не совсем понял направление мысли.

    Код должен быть простым и ясным, человек должен быть непьющим, вся гибкость в прикладных задачах обычно идет лесом, потому что прикладные задачи обычно живут дольше, чем предполагается при их разработке и разгребать гибкость, пусть даже комментированную, не самое приятное занятие.


    > Гибкостью имеет смысл жертвовать в угоду скорости, но в
    > угоду выразительности не стоит. IMHO.


    Выразительность кода - это самое главное качество в прикладных программах, по причине, приведенной чуть выше, если только по постановке не оговорено обратное. Например, если особо оговорено быстродействие, то имеет смысл критические части кода написать на ассемблере (если все остальное уже испробовано и не привело к успеху), хотя выразительность ассемблерного кода мягко говоря, невысока.

    User1   (13.05.08 14:37) [50]


    > Вот этого примеры есть ?


    А я не знаю твоих задач, как я могу привести примеры ?
  • oxffff © (13.05.08 14:52) [55]

    > Игорь Шевченко ©   (13.05.08 14:04) [49]
    > User1   (13.05.08 13:49) [48]
    >
    >
    > > Как тогда лучше реализовать справочник n таблиц ?
    >
    >
    > Наверное как лучше реализовать интерфейс к n справочникам,
    >  находящимся в n таблицах ?
    >
    > Воспользоваться механизмом наследования, например, сделав
    > базовую функциональность в форме-предке, а работу с конкретными
    > справочниками вынести в наследников этой формы, если есть
    > различия. Ну и разумеется на каждый справочник свой DataSet,
    >  в датамодуле или в одном кучу или в нескольких, по вкусу.
    >  Соответственно, Grid и DataSource будут находиться в предке.
    >  Один раз.


    Довольно странное предложение о формах предках.
    А что нельзя передавать Caption и Dataset в конструкторе.
    Ведь судя по коду ведь ничего не требуется.

    >User1   (13.05.08 14:37) [50]

    Твоя задача в достижении гибкости заключается в отвязывании от конкретных справочников.

    Такой код следует избегать.


    > constructor TfHandBook.Create(AOwner: TComponent; ARec:
    > THandBook);
    > begin
    > inherited Create(AOwner);
    > FRec := ARec;
    > case FRec.ShowType of
    >   shbUnknown:
    >     begin
    >       Close;
    >     end;
    >   shbRequisite:
    >     begin
    >       Caption := SRequisite;
    >       ds.DataSet := dm.qRequisite;
    >     end;
    > else
    >   begin
    >     //Íåèçâåñòíûé âèä âûçûâàåìîãî ñïðàâî÷íèêè.
    >   end;
    > end;
    > end;


    А заменить на

    constructor TfHandBook.Create(AOwner:Component;ShowType:Integer);
    var Rec:THandBook;
    begin
    rec:=AvailableDicts[ShowType];
    rec.BeforeActivate;
    if rec.AllowToShow then
         begin
        Caption := rec.caption;
        ds.DataSet := rec.qRequisite;
        end
       else
       Close;
    rec.AfterActivate;
    end;

    RegisterDict( TUniDict.create(caption,Dataset,OnBeforeActivate,OnAfterActivate));
  • Юрий Зотов © (13.05.08 14:54) [56]
    > Игорь Шевченко ©   (13.05.08 14:04) [49]

    > Делать работу со справочниками в программе вместо того, чтобы
    > заполнять их один раз, стоит только в единственном случае - когда
    > данные в справочниках меняются примерно с той же интенсивностью,
    > что и данные, в которых эти справочники используются.

    Есть справочник. Пополняется по одной записи в месяц. Пополнять его должен обыкновенный юзер. Как быть?
  • Сергей М. © (13.05.08 15:04) [57]

    > User1   (13.05.08 13:49) [48]
    >
    >


    Какая уж тут "гибкость", если ты жестко прописал информацию о таблицах, с которыми будет вестись работа, прямо в коде будущего приложения ?
  • Anatoly Podgoretsky © (13.05.08 15:04) [58]
    > Юрий Зотов  (13.05.2008 14:54:56)  [56]

    Пополнять может только то кто имеет права на это.
  • Игорь Шевченко © (13.05.08 15:10) [59]
    oxffff ©   (13.05.08 14:52) [55]


    > RegisterDict( TUniDict.create(caption,Dataset,OnBeforeActivate,
    > OnAfterActivate));


    Через какое время ты забудешь о том, что делает этот код ?

    Юрий Зотов ©   (13.05.08 14:54) [56]


    > Есть справочник. Пополняется по одной записи в месяц. Пополнять
    > его должен обыкновенный юзер. Как быть?
    > <Цитата>
    > » удаление...


    В разных случаях по-разному, очевидно. Какой юзер, какие данные, и т.д.
    Можно раз в месяц выполнить SQL-запрос на вставку записи, например. Можно написать "интерфейс" по образу и подобию, как у автора темы, чтобы раз в месяц юзер с чувством глубокого удовлетворения вводил туда очередную запись.
    Можно еще что-нибудь.
  • Юрий Зотов © (13.05.08 15:12) [60]
    > Можно раз в месяц выполнить SQL-запрос на вставку записи

    Довольно сомнительно, чтобы обыкновенный юзер вообще знал слово SQL.
  • oxffff © (13.05.08 15:16) [61]

    > Игорь Шевченко ©   (13.05.08 15:10) [59]
    > oxffff ©   (13.05.08 14:52) [55]
    >
    >
    > > RegisterDict( TUniDict.create(caption,Dataset,OnBeforeActivate,
    >
    > > OnAfterActivate));
    >
    >
    > Через какое время ты забудешь о том, что делает этот код
    > ?


    Я не забуду. Для более сложных случаев я делаю пометки в виде словестного описания.
  • Игорь Шевченко © (13.05.08 15:20) [62]
    Юрий Зотов ©   (13.05.08 15:12) [60]


    > Довольно сомнительно, чтобы обыкновенный юзер вообще знал
    > слово SQL.


    Обыкновенный юзер не знает слова Windows - этому слову его учат.
    А для слова SQL применительно к обновлению справочника можно вполне составить пошаговую инструкцию с картинками.

    oxffff ©   (13.05.08 15:16) [61]


    > Я не забуду. Для более сложных случаев я делаю пометки в
    > виде словестного описания


    Если ты занимаешься этим один, то никаких вопросов с моей стороны нет и быть не может, все, в чем человек варится самостоятельно, может быть организовано как угодно.
    Я обычно имею в виду работу в команде, когда код передается от программиста программисту.
  • User1 (13.05.08 15:25) [63]

    > Юрий Зотов ©   (13.05.08 14:54) [56]

    К сказанному, имеются таблицы: tPoint (Населенные пункты), tStreet (Улицы), tHome (Дома), обновляется таблица tHome примерно 1-9 раз в месяц. И не именно из-за того что эта таблица должна нести "свежие данные", тогда бы это был не справочник, а из-за выявления ошибок, или добавления "вновь поступивших" домов. Таблица содержит примерно 55000 записей причем 55000 индивидуальны (одна запись, один дом и информация о нем).
    Таблицы tPoint и tStreet обновлялись один раз, и особой потребности в их обновлении не наблюдается, но их тоже необходимо отображать Оператору в виде справочной информации.

    Всего справочников насчитывается около 9 таблиц, и для этих 9 таблиц необходимо реализовать "достойный пользовательский интерфейс", "достойный" как в смысле размеров приложения, гибкости справочника (в принципе оператор этого не замечает), так и в смысле навигации и поиска.

    Для решения поставленной самому себе задачи, я пока судя из ветки вижу два способа, это: constructor, переписка метода Create и interface.

    Как реализовать справочник при помощи "constructor" я уяснил, как реализовать справочник при помощи interface, пока мне непонятно.

    Т.к. "constructor" судя по ветке был "закритекован" чем же тогда лучше "interface метод" ?
    И как решаете и решали эти задачи вы ? А задача это реализовать справочник в программе...

    Спасибо.
  • Игорь Шевченко © (13.05.08 15:28) [64]

    > К сказанному, имеются таблицы: tPoint (Населенные пункты),
    >  tStreet (Улицы), tHome (Дома),


    Если не секрет, зачем ?
    Как они используются ?
  • User1 (13.05.08 15:32) [65]

    > Сергей М. ©   (13.05.08 15:04) [57]
    >
    > > User1   (13.05.08 13:49) [48]
    > >
    > >
    >
    >
    > Какая уж тут "гибкость", если ты жестко прописал информацию
    > о таблицах, с которыми будет вестись работа, прямо в коде
    > будущего приложения ?


    Гибкость в пределах конкретного приложения.

    Если бый хотел реализовать гибкость в пределах приложений, тогда бы пришлось помещать форму справочника в dll, и жестко не прописывать используемые таблицы в юните, а передавать в качестве параметра одной из функций (процедуре) указатель на DataSet, а с этим возникает множество проблем...
  • Юрий Зотов © (13.05.08 15:34) [66]
    > Игорь Шевченко ©   (13.05.08 15:20) [62]

    > Обыкновенный юзер не знает слова Windows - этому слову его учат.
    > А для слова SQL применительно к обновлению справочника можно вполне
    > составить пошаговую инструкцию с картинками.

    Ты предлагаешь заодно обучить его SQL? И поставить ему дополнительную программу, которая этот SQL выполнять будет? И научить его с этой программой работать?

    По инструкции с картинками.

    Что ж, это можно. Можно придумать и еще целую кучу ректальных решений вместо одного простого, всем понятного и вполне естественного - сделать форму редактирования справочника.

    И не морочить юзеру голову SQL и прочими вещами, которые к его работе не имеют никакого отношения.
  • Сергей М. © (13.05.08 15:36) [67]

    > User1   (13.05.08 15:25) [63]


    А ты не задумывался над распределенным Web-приложением ?

    На стороне Web-клиента все готово - любой Web-браузер вполне успешно выполнит роль "универсального гибкого справочника".

    На стороне Web-сервера ты волен строить любые польз.интерфейсы любого уровня сложности и "достойности" для доступа к любому набору данных.
  • User1 (13.05.08 15:48) [68]

    > Игорь Шевченко ©   (13.05.08 15:28) [64]

    tPoint -> tStreet -> tHome- это только часть связки структуры БД.

    Затем чтобы можно было производить выборку без GROUP.
    Затем чтоб сократить размер базы. (Тут конечно проигрыш в производительности, но с сегодняшним оборудованием я не вижу особых ограничений.)
    Они используются в отчетах, где в таблицах tPoint, tStreet имеются поля классифицирующие каждую запись по своему и в соответствии с этим получаем несколько отсчетов разной формы.
  • Игорь Шевченко © (13.05.08 15:50) [69]
    Юрий Зотов ©   (13.05.08 15:34) [66]

    Вот поэтому линукса никогда не будет на декстопе. Потому что забота о том, чтобы пользователь кроме мышки ничего в руку не брал и каждый раз продирался сквозь лабиринт окошек. Зато чудно, все при деле - юзер кнопки на мышке ломает, программистам на хлебушек, чтобы на каждый чих пользователя очередной набор окошек писать.


    > Ты предлагаешь заодно обучить его SQL? И поставить ему дополнительную
    > программу, которая этот SQL выполнять будет? И научить его
    > с этой программой работать?


    Вот при установке клиента Oracle, например, с которым наши "юзеры" работают, программка, которая SQL выполняет, ставится, знаешь ли, по умолчанию.


    > И не морочить юзеру голову SQL и прочими вещами, которые
    > к его работе не имеют никакого отношения.


    Юра, если ты написал такую программу, что пользователям кроме нее вообще ничего не нужно (кроме операционной системы), я тебе искренне обзавидовался.
  • Игорь Шевченко © (13.05.08 15:51) [70]
    User1   (13.05.08 15:48) [68]


    > Затем чтобы можно было производить выборку без GROUP.


    Больше вопросов не имею
  • User1 (13.05.08 15:51) [71]

    > Что ж, это можно. Можно придумать и еще целую кучу ректальных
    > решений вместо одного простого, всем понятного и вполне
    > естественного - сделать форму редактирования справочника.
    >
    >
    > И не морочить юзеру голову SQL и прочими вещами, которые
    > к его работе не имеют никакого отношения.

    Good ! :o) Хотя я конечно понимаю, что Игорь Шевченко сказал это не в прямом смысле...
  • User1 (13.05.08 15:53) [72]

    > Вот поэтому линукса никогда не будет на декстопе. Потому
    > что забота о том, чтобы пользователь кроме мышки ничего
    > в руку не брал и каждый раз продирался сквозь лабиринт окошек.
    >  Зато чудно, все при деле - юзер кнопки на мышке ломает,
    >  программистам на хлебушек, чтобы на каждый чих пользователя
    > очередной набор окошек писать.

    Тоже верно.
  • User1 (13.05.08 16:09) [73]
    Вот к слову например:

    Реализованный в Enterprise Manager SQL Server 2000, Grid (который появляется при выполнении Open Table -> Return all Rows), я так понимаю при каждом создании таблицы, “ведь не создается форма с Grid- ом…”.

    Как например там реализовали “подход справочника” если можно так сказать… ?
  • Юрий Зотов © (13.05.08 16:15) [74]
    > Игорь Шевченко ©   (13.05.08 15:50) [69]

    Игорь, юзер хочет и должен заниматься СВОЕЙ работой, а не освоением команд ОС, языка SQL и клиента Oracle. У него и без этого забот хватает.

    Компьютер для него - лишь инструмент, который эту ЕГО работу ускоряет, делает простой и удобной. Именно потому, что есть мышка, окошки и программист, эти окошки написавший.

    Я не поверю, что твои юзеры - другие.
  • ^-k2-^ © (13.05.08 16:22) [75]
    у нас например некоторый юзер считает, што его работа - забить данные в эксель, а потом одну кнопку нажать - остальное не его забота, чего происходит по кнопке, потом только пусть отчеты правильные и все
    главный инструмент юзера - эксель
  • Юрий Зотов © (13.05.08 16:24) [76]
    > ^-k2-^ ©   (13.05.08 16:22) [75]

    Правильно считает.
  • Anatoly Podgoretsky © (13.05.08 16:26) [77]
    > Юрий Зотов  (13.05.2008 15:34:06)  [66]

    Зачем дополнительную, что пункта меню и отдельной формы недостаточно?
    Вспомним также историю создания SQL - он как раз для рядовых пользователей и создавался, что бы они могли строить простые запросы без программиста.
  • ^-k2-^ © (13.05.08 16:26) [78]
    to Юрий Зотов ©   (13.05.08 16:24) [76]
    ну и нафига ему тогда форма справочника? :)
  • Игорь Шевченко © (13.05.08 16:29) [79]
    Юрий Зотов ©   (13.05.08 16:15) [74]

    Безусловно, пользователь должен заниматься своей работой. В процессе любой работы он пользуется инструментами. Можно сделать один инструмент на все операции пользователя (гибрид пассатижей с молотком), а можно для разных операций использовать разные инструменты. Только и всего.

    Ты знаешь, как ни странно, навигацию в интернете пользователи осваивают довольно быстро, несмотря на то, что к работе эта навигация обычно не имеет ни малейшего отношения.


    > Я не поверю, что твои юзеры - другие.


    Они у меня разные. И выполняют разные задачи. И вообще мы в дальнейшем от ручного ввода отказываемся - невыгодно, слишком много ошибок, слишком много противоречий, обычно нужные нам данные уже в какой-то электронной форме тем или иным образом присутствуют, их надо только преобразовать в нужный для системы вид и загрузить в нее.
  • Юрий Зотов © (13.05.08 16:33) [80]
    > Anatoly Podgoretsky ©   (13.05.08 16:26) [77]

    Толь, честное слово, я не предлагал для редактирования справочников писать отдельную программу, веришь?
    :о)

    > ^-k2-^ ©   (13.05.08 16:26) [78]

    Действительно - и на фига в Екселе форма справочника? Да вообще формы?
    :о)
  • Юрий Зотов © (13.05.08 16:36) [81]
    > Игорь Шевченко ©   (13.05.08 16:29) [79]

    Не передергивай. Несолидно.
  • Дмитрий С (13.05.08 16:36) [82]

    > Действительно - и на фига в Екселе форма справочника? Да
    > вообще формы?
    > :о)

    У нас же все отлично знают Ворд и Эксель "внатуре" :)
  • Дмитрий С (13.05.08 16:36) [83]
    ЗЫ... Для многих как было "компьютер - печатная машинка" так и остается :)
  • ^-k2-^ © (13.05.08 16:38) [84]
    Юрий Зотов ©   (13.05.08 16:33) [80]
    вот именно,  но я жду момента, эксель то не резиновый, уже много признаков, и тогда прибегут и будут на мене  и мою базу и мою форму и мою баржу молится..
    а пока в засаде, ждемс..
    :о)
  • Palladin © (13.05.08 16:39) [85]

    >  И вообще мы в дальнейшем от ручного ввода отказываемся
    > - невыгодно, слишком много ошибок, слишком много противоречий,
    >  обычно нужные нам данные уже в какой-то электронной форме

    везет, что в электронной... а как быть с простенькими справочниками/словарями, которые в электронном виде не придут, и вообще у заказчика нет электронных видов входящей информации? а не с простенькими? Игорь, чем иделогически тебе помешала возможность дополнения/изменения/удаления справочников/словарей, через инструменты предоставляемые приложением?

    конечно ее (возможность) не нужно давать все пользователям, нужен Избранный или два Избранных. Все ошибки и противоречия решаются организационно. А конкретно пинками Избранных :)
  • Игорь Шевченко © (13.05.08 16:40) [86]
    Юрий Зотов ©   (13.05.08 16:36) [81]

    Где именно я передергиваю, если не трудно ?
  • Юрий Зотов © (13.05.08 16:40) [87]
    > ^-k2-^ ©   (13.05.08 16:38) [84]

    Катрин, неужели тогда ты сделаешь им формы для редактирования данных? Да еще и (боже упаси!) справочников тоже?
    :о)
  • Anatoly Podgoretsky © (13.05.08 16:43) [88]
    > Юрий Зотов  (13.05.2008 16:33:20)  [80]

    Может и не хотел, но сказал :-)
    Возможность делать запросы факультативная и возможно не для всех, но такая функциональность полезна.
  • Игорь Шевченко © (13.05.08 16:46) [89]
    Palladin ©   (13.05.08 16:39) [85]


    > Игорь, чем иделогически тебе помешала возможность дополнения/изменения/удаления
    > справочников/словарей, через инструменты предоставляемые
    > приложением?


    Да ничем, я просто предложил альтернативу.

    Разнравились мне монстровые приложения вида "Любой каприз за ваши деньги" с тысячей кнопок на каждый из капризов и рядом теловдвижений на каждую модификацию. Может это и красиво, но в ряде случаев неудобно.


    > а как быть с простенькими справочниками/словарями, которые
    > в электронном виде не придут


    А это зависит от того, с какой целью они, простенькие и непростенькие, используются.
  • ^-k2-^ © (13.05.08 16:48) [90]
    Юрий Зотов ©   (13.05.08 16:40) [87]
    ни за што :) просто по итогам моления скажу раньше надо было думать :)
    на самом деле формы есть, но гораздо проще оказалось сделать загрузку всяческих справочников из экселя, чем уболтать работать в формах, причем работа в формах комфортная зуб даю, я сама часто в них работаю, ибо сейчас как раз внедрение в новой фирме
  • Юрий Зотов © (13.05.08 16:49) [91]
    > Игорь Шевченко ©   (13.05.08 16:40) [86]

    1. Гибрид пассатижей с молотком предлагал именно ты. Для редактирования основных данных пишем программу, а для редактирования справочников используем ораклового клиента и обучаем юзера SQL. Вот уж правда - ужа с ежом.

    2. Ты приравнял сложность навигации по интернету и сложность написания SQL-скриптов в оракловом клиенте.
  • Игорь Шевченко © (13.05.08 16:53) [92]
    Юрий Зотов ©   (13.05.08 16:49) [91]


    > Гибрид пассатижей с молотком предлагал именно ты. Для редактирования
    > основных данных пишем программу, а для редактирования справочников
    > используем ораклового клиента и обучаем юзера SQL


    Обучить юзера команде Insert вполне можно, не стоит заранее считать людей тупыми, что и доказывает пример с навигацией по интернету.


    > Ты приравнял сложность навигации по интернету и сложность
    > написания SQL-скриптов в оракловом клиенте.


    Я вот не понимаю, что сложного в написании слова insert и ряда дополнительных слов. Особенно если раз в месяц надо добавить не одну, а двадцать записей.
  • Palladin © (13.05.08 16:55) [93]

    > Разнравились мне монстровые приложения вида "Любой каприз
    > за ваши деньги" с тысячей кнопок на каждый из капризов и
    > рядом теловдвижений на каждую модификацию. Может это и красиво,
    >  но в ряде случаев неудобно.

    А зачем тысяча кнопочек? Достаточного одно пункта в меню "Конфигурация" или "Настройки", под названием "Редактировать словарь".

    Повешать на него вызов лишь одной формы, по левому борту которой выбор справочника/словаря для редактирования, по правому - контрол для редактирования, любой гридообразный подойдет. Это для словарей, для справочников уже все сложнее... там более изощренные формы ввода информации..

    Бо это вообще говоря, возможность редактирования словарей/справочников средствами приложения, иногда совсем не прихоть, но необходимость.


    > А это зависит от того, с какой целью они, простенькие и
    > непростенькие, используются.

    Самый непростенький справочник, который я встречал, это, однажды упомянутый на форуме, реестр населенных пунктов... ох какой он не простенький, во всех отношениях... :) цель использования: ведение БД паспортных столов :)
  • ^-k2-^ © (13.05.08 16:56) [94]
    зачем вообще юзеру писать скрипты, ему достаточно уметь запускать, а готовый скрипт читает текстовый файл и чего куда надо инсертит
  • Юрий Зотов © (13.05.08 16:56) [95]
    > Anatoly Podgoretsky ©   (13.05.08 16:43) [88]

    > Может и не хотел, но сказал :-)

    Где?

    > ^-k2-^ ©   (13.05.08 16:48) [90]

    Кать, неужели ты не понимаешь, что благодаря твоему загрузчику они просто используют Ексель в качестве тех же самых форм ведения справочников? Разве это меняет смысл? О чем речь, вообще, при чем тут Ексель-Неексель? Какая разница-то, по сути?
  • Palladin © (13.05.08 16:58) [96]

    > Я вот не понимаю, что сложного в написании слова insert
    > и ряда дополнительных слов. Особенно если раз в месяц надо
    > добавить не одну, а двадцать записей.

    А удаление? А модификация? Как объяснить пользователям нюансы удаления как такового? Удалять вообще нельзя позволять. Суть редактирования сводится не к простому добавлению, а к целому набору действий по поддержанию достоверности и целостности данных.
  • User1 (13.05.08 16:59) [97]
    Удалено модератором
    Примечание: Правила читаем и уважаем. п 9
  • Игорь Шевченко © (13.05.08 17:00) [98]
    Palladin ©   (13.05.08 16:55) [93]


    > Это для словарей, для справочников уже все сложнее... там
    > более изощренные формы ввода информации..


    Я конечно сильно извиняюсь, а чем словарь от справочника отличается ?


    > Самый непростенький справочник, который я встречал, это,
    >  однажды упомянутый на форуме, реестр населенных пунктов.
    > .. ох какой он не простенький, во всех отношениях... :)
    > цель использования: ведение БД паспортных столов :)


    Зверя не видел, ничего не могу сказать. А сказать я хотел, что не надо замыкаться на одном подходе, только и всего.

    Кстате, в Excel вот народ ваще без всяких справочников вводит. И ничего :)
  • User1 (13.05.08 17:00) [99]

    > Игорь Шевченко


    Насчет interface. Оно ?

    http://citforum.ru/programming/delphi/mdi/
  • Ketmar © (13.05.08 17:03) [100]
    э… скажите, с какого поста читать? в смысле, где все забили на проблемы синтаксиса Delphi и перешли к архитектуре БД?
  • ^-k2-^ © (13.05.08 17:04) [101]
    я вообще к тому што разницы по сути нет, а если нет разницы, то эксель - инструмент юзера, хоть в лепешку расшибись с удобством консистентностью и проч требухой :( надоели мне эти эксели отчеты до смерти просто  :(
  • Сергей М. © (13.05.08 17:08) [102]

    > Ketmar ©   (13.05.08 17:03) [100]


    С [34], наверно)

    Одна из славных традиций на Мастаках - заздравие превращать в заупокой)
  • Юрий Зотов © (13.05.08 17:10) [103]
    > Игорь Шевченко ©   (13.05.08 16:53) [92]

    > Обучить юзера команде Insert вполне можно

    Угу. Только придется ему, бедолаге, еще и Delete, и Update, и Where осваивать (потому что ошибки тоже бывают), а заодно придется знать имена схем, таблиц и полей конкретной БД, да еще и какая таблица что хранит, и какое поле что по смыслу означает, да какого это поле типа, да еще и работу с оракловым клиентом освоить придется, да еще этот клиент установить и настроить нужно, да еще... да еще... да еще...

    Нет, ну все это, конечно, так же просто, как навигация по интернету. По сложности вещи вполне сопоставимые, что и говорить.
  • Ketmar © (13.05.08 17:12) [104]
    > Сергей М. ©   (13.05.08 17:08) [102]
    а я давно говорю, что надо хотя бы добавить к каждому посту поле «это ответ на [..]». и сделать ответ отдельной кнопкой, «попостово». как на том же ЛОРе. после чего я напишу себе userJS, который будет отображать ДМ в виде нормального threaded форума.

    а то иногда интересные вещи в неинтересных ветках всплывают, а концов не найти.
  • Palladin © (13.05.08 17:18) [105]

    > Я конечно сильно извиняюсь, а чем словарь от справочника
    > отличается ?

    Словарь есть суть условно фиксированного набора значений, подобных id,value. Условно - означает, что однажды вполне может наступает время Ч и он может измениться, а может и никогда не измениться. Просто все нужно предусмотреть.

    Справочник изменяется куда более частно и сам по себе имеет структуру куда более сложную чем словарь. Но назвать справочник таблицей данных нельзя, бо
    1. в рамках приложения он несет тот же функционал, что и словарь
    2. хоть он изменяется и часто, но далеко не так как другие табличные данные, с которыми работает приложение.

    Их режимы редактирования тоже разделяются. На штатный - официальное изменение состава. И нештатный, например когда пользователь на "олбанском" значение заполнил.

    Нюансов выше крыши. Если универсального визуального решение для редактирования словарей существует, то со справочниками это понятие отсутствует как факт. Это я уже для user1 написал.
  • Palladin © (13.05.08 17:19) [106]

    > частно

    часто
  • Юрий Зотов © (13.05.08 17:19) [107]
    > ^-k2-^ ©   (13.05.08 17:04) [101]

    Кать, сделай ему простые, понятные и удобные формы ввода - и он забудет про свой Ексель, а тебе великое спасибо скажет.
  • Игорь Шевченко © (13.05.08 17:28) [108]
    Юрий Зотов ©   (13.05.08 17:10) [103]


    > Угу. Только придется ему, бедолаге, еще и Delete, и Update,
    >  и Where осваивать (потому что ошибки тоже бывают), а заодно
    > придется знать имена схем, таблиц и полей конкретной БД,
    >  да еще и какая таблица что хранит, и какое поле что по
    > смыслу означает, да какого это поле типа, да еще и работу
    > с оракловым клиентом освоить придется, да еще этот клиент
    > установить и настроить нужно, да еще... да еще... да еще.
    > ..
    >
    > Нет, ну все это, конечно, так же просто, как навигация по
    > интернету. По сложности вещи вполне сопоставимые, что и
    > говорить.


    Ну и кто передергивает ?

    "Есть справочник, куда раз в месяц добавляется запись".

    А с написанной программой конечно никакого обучения не предполагается, интерфейс априори считается интуитивно понятным. Запустил - и сразу знаешь, что делать, чтобы раз в месяц запись добавить.
  • Игорь Шевченко © (13.05.08 17:32) [109]
    Palladin ©   (13.05.08 17:18) [105]

    Честно говоря, разницу не совсем увидел, кроме той, что в словаре id,value, а в справочнике более сложная структура.

    Юрий Зотов ©   (13.05.08 17:19) [107]


    > Кать, сделай ему простые, понятные и удобные формы ввода
    > - и он забудет про свой Ексель, а тебе великое спасибо скажет.
    >


    Excel, он не только данные вводить умеет (ну и хранить их). Он еще считает...Формулы там разные...
  • ^-k2-^ © (13.05.08 17:35) [110]
    Юрий Зотов ©   (13.05.08 17:19) [107]
    Юр, есть они :) но эксель им перешибить слабо :)
    иногда бесполезно биться головой об стену, надо дождаться

    ну вобщем об чем мы, о том што формы это хорошо, но не надо имхо фанатизма
    у меня в базе куча классификаторов, и половина минимум без форм, если приспичит - откроют любым клиентом для баз и поправят, не баре :) вся целостность либо на уровне триггеров, констрейнтов, либо нефиг туда вообще лазить, ибо классификатор внутренний, корректировка обычно влечет за собой соответствующее изменение функционала, а это уж юзер тем более не сделает
    на моей памяти ни разу ещё никому не приспичило, а по техподдержке достаточно переписки видела
  • Palladin © (13.05.08 17:45) [111]

    > Честно говоря, разницу не совсем увидел, кроме той, что
    > в словаре id,value, а в справочнике более сложная структура.

    справочники это как в 1C
    словари это для ComboBox'а

    ку?

    пользователь, мой пользователь, блондинка-машинистка, забивающая например реестр нормативно-правовых актов в МА МО, у нее есть словарь видов НПА:

    Распоряжение
    Постановление
    Утверждение

    который условно фиксирован. ты предлагаешь мне написать ей памятку:
    1. Зайти в меню "Словари"
    2. Выбрать пункт "Редактировать"
    2.а. Появится форма ввода текста
    3. Если нужно добавить: напишите insert into DocKinds (value) values ("Решение")
    4. Если нужно удалить: напишите update DocKinds set is_deleted=1 where value="Распоряжение"
    5. Если нужно изменить орфографическую ошибку: напишите update DocKinds set value="Распоряжение" where value="Распаряжение"
    6. Если нужно изменить значение, то сначала выполните шаг 4, потом шаг 3 для нового значения.
    7. Нажмите кнопку "Выполнить"



    Ты знаешь куда меня пошлют с такой памяткой? И меня, и всю нашу фирму, и все наши программы...
  • oxffff © (13.05.08 17:46) [112]
    Откуда читать, только из больницы вернулся?
  • Игорь Шевченко © (13.05.08 17:51) [113]
    Palladin ©   (13.05.08 17:45) [111]


    > справочники это как в 1C


    > ку?


    Не ку - не видел, не знаю.


    > пользователь, мой пользователь, блондинка-машинистка, забивающая
    > например реестр нормативно-правовых актов в МА МО, у нее
    > есть словарь видов НПА:
    >
    > Распоряжение
    > Постановление
    > Утверждение


    А я извиняюсь, этот словарь кто придумал и кто его может изменять, и как часто ?


    > который условно фиксирован. ты предлагаешь мне написать
    > ей памятку:
    > 1. Зайти в меню "Словари"
    > 2. Выбрать пункт "Редактировать"
    > 2.а. Появится форма ввода текста
    > 3. Если нужно добавить: напишите insert into DocKinds (value)
    > values ("Решение")
    > 4. Если нужно удалить: напишите update DocKinds set is_deleted=1
    > where value="Распоряжение"
    > 5. Если нужно изменить орфографическую ошибку: напишите
    > update DocKinds set value="Распоряжение" where value="Распаряжение"
    > 6. Если нужно изменить значение, то сначала выполните шаг
    > 4, потом шаг 3 для нового значения.
    > 7. Нажмите кнопку "Выполнить"


    Вот этого я как раз не предлагаю. Я предлагаю использовать сторонние средства.

    И еще один вопрос - новые типы этих самых распоряжений тоже блондинка-машинистка может вводить ? Типа "Уведомление о немедленном расстреле","Подтверждение", и т.п. ?
  • Юрий Зотов © (13.05.08 18:02) [114]
    > Игорь Шевченко ©   (13.05.08 17:28) [108]

    Вот для того, чтобы раз в месяц добавить запись, юзеру и придется все это знать. Поскольку чтобы ее добавить, он должен знать, что добавлять, куда добавлять и как добавлять. И как исправить, если добавил не то, не туда или не так.

    Иначе либо не сможет добавить совсем (и это еще хорошо), либо такое понадобавляет - мама, не горюй!
  • Юрий Зотов © (13.05.08 18:06) [115]
    > Игорь Шевченко ©   (13.05.08 17:32) [109]

    > Excel, он не только данные вводить умеет (ну и хранить их).
    > Он еще считает...Формулы там разные...

    Игорь, страшную тайну тебе открою - дельфишная форма считать умеет еще лучше и быстрее. Притом что хошь - хоть тройные интегралы... ексель нервно курит в сторонке.
  • Palladin © (13.05.08 18:06) [116]

    > Не ку - не видел, не знаю.

    ты не видел 1С, как я тебе завидую...
    ну я даже не знаю как еще объяснить...


    > А я извиняюсь, этот словарь кто придумал и кто его может
    > изменять, и как часто ?

    Самое существование понятия этого словаря придумано заказчиком и указано в ТЗ.
    Первоначальный состав определен в ТЗ, в нем, так же, сказано, что должна существовать возможность изменения его состава.
    Как часто? А может через неделю придумают новый вид, а может в течении нескольких лет не менятся, а может не измениться никогда.


    > Вот этого я как раз не предлагаю. Я предлагаю использовать
    > сторонние средства.

    какие? Query Analizer? Если ты читал мои вопли про мой аппсервер в ветке про finally, то скажу: отделы МС МО (я кстати неправильно МА МО написал :) ), раскиданы территориально по городу, юристы в режиме для чтения в одном здании, машинистки-редакторы в другом здании, серверная с набором администраторов сети в третьем, дядя занимающийся публикациями открытых НПА на веб-сайте городской администрации в третьем. представляешь условия? :) администраторы, упертые быки, не собираются нарушать никаких своих политик безопасности, единственный открытый протокол внутренней сети МС МО - HTTP. Что прикажешь делать? Какой инструмент для исполнения SQL запросов использовать. Или ты предлагаешь какой-то другой сторонний инструмент позволяющий пользователю не обращатся к SQL с целью правки табличных данных?


    > И еще один вопрос - новые типы этих самых распоряжений тоже
    > блондинка-машинистка может вводить ?

    Эти типы может вводить, как я уже сказал выше, отдельная группа пользователей, Избранные :) (обычно один только, во избежание эксцессов), в составе тех же машинисток. Потому как больше это никому не нужно. Заинтересованные в этой программе это юр.отдел, и мэр в лице начальника департамента по информационным ресурсам города. Ни мэр ни начальник ни юр. отдел не обладают супер знаниями в областях БД и SQL как таковог.
  • Palladin © (13.05.08 18:49) [117]
    Игорь, твоя логика такова "ножницы не нужны, вот топор, ложите бумагу на топоронепробиваемую поверхность и аккуратно по разрезу наносите удар, при необходимости повторить", логика ANB "еще 300К и ваши капризы будут исполненны" из той же оперы...

    либо у вас тупые заказчики, либо у них нет выбора... у наших есть...
  • ^-k2-^ © (13.05.08 19:10) [118]
    Palladin ©   (13.05.08 18:49) [117]
    есть предметки где классификаторы меняются редко в принципе, а изменения влекут за собой изменения функционала, а может у них пользователи вообще на подписке сидят, и все изменения за них отслеживает техподдержка, и закачивает в базу напрямую без помощи посторонних рук, аля антивирусные базы,
    можно много выводов понаделать..
  • Anatoly Podgoretsky © (13.05.08 19:13) [119]

    > > Может и не хотел, но сказал :-)
    >
    > Где?

    Юрий Зотов ©   (13.05.08 15:34) [66]
    Там ты ссылаешься на ИШ [62], но там Игорь ничего подобного не предлагал.
  • Palladin © (13.05.08 19:16) [120]

    > ^-k2-^ ©   (13.05.08 19:10) [118]

    А мы говорим разве о предметке Игоря? Мы говорим вообще о необходимости существования инструментов на уровне приложения для редактирования справочников, в общем случае. Лично я пытаюсь Игоря с его колокольни спихнуть на землю. И однозначно утверждать, что нафиг не нужны формы редактирования словарей в приложениях, бо есть например Access, открыл mdb и изменил чего то - это как минимум мыслить однобоко.

    И вот, кстати, диаметрально противоположный случай. Наша фирма территориально расположена в том же здании, где находится святая святых коммунальных платежей, ИРС (информационно-расчетная служба) где'же и центральная БД, и мы'же обслуживаем как БД так и самое технику, конечно у нас в программе КП нет никаких намеков на редактирование словарей, а нафик оно не надо, мы этим сами занимаемся, по первому требованию начальства ИРС. Вот когда мы будем прекращать столь близкие отношения с ИРС, вот тогда придется вводить это дело в приложение в обязательном порядке.
  • Anatoly Podgoretsky © (13.05.08 19:17) [121]
    Во что override or overload превратились к 100 посту.
  • ^-k2-^ © (13.05.08 19:20) [122]
    Palladin ©   (13.05.08 19:16) [120]
    "И однозначно утверждать, что нафиг не нужны формы редактирования словарей в приложениях, бо есть например Access, открыл mdb и изменил чего то - это как минимум мыслить однобоко."
    просто для интересу - в каком посте он такое утверждал? или ещё кто-нибудь утверждал, а то я не с начала :) я естественно про первую часть цитаты
  • Palladin © (13.05.08 19:27) [123]

    > ^-k2-^ ©   (13.05.08 19:20) [122]

    все началось с:
    Игорь Шевченко ©   (13.05.08 12:50) [42]
    и в:
    Игорь Шевченко ©   (13.05.08 14:04) [49]

    > Делать работу со справочниками в программе вместо того, чтобы заполнять их один раз, стоит только в единственном случае - когда данные в справочниках меняются примерно с той же интенсивностью, что и данные, в которых эти справочники используются.


    Его колокольня с мыслями о фиксированности словарей. Он это утверждение и защищает всю ветку, ссылаясь на, то что вполне можно зазказчик может использовать какие либо сторонние инструменты если вдруг произойдет изменение...
  • Юрий Зотов © (13.05.08 19:30) [124]
    > Anatoly Podgoretsky ©   (13.05.08 19:13) [119]

    > Там ты ссылаешься на ИШ [62]

    На [62] я ссылался в [66]. И где в [66] сказано про отдельное приложение для редактирования справочников?

    > но там Игорь ничего подобного не предлагал.

    Именно это Игорь в [62] и предлагал. Инструкция с картинками - она же сама по себе не выполнится, к ней программа нужна.
  • Anatoly Podgoretsky © (13.05.08 19:39) [125]
    Юрий ты и сам бы мог посмотреть,  а не заставлять меня копировать

    > И поставить ему дополнительную программу, которая этот SQL выполнять будет?
  • ^-k2-^ © (13.05.08 19:44) [126]
    "Игорь Шевченко ©   (13.05.08 12:50) [42]
    Любой "гибкий справочник" подлежит безусловному сожжению в топке

    Игорь Шевченко ©   (13.05.08 14:04) [49]
    User1   (13.05.08 13:49) [48]
    > Как тогда лучше реализовать справочник n таблиц ?
    Наверное как лучше реализовать интерфейс к n справочникам, находящимся в n таблицах ?
    Воспользоваться механизмом наследования, например, сделав базовую функциональность в форме-предке, а работу с конкретными справочниками вынести в наследников этой формы, если есть различия. Ну и разумеется на каждый справочник свой DataSet, в датамодуле или в одном кучу или в нескольких, по вкусу. Соответственно, Grid и DataSource будут находиться в предке. Один раз.
    Но это чаще всего идиотский интерфейс, сделанный, потому что "по другому не умеем". Делать работу со справочниками в программе вместо того, чтобы заполнять их один раз, стоит только в единственном случае - когда данные в справочниках меняются примерно с той же интенсивностью, что и данные, в которых эти справочники используются.
    Размер программы - это последнее, на что стоит обращать внимание при ее разработке."

    сорри сразу за оверквоттинг, дяденьки модераторы не бейте

    по [42] все таки встраивать в свою программу средство, подобное по гибкости тоад или пл/сиквел навигатор - смысл? я лично толкую так

    по [49] ну по большому счету действительно в таких обобщенных справочниках может работать человек, имеющий представление о  структуре базы
  • Palladin © (13.05.08 19:45) [127]

    > Anatoly Podgoretsky ©   (13.05.08 19:39) [125]

    Какую? вроде "Конфигуратор Программы"? Кому, пользователю? Какому? На какую машину? Отпуск, декрет, загул и увольнение... всем? смысл? одному, но бегать убирать приложение-конфигуратор с машины и ставить на другую? боже упаси... "Конфигуратор Программы" должен отвечать за ведение пользователей и раздачу подобных прав на редактирование словаря...
  • Юрий Зотов © (13.05.08 19:51) [128]
    > Anatoly Podgoretsky ©   (13.05.08 19:39) [125]

    А я и посмотрел.

    Правильно сказано было. Если Игорь предлагает заставить юзера самого писать SQL для обновления справочников - значит, он предлагает поставить юзеру "дополнительную программу, которая этот SQL выполнять будет". Поскольку сам по себе этот SQL, очевидно, не выполнится.

    Так что это как раз предложил Игорь. Я же об этом лишь написал, но "написал" <> "предложил". Нес па?
  • Palladin © (13.05.08 19:52) [129]
    Если и правда Игорь в течении ветки ушел от жесткой позиции ненужности функционала по редактированию словарей (не справочников) и использования SQL (в картинках для пользователя) к стороннему (а стороннему ли?) приложению выполняющему функционал конфигуратора словарей, тогда конечно я забираю свои слова про бумагу топором обратно и приношу извинения, однако [127] это не отменяет
  • ^-k2-^ © (13.05.08 19:56) [130]
    Palladin ©   (13.05.08 19:45) [127]
    а конфигуратор разве не может быть в составе программы, только права и соотвественно видимость в зависимости от роли? зачем бегать ставить. передается только юзер/пароль
  • Palladin © (13.05.08 19:58) [131]

    > ^-k2-^ ©   (13.05.08 19:56) [130]

    а я о чем толкую? я о правах пользователей и толкую, для обычных функционал основного приложения по редактированию не доступен, меняется группа, он все видит и имеет право... однако это никакое не стороннее приложение, это все тоже основное приложение
  • Игорь Шевченко © (13.05.08 20:03) [132]
    Palladin ©   (13.05.08 18:06) [116]


    > ты не видел 1С, как я тебе завидую...


    Ты можешь еще позавидовать - я не автоматизировал бухучет, не писал программы "Склад", "Кадры" и т.п. :)

    Palladin ©   (13.05.08 18:49) [117]


    > либо у вас тупые заказчики, либо у них нет выбора... у наших
    > есть...


    Выбора у наших заказчиков кстати нет, это ты прав :)

    Но из этого не следует, что мы их, бедных, припираем к стенке, заставляем учить SQL и прочие страшные слова наизусть.

    Как отметила Катя, в ряде случаев при изменении содержимого "словаря" может потребовать изменение функциональности (тут правда и insert-ом не обойдешься).


    > "ножницы не нужны, вот топор, ложите бумагу на топоронепробиваемую
    > поверхность и аккуратно по разрезу наносите удар, при необходимости
    > повторить",


    Если утрировать до бесконечности, то да, что-то есть. Одни из путей - использование уже написаного инструментария, вместо повторения его функциональности.

    Юрий Зотов ©   (13.05.08 18:06) [115]


    > Игорь, страшную тайну тебе открою - дельфишная форма считать
    > умеет еще лучше и быстрее. Притом что хошь - хоть тройные
    > интегралы... ексель нервно курит в сторонке.


    Нет, Юра, без программиста она нифига считать не умеет. А Excel умеет, пусть не тройные интегралы, пусть поскромнее, но умеет.
    Вот например сумму, которую мне надо платить за квартиру и прочие там...киловатты он вполне считает без всяких дельфийских форм. Более того, в MS (точнее, в Sun) и слыхом не слыхивали что Игорь Шевченко из далекой России, где по улицам бродят медведи, будет использовать их продукт для такой вот цели. Как обычный, кстате, юзер.
  • Palladin © (13.05.08 20:08) [133]

    > Выбора у наших заказчиков кстати нет, это ты прав :)

    так и знал, вопросов больше не имею, просто и ты меня пойми ) в таких условиях не заставишь выполнять ни SQL инструкции, ни шайку сетевых администраторов в купе с эникейщиками бегать переставлять "стороннее приложение" с места на место, просто (может по звонку, или при обновлении) приходит наш человек, ему знать про БД и словари не нужно, у него всегда инструмент для администрирования пользователей аппсервера на флешке, у него есть все данные для соединения с серевером, приходит в любое место, соединяется, переназначает права/заливает обновления/еще чего нибудь делает уходит, удобно... всего один человек, а столько делает )
  • ^-k2-^ © (13.05.08 20:13) [134]
    в справочниках обычно много чего заложено :) в том числе и форинкеи на другие справочники, много поможет если редактировать такой справочник будет человек, не имеющий представления о базе?  ну вот справочник:

    CREATE TABLE STOCK_EXCHANGE
    (
     SE_CODE            VARCHAR2(3 BYTE)           NOT NULL,
     SE_DESCR           VARCHAR2(20 BYTE)          NOT NULL,
     SE_STD_VAL_DAY     NUMBER(2)                  NOT NULL,
     SE_CLT_NAME        VARCHAR2(10 BYTE)          NOT NULL,
     SE_CCY_CODE        VARCHAR2(3 BYTE)           NOT NULL,
     SE_PS_CODE         VARCHAR2(20 BYTE),
     SE_INT_CODE        VARCHAR2(240 BYTE),
     SE_SHORT_NAME      VARCHAR2(30 BYTE),
     SE_BIRG            VARCHAR2(1 BYTE),
     SE_SE_CODE         VARCHAR2(3 BYTE),
     SE_TR_CODE         VARCHAR2(3 BYTE),
     SE_DEPO_CODE_FOND  VARCHAR2(3 BYTE),
     SE_DEPO_CODE_CL    VARCHAR2(3 BYTE),
     SE_AVT_FOND        VARCHAR2(1 BYTE),
     SE_AVT_CL          VARCHAR2(1 BYTE),
     SE_CR_CODE         NUMBER(3),
     SE_SSE_CODE        VARCHAR2(240 BYTE),
     SE_PP_NUMBER       VARCHAR2(20 BYTE)
    )
    TABLESPACE USERS
    PCTUSED    0
    PCTFREE    10
    INITRANS   1
    MAXTRANS   255
    STORAGE    (
               INITIAL          128K
               MINEXTENTS       1
               MAXEXTENTS       2147483645
               PCTINCREASE      0
               BUFFER_POOL      DEFAULT
              )
    LOGGING
    NOCACHE
    NOPARALLEL;
    CREATE UNIQUE INDEX SE_PK ON STOCK_EXCHANGE
    (SE_CODE)
    LOGGING
    TABLESPACE USERS
    PCTFREE    10
    INITRANS   2
    MAXTRANS   255
    STORAGE    (
               INITIAL          128K
               MINEXTENTS       1
               MAXEXTENTS       2147483645
               PCTINCREASE      0
               BUFFER_POOL      DEFAULT
              )
    NOPARALLEL;
    CREATE UNIQUE INDEX SE_UK ON STOCK_EXCHANGE
    (SE_INT_CODE)
    LOGGING
    TABLESPACE USERS
    PCTFREE    10
    INITRANS   2
    MAXTRANS   255
    STORAGE    (
               INITIAL          128K
               MINEXTENTS       1
               MAXEXTENTS       2147483645
               PCTINCREASE      0
               BUFFER_POOL      DEFAULT
              )
    NOPARALLEL;
    /
    триггеры почикано
    /
    CREATE SYNONYM GDO.STOCK_EXCHANGE_BK FOR STOCK_EXCHANGE;
    CREATE SYNONYM MMVB_40310.STOCK_EXCHANGE FOR STOCK_EXCHANGE;
    CREATE SYNONYM SSERGEY.STOCK_EXCHANGE FOR STOCK_EXCHANGE;
    ALTER TABLE STOCK_EXCHANGE ADD (
     CONSTRAINT SE_PK PRIMARY KEY (SE_CODE)
       USING INDEX
       TABLESPACE USERS
       PCTFREE    10
       INITRANS   2
       MAXTRANS   255
       STORAGE    (
                   INITIAL          128K
                   MINEXTENTS       1
                   MAXEXTENTS       2147483645
                   PCTINCREASE      0
                  ));
    ALTER TABLE STOCK_EXCHANGE ADD (
     CONSTRAINT SE_UK UNIQUE (SE_INT_CODE)
       USING INDEX
       TABLESPACE USERS
       PCTFREE    10
       INITRANS   2
       MAXTRANS   255
       STORAGE    (
                   INITIAL          128K
                   MINEXTENTS       1
                   MAXEXTENTS       2147483645
                   PCTINCREASE      0
                  ));
    ALTER TABLE STOCK_EXCHANGE ADD (
     CONSTRAINT SE_CCY_FK FOREIGN KEY (SE_CCY_CODE)
       REFERENCES CURRENCY (CCY_CODE));
    ALTER TABLE STOCK_EXCHANGE ADD (
     CONSTRAINT SE_CLT_FK FOREIGN KEY (SE_CLT_NAME)
       REFERENCES CALENDAR_NAME (CLT_NAME));
    ALTER TABLE STOCK_EXCHANGE ADD (
     CONSTRAINT SE_CR_FK FOREIGN KEY (SE_CR_CODE)
       REFERENCES CARRIER (CR_CODE));
    ALTER TABLE STOCK_EXCHANGE ADD (
     CONSTRAINT SE_DEPO_FK FOREIGN KEY (SE_DEPO_CODE_FOND)
       REFERENCES DEPOS (DEPO_CODE));
    ALTER TABLE STOCK_EXCHANGE ADD (
     CONSTRAINT SE_DEPO_FK2 FOREIGN KEY (SE_DEPO_CODE_CL)
       REFERENCES DEPOS (DEPO_CODE));
    ALTER TABLE STOCK_EXCHANGE ADD (
     CONSTRAINT SE_PS_FK FOREIGN KEY (SE_PS_CODE)
       REFERENCES PERSON (PS_CODE));
    ALTER TABLE STOCK_EXCHANGE ADD (
     CONSTRAINT SE_SE_FK FOREIGN KEY (SE_SE_CODE)
       REFERENCES STOCK_EXCHANGE (SE_CODE));
    ALTER TABLE STOCK_EXCHANGE ADD (
     CONSTRAINT SE_TR_FK FOREIGN KEY (SE_TR_CODE)
       REFERENCES TRANSACTIONS (TR_CODE));
    GRANT SELECT ON  STOCK_EXCHANGE TO GDO;
    GRANT SELECT ON  STOCK_EXCHANGE TO FRONT;
    GRANT DELETE, INSERT, SELECT, UPDATE ON  STOCK_EXCHANGE TO BOWN;
    ну дали мы твоей блондинке bown, дали твое средство для справочников,
    человек реально утонет пока будет по всем справочникам рассекать,
    или будет удивляться, почему у нужной персоны недоступна площадка, ведь она завела, а то што не привязала персону все равно прийдется в картинках рассказывать
  • Palladin © (13.05.08 20:13) [135]

    > Как отметила Катя, в ряде случаев при изменении содержимого
    > "словаря" может потребовать изменение функциональности (тут
    > правда и insert-ом не обойдешься).

    такое, кстати, и у нас встречается... но это куда больше исключение, чем правило...
  • Palladin © (13.05.08 20:26) [136]

    > ^-k2-^ ©   (13.05.08 20:13) [134]

    :)

    Дополнительно, в метафизических терминах могу рассказать про справочник населенных пунктов. Он - справочник, отображаемая в терминах данных сущность, которую он представляет, это населенный пункт. Однако не все так просто. Во первых, населенный пункт принадлежит стране. В дело вступает словарь стран. Во вторых он может принадлежать, а может и не принадлежать, федеральной единице (в России: области, краю, республике). В состав справочника входит справочник "Федереальные единицы", а справочник он потому, что Федеральная единица в свою очередь принадлежит стране. В третьих, он может принадлежать, а может и не принадлежать, локальной единице (в России в подавляющем большинстве - район). Локальная единица - тоже справочник со ссылкой на федеральную единицу (необязательно) и страну (обязательно). Которая может не принадлежать федеральной единице, а может и не принадлежать, но всегда принадлежит стране. В третьих справочник меняет состав в месяц раз 10-15. Хотя может 3 месяца не меняться, пока товарищ из удмуртии, из неизведанного белого пятна с двумя домами носящими гордое название - станица, не приедет. Или какая нибудь деревня/аул/кишлак имя не поменяет.

    Но список населенных пунктов - справочник.
  • Игорь Шевченко © (13.05.08 20:29) [137]
    Palladin ©   (13.05.08 20:08) [133]


    > так и знал, вопросов больше не имею, просто и ты меня пойми
    > )


    Так я почти с самого начала говорил, что марксизм не догма, а руководство к действию :)

    В постах [49] и [59] в особенности.

    Если ты обратил внимание, то в посте [49] была такая фраза "чаще всего получается идиотский интерфейс". То есть, не всегда и не везде, а то, что чаще - ну такова се ля ви.

    А в посте [59] - "В разных случаях по-разному, очевидно. Какой юзер, какие данные, и т.д."
  • Игорь Шевченко © (13.05.08 20:31) [138]
    Palladin ©   (13.05.08 20:26) [136]


    > В третьих справочник меняет состав в месяц раз 10-15. Хотя
    > может 3 месяца не меняться, пока товарищ из удмуртии, из
    > неизведанного белого пятна с двумя домами носящими гордое
    > название - станица, не приедет. Или какая нибудь деревня/аул/кишлак
    > имя не поменяет


    В четвертых, это уже не справочник, а самые настоящие данные :)
  • Юрий Зотов © (13.05.08 20:39) [139]
    ^-k2-^ ©   (13.05.08 20:13) [134]

    > много поможет если редактировать такой справочник будет человек, не
    > имеющий представления о базе?

    Очень много. Юзеру и не нужно знать, что, куда и как пишется. Он должен работать в СВОИХ профессиональных терминах, а не в спецтерминах БД. И вообще не обязан знать слов "таблица" или "поле". А на форме ввода возле каждого поля ввода естественным образом стоит понятное ЮЗЕРУ наименование этого поля (например ФАМИЛИЯ, а не LAST_NAME). Благодаря чему справочник легко и просто редактируется юзером без всякого знания БД.

    Но если заставить юзера работать с SQL через "клиента общего назначения" - вот тогда он уж точно без знания конкретной БД попухнет. В частности, замучается ручками ссылочные поля прописывать.

    > будет удивляться, почему у нужной персоны недоступна площадка, ведь
    > она завела, а то што не привязала персону все равно прийдется в
    > картинках рассказывать

    А не придется. Форма ввода обязана перед сохранением данных проверить их и явную лажу в БД не писать, а выдать внятное сообщение. Это раз.

    Кроме того, юзер обязан знать СВОЮ предметную область - в том числе, обязан знать, что означают понятия "площадка" и "персона". Поэтому обязан понимать, что ежели площадка персоне не назначена, то для этой персоны она и недоступна. Это два.

    Но если заставить юзера работать с SQL через "клиента общего назначения" - вот тогда он уж точно замучается связки "многие ко многим" (персоны-площадки) ручками заполнять.
  • ^-k2-^ © (13.05.08 20:41) [140]
    Palladin ©   (13.05.08 20:26) [136]
    об чем и речь Тимур, справочники они разные бывают, а ты их унифицированно хочешь, из одного грида (точнее как я понимаю тут куча мастер-деталей будет) под гребенку :)
    а бывают такие справочники, в которых есть все-все населенные пункты? :)
  • Palladin © (13.05.08 20:42) [141]

    > Игорь Шевченко ©   (13.05.08 20:31) [138]

    да вот нет... именно справочник...
    хотя, может, с твоей колокольни это данные...
    в приложениях БД, не простых, а той категории, которую указал ANB в ветке про finally, все жестко подразделяется на конкретные сущности...

    основное дерево иерархии (например "человек" или "лицевой счет")
    справочники (улицы :), они нас. пункту принадлежат)
    словари (национальности, список предоставляемых ЛС'у сервисов)

    вот например документы, удостоверяющие личность у человека, - это не справочник, это единица, подсущность, принадлежащаяя сущности "человек", а вот уже аттрибут этого документа "кем выдан", это справочник, он сложный, состоит из нас.пункта и ГОВД/РОВД и пр. однако это справочник, а не таблица с данными, бо можно все пункты справочника развернуть в id,value, только дофига их будет...

    встречался в древности с нашенской советской СУБД "флинт"?
  • Palladin © (13.05.08 20:46) [142]

    > ^-k2-^ ©   (13.05.08 20:41) [140]

    ага! попалась! :) читаем Palladin ©   (13.05.08 17:18) [105] где я чисто конкретно сказал :), повторюсь, что унифицированное визуальное решение для словарей существует, а для справочников - нет. Чем неоднозначно намекнул что к каждому справочнику, нужен свой подход. И скзал об этом ранее в Palladin ©   (13.05.08 16:55) [93], про изощренность :)
  • Palladin © (13.05.08 20:48) [143]
    Но я продолжаю утвеождать, что возможность их (справочников) редактирования, всегда имеет право на реализацию в контексте основного приложения.
  • ^-k2-^ © (13.05.08 20:50) [144]
    Юрий Зотов ©   (13.05.08 20:39) [139]
    Юр, специализированная форма ввода - да обязана проверить все бизнес-правила, но общая форма для всех справочников - она не умрет все проверять? я собственно про это пекусь
    про sql-клиента - и не надо заставлять его ПИСАТЬ скрипты, но поредактировать и выполнить ничего с юзером от этого не сделается, нам не меньше приходится в их области врубаться и никто ещё не умер
  • Игорь Шевченко © (13.05.08 20:54) [145]

    > А не придется. Форма ввода обязана перед сохранением данных
    > проверить их и явную лажу в БД не писать, а выдать внятное
    > сообщение. Это раз.


    Например, что обязана форма проверить ? Если не трудно :)
  • Игорь Шевченко © (13.05.08 21:02) [146]
    Palladin ©   (13.05.08 20:42) [141]


    > да вот нет... именно справочник...


    Тут мы с тобой можем до хрипоты спорить о терминологии :)


    > вот например документы, удостоверяющие личность у человека,
    >  - это не справочник, это единица, подсущность, принадлежащаяя
    > сущности "человек", а вот уже аттрибут этого документа "кем
    > выдан", это справочник, он сложный, состоит из нас.пункта
    > и ГОВД/РОВД и пр. однако это справочник, а не таблица с
    > данными, бо можно все пункты справочника развернуть в id,
    > value, только дофига их будет...


    Я сильно извиняюсь, опять же, не зная твоей предметной области могу глупость ляпнуть, но все же не можно написать, что выдан он, скажем, ОВД МО "Левобережный" г. Москвы ?

    Вот чем хорош Outlook, например, он для ввода адреса предлагает простое поле типа Memo - вводи, что хочешь, а буде нужда припрет, можешь на отдельные элементы разбить - страна, город, улица, фонарь, аптека...
    И заметь, без всяких справочников - ну кроме списка стран, который тоже непостоянный.

    Я к чему - довелось иметь дело с приложением, которое тоже просило адрес ввести. Так там натурально все хранилось по полям (страна, город, область или штат, улица с домом), и вводилось тоже по полям. Натурально, можно было выбрать страну из "справочника" и город можно было выбрать "из справочника". А так как город привязан к стране, то при выборе города автомагически страна тоже менялась. Такой вот сервис.
    Но самое интересное было, что при использовании этого адреса все аккуратно собиралось через пробелы в длинную строку и печатался адрес на конверте. И все.
  • ^-k2-^ © (13.05.08 21:02) [147]
    Palladin ©   (13.05.08 20:46) [142]
    ага - марфута тута вляпалась :) проблема в том, што я словари от справочников не отличаю, все они таблицы :) вобщем-то скриншот изощренного редактора справочника (не словаря! :о) и как я понимаю общего ля всех справочников?) любопытно будет заценить :)
  • Игорь Шевченко © (13.05.08 21:05) [148]
    Palladin ©   (13.05.08 20:42) [141]


    > встречался в древности с нашенской советской СУБД "флинт"?


    Аллах миловал. Я в древности встречался только с ненашенской СУБД ADABAS :)
  • Palladin © (13.05.08 21:18) [149]

    > Игорь Шевченко ©   (13.05.08 21:02) [146]

    ну что я могу сказать, нельзя передать самую суть происходящего человеку, там не плававшему ), так что смысла в обсуждении религии терминов нет...


    > вобщем-то скриншот изощренного редактора справочника (не
    > словаря! :о) и как я понимаю общего ля всех справочников?
    > ) любопытно будет заценить :)

    так у мня его нет, на каждый справочник свой вид редактирования, правда они все, так как я и рассказал, в одном окне редактирования, в перемешку со словарями, моему пользователю незачем знать, что есть словари, а есть справочники... разные фреймы просто построены для разных справочников... а для, упомянутого мною, справочника нас.пунктов вообще нет редактора :) там все построено хитро, так как Игорь и сказал :), для ввода одно Memo и парсер к нему, пытающийся разбить введенное на составляющие, вот только если не получится, он пользователя лесом посылает, с указанием, что, мол, товарищь, ты прогнал тут...

    кстати, вот, 1C, яркий представитель попытки унифицировать визуальное решение по поводу выбора/редактирования справочников...
  • Юрий Зотов © (13.05.08 21:21) [150]
    > ^-k2-^ ©   (13.05.08 20:50) [144]

    Про ОБЩУЮ форму я и не говорил. Я говорил о том, что форма редактирования справочника для юзера гораздо лучше, нежели SQL в TOAD лабать. И от ошибок заодно подстраховывает.

    > нам не меньше приходится в их области врубаться и никто ещё не умер

    Так нам за это и платят. Не за кодинг же, кодинг копейки стоит. А юзеру за знание SQL платят?
  • Юрий Зотов © (13.05.08 21:23) [151]
    > Игорь Шевченко ©   (13.05.08 20:54) [145]

    > Например, что обязана форма проверить ?

    Игорь, тебе нужно объяснять, как проверяется правильность вводимых данных?
  • Palladin © (13.05.08 21:27) [152]

    > Я сильно извиняюсь, опять же, не зная твоей предметной области
    > могу глупость ляпнуть, но все же не можно написать, что
    > выдан он, скажем, ОВД МО "Левобережный" г. Москвы ?

    нет, неможно, кто-то напишет ОВД МО "Левобережный" г. Москвы, кто-то напишет ОВД МО Левобережный г. Москвы,

    г. Москва, ОВДМО Левобережный
    г. Москва, ОВДМО "Левобережный"

    еще варианты? :) я все богатство выражения одного и того же в разных вариантах со старой студенческой программы паспортных столько перетащил, ты поверить себе не можешь :)
  • Игорь Шевченко © (13.05.08 21:28) [153]
    Юрий Зотов ©   (13.05.08 21:21) [150]


    > Я говорил о том, что форма редактирования справочника для
    > юзера гораздо лучше, нежели SQL в TOAD лабать. И от ошибок
    > заодно подстраховывает.


    От ошибок вообще-то СУБД должна подстраховывать. Ограничения целостности.
  • Palladin © (13.05.08 21:28) [154]

    > поверить себе не можешь :)

    *представить
  • Игорь Шевченко © (13.05.08 21:29) [155]
    Юрий Зотов ©   (13.05.08 21:23) [151]


    > Игорь, тебе нужно объяснять, как проверяется правильность
    > вводимых данных?


    А почему бы и нет ? Именно проверка правильности данный формой.
  • Игорь Шевченко © (13.05.08 21:32) [156]
    Palladin ©   (13.05.08 21:27) [152]


    > нет, неможно, кто-то напишет ОВД МО "Левобережный" г. Москвы,
    >  кто-то напишет ОВД МО Левобережный г. Москвы,
    >
    > г. Москва, ОВДМО Левобережный
    > г. Москва, ОВДМО "Левобережный"


    Можно я еще одну глупость ляпну по незнанию твоей предметки:

    А промеж этих написаний есть существенная разница ?
  • Юрий Зотов © (13.05.08 21:35) [157]
    > Игорь Шевченко ©   (13.05.08 21:29) [155]

    Уговорил, объясняю:

    procedure TForm1.ButtonOkClick(Sender: TObject);
    begin
     if Date2 < Date1 then
       raise EInvalidUser.Create('Сын не может родиться раньше своей матери');
     ModalResult := mrOK;
    end;
  • Palladin © (13.05.08 21:38) [158]

    > Игорь Шевченко ©   (13.05.08 21:32) [156]

    да, при формировании бланков пункт выдачи обязан звучать так как он есть на самом деле, без всякой художественной самодеятельности, тоже касается звучания нас.пунктов и прочих аттрибутов гражданина... ПВС (паспортно визовая служба) это тебе не шутки... а одна из главных функций приложения это избавление абонентов (регистрирующихся) от муторного заполнения всяческих бланков, а предоставление единым бланком данных оператору приложения, который заполняет данные и махом выдает весь набор бланков для ПВС с целью прибытия/убытия/смены места жительства/прописки нового абонента владельцем адреса и прочие вещи... это я только про паспортные... такая же ситуация и по множеству других приложений...
  • Юрий Зотов © (13.05.08 21:39) [159]
    > Игорь Шевченко ©   (13.05.08 21:32) [156]

    > А промеж этих написаний есть существенная разница ?

    А ты напиши SELECT, который выбирает из БД все паспорта, выданные этим самым Левобережным - увидишь разницу.

    Только не забудь, что кавычки - не единственная разница. Кто-то ведь и ЛевабИрежЬный написать может.
  • Ketmar © (13.05.08 21:40) [160]
    > Palladin ©   (13.05.08 21:38) [158]
    прочитал. обмотал череп пластырем, чтобы не взорвалось.
  • Palladin © (13.05.08 21:43) [161]

    > Юрий Зотов ©   (13.05.08 21:39) [159]

    да и это тоже

    скажем, по "выдан кем" паспорта такая выборка не нужна, но
    но она нужна по справочнику военных коммисариатов, причем очень, бо они, коммисариаты, запрашивают дважды в год список призывников... та же ситуация по справочнику адресов города, при запросе от изберкома на список изберателей...
  • Palladin © (13.05.08 21:45) [162]

    > Ketmar ©   (13.05.08 21:40) [160]

    ну, знаешь, я, честно украденные у тебя, исходники читал :), тоже глубоко не вникал, бо чувствовал... еще немножко и все... :)
  • Ketmar © (13.05.08 21:51) [163]
    > Palladin ©   (13.05.08 21:45) [162]
    > ну, знаешь, я, честно украденные у тебя, исходники читал
    > :), тоже глубоко не вникал, бо чувствовал… еще немножко
    > и все… :)

    я не при чём! оно само как-то так…

    я, кстати, тоже свои не читаю. по тем же причинам.
  • Anatoly Podgoretsky © (13.05.08 21:54) [164]
    > Юрий Зотов  (13.05.2008 19:51:08)  [128]

    Мне сегодня лень ругаться и оправдываться.
    У меня сегодня пофигительное настроение.
  • Palladin © (13.05.08 21:54) [165]

    > Ketmar ©   (13.05.08 21:51) [163]

    а по факту [158], там нечему взрываться, если ты когда нибудь бывал в паспортном, то наверное знаешь сколько тебе бланков дают на простейшую операцию прописки, как старательно ты высунув язык выводил каждую букву, отслеживал заполнение каждого пункта в бланке, причем в нескольких бланках одни и теже пункты, возмущаясь, что ты уже это когда то у них заполнял, не ужели они не могли в базе это запомнить и выдать наполовину заполненные... вот это моя программа и делает... ты один листочек подал с данными, а оператор тебе весь набор и выдал...
  • Ketmar © (13.05.08 22:20) [166]
    > Palladin ©   (13.05.08 21:54) [165]
    в последний раз я там был в 16 лет. взял ксиву и ушёл.

    или в 25? когда фото менял? да, вроде бы. отдал ксиву, через месяц вспомнил, что надо её забрать, забрал. кстати, хз, где ксива сейчас. опять куда-то засунул.
  • Palladin © (13.05.08 22:35) [167]
    это ты милиции был... в пункте выдачи паспортов... это другое...

    да и паспортный стол и паспортно визовая служба это разные вещи... пс - муниципальщики/частники(кондаминимумы всяческие), а пвс - штука федеральная... пс - прослойка между человеком и пвс. люди могут обращаться с пропиской и напрямую в пвс, вот только потом будут сильна наказаны штрафными санкциями, бо пс представителей коммунальных услуг не зарегистрировал его у себя, тем самым начисление на человека в ЛС не шло... жилищный кодекс, ептыть :)

    по крайней мере это ситуация в РФ, как у вас я даже без понятия...
  • Игорь Шевченко © (13.05.08 22:41) [168]
    Юрий Зотов ©   (13.05.08 21:35) [157]


    >
    > procedure TForm1.ButtonOkClick(Sender: TObject);
    > begin
    >  if Date2 < Date1 then
    >    raise EInvalidUser.Create('Сын не может родиться раньше
    > своей матери');
    >  ModalResult := mrOK;
    > end;


    Если при этом могу сделать Insert into foo (date1,date2,bar) values ('01-JAN-98', '01-JAN-80', 'Bar')
    то такая проверка, сам понимаешь, как мертвому припарка. А если на уровне СУБД есть такая проверка, и стоит

    date1 date not null,
    date2 date not null,
    constraint valid_birthday check (date1 + минимальный_детородный_возраст < date2)

    то проверка в форме - пустая трата времени.

    Юрий Зотов ©   (13.05.08 21:39) [159]


    > А ты напиши SELECT, который выбирает из БД все паспорта,
    >  выданные этим самым Левобережным - увидишь разницу.


    А он нужен такой select ? Мне кажется, я предупреждал, что я профан в предметке Тимура, нес па ?
  • Ketmar © (13.05.08 22:43) [169]
    > Palladin ©   (13.05.08 22:35) [167]
    я ещё больше без понятия, как оно у нас. %-)
  • Игорь Шевченко © (13.05.08 22:44) [170]
    Palladin ©   (13.05.08 21:38) [158]


    > да, при формировании бланков пункт выдачи обязан звучать
    > так как он есть на самом деле


    Так как он есть на самом деле или так, как в паспорте написано ? Я к чему говорю - мне в одном из паспортов дату рождения на 2 дня раньше написали, так я от этого день рождения не сдвигал...:)
  • Игорь Шевченко © (13.05.08 22:48) [171]
    Palladin ©   (13.05.08 21:54) [165]


    > но она нужна по справочнику военных коммисариатов, причем
    > очень, бо они, коммисариаты, запрашивают дважды в год список
    > призывников


    Вот значит кто у нас за призывниками следит :)


    > сколько тебе бланков дают на простейшую операцию прописки,
    >  как старательно ты высунув язык выводил каждую букву, отслеживал
    > заполнение каждого пункта в бланке, причем в нескольких
    > бланках одни и теже пункты


    А что, перестали давать ? Насколько я помню, все точно также, человек обязан писать бумажки. А вдруг он мошенник и ему твой полузаполненный бланк только на руку сыграет ? А так, ошибется, подлец, тут-то его и разоблачат :)
  • Юрий Зотов © (13.05.08 22:55) [172]
    > Игорь Шевченко ©   (13.05.08 22:41) [168]

    При чем тут предметка? Ну выдай сумму, на которую продали билеты кассы аэропорта "ВерхнеЗеленый". Количество телевизоров модели SONY-123XY на складе. Еще что угодно, где критерий поиска - строка и требуется точное совпадение. При чем тут предметка?
  • Palladin © (13.05.08 22:59) [173]

    >Вот значит кто у нас за призывниками следит :)

    ага, а еще за избирателями )


    >А что, перестали давать ?

    ага, в наших ПС, где уже мое внедрено ) один только дают, ты его заполняешь отдаешь оператору и он его "оцифровывает" попутно задавая наводящие вопросы, в случае сомнений оператора. и тебе не дадут бланк без предъявления паспорта. именно паспортные данные, а точнее данные документа удостоверяющего личность идентифицируют абонента в бд.


    >Так как он есть на самом деле или так, как в паспорте написано ?


    эх... как в паспорте написано )
  • Игорь Шевченко © (13.05.08 23:04) [174]
    Юрий Зотов ©   (13.05.08 22:55) [172]


    > Еще что угодно, где критерий поиска - строка и требуется
    > точное совпадение.


    А с чего ты взял, что во всех предметках во всех данных
    а) требуется точное совпадение ?
    б) необходимо выдавать запросы по любым полям в качестве критерия (и без учета других полей) ?

    Это все равно, что выдавать запрос по всем проживающим на улице Ленина, без учета города, страны и штата.
    Нафиг кому такие данные нужны в здравом уме.
  • Игорь Шевченко © (13.05.08 23:06) [175]
    Palladin ©   (13.05.08 22:59) [173]

    Я могу еще раз повторить, что с твоей предметкой и ее нюансами не знаком, а что до бланков, то пару лет назад их давали и граждане заполняли, как миленькие. А оператор вместо задавания наводящих вопросов обслуживал следующего желающего прописаться, бо очередь была из желающих :)
  • Юрий Зотов © (13.05.08 23:10) [176]
    > Игорь Шевченко ©   (13.05.08 23:04) [174]

    И действительно, с чего я это взял? Точное сопадение хотя бы одного строкового поля (что УЖЕ достаточно) ведь никогда не требуется.
  • Palladin © (13.05.08 23:13) [177]

    >Игорь Шевченко ©(13.05.08 23:06) [175]

    так я тебя ни в чем и не обвиняю, просто отвечаю на твои вопросы. дабы избежать неясностей, что бы тебе и другим интересующимся стало понятно почему именно так и не иначе... я конечно понимаю, что разницу между справочником и словарем тем кто не в теме сложно понять, как и мне некоторые специфики других областей... это все естественно и совсем не безобразно...
  • ^-k2-^ © (13.05.08 23:21) [178]
    to Юрий Зотов ©   (13.05.08 21:21) [150]

    > Про ОБЩУЮ форму я и не говорил. Я говорил о том, что форма
    > редактирования справочника для юзера гораздо лучше, нежели
    > SQL в TOAD лабать. И от ошибок заодно подстраховывает.

    а где кто с этим спорит? да лучше :) но нужно ли? каждый сам решает для своего приложения, пользователь проголосует рублем, делов-то :)


    > > нам не меньше приходится в их области врубаться и никто
    > ещё не умер
    > Так нам за это и платят. Не за кодинг же, кодинг копейки
    > стоит. А юзеру за знание SQL платят?

    нет не платят :) а што юзеры знают sql, или я трtбую от них знания sql? а выполнить не переломятся, такая моя креда
    не нравится выполнять скрипты - пусть наймут кодера, который им скрипты будет выполнять, или админа своего подрядят, или дают доступ к базе, или платят за создание формы
    всякие приятности я реализую когда мне это либо совсем несложно, либо интересно, либо оговорено в ТЗ, а одни и те же формы лабать, както ломает
  • Игорь Шевченко © (14.05.08 00:03) [179]
    Palladin ©   (13.05.08 23:13) [177]


    > так я тебя ни в чем и не обвиняю, просто отвечаю на твои
    > вопросы. дабы избежать неясностей, что бы тебе и другим
    > интересующимся стало понятно почему именно так и не иначе.
    > .. я конечно понимаю, что разницу между справочником и словарем
    > тем кто не в теме сложно понять, как и мне некоторые специфики
    > других областей... это все естественно и совсем не безобразно.
    > ..


    Что лишний раз подтверждает тезис, что все зависит от задачи и ее нюансов и что нет серебряной пули :)
  • Юрий Зотов © (14.05.08 00:12) [180]
    > ^-k2-^ ©   (13.05.08 23:21) [178]

    Так ты скрипты сама рисуешь, юзер их только исполняет?

    Сделали б форму - юзер сам бы все и вводил, без вас и без ваших скриптов. А так - не слишком ли накладная поддержка получается?

    И потом: "одни и те же формы лабать, както ломает", а лабать одни и те же скрипты - не ломает?
  • Германн © (14.05.08 00:18) [181]
    До какого же уровня трепологии может довести полиморфизм людей.
    :)
  • ^-k2-^ © (14.05.08 00:36) [182]
    Юрий Зотов ©   (14.05.08 00:12) [180]
    они рисовать не умеют скрипты, только исполнять, и то когда напрямую достучаться не могу до них, я ж не зверь, хотя щас думаю над обновлением справочников через инет, естественно где это возможно
    а приличную форму за пару минут не набросаешь
    да тратить день-два на работу, которая может не понадобится вообще - завсегда более срочные дела есть
    я знаю што это нехорошо, но приходится выбирать, видел бы мой план дневной :) очень уж он динамический
    в чистой разработке в этом смысле проще, там тебя архитектор и руководитель  проекта телом закрывают, если понимающие
  • Anatoly Podgoretsky © (14.05.08 08:59) [183]
    > Германн  (14.05.2008 00:18:01)  [181]

    Так получается, что override
  • MsGuns © (14.05.08 12:54) [184]
    >Игорь Шевченко ©  

    Странные, однако, у тебя представления о методике ведения справочников. И крайне опасные. Вот, к примеру, твой просвещенный в сиквеле юзер, ваяя очередной запрос типа insert/delete просто забудет написать Where. Кого в этом случае повесят на входной двери - незадачливого юзера или "воспитавшего" его админа(программиста) ?
  • User1 (14.05.08 12:55) [185]
    Вот это раздули блин !!! 8-0 Ветку тока прочетал. Чето слабенько надобыло еще на 200- ти постов... :o))

    Что хочу сказать, на счет мнения Игоря Шевченко.

    Деловтом, что здравый пользователь занающий хотябы основы SQL, и имеющий возможность выполнять SQL- запросы в приложении с которым он ежедневно работает, это "умный" пользователь и таких бы ценили и ценят наверное везде и всюду, но большель шей степени таких пользователей мало.
  • ketmar © (14.05.08 12:55) [186]
    >[184] MsGuns © (2008-05-14 12:54:00)
    того придурка, который забыл сделать триггер.

    ---
    Understanding is not required. Only obedience.
  • Игорь Шевченко © (14.05.08 13:09) [187]
    MsGuns ©   (14.05.08 12:54) [184]


    > Странные, однако, у тебя представления о методике ведения
    > справочников


    Странная, однако, у тебя методика чтения.


    > Вот, к примеру, твой просвещенный в сиквеле юзер, ваяя очередной
    > запрос типа insert/delete просто забудет написать Where.
    >


    В insert where не пишется. Это к сведению.
  • Anatoly Podgoretsky © (14.05.08 13:25) [188]
    > ketmar  (14.05.2008 12:55:06)  [186]

    И что тригер не должен позволять делать законную операцию по удалению именно ВСЕХ записей, в топку такой триггер.
  • uw © (14.05.08 13:33) [189]
    Игорь Шевченко ©   (14.05.08 13:09) [187]

    Написать where в insert'е не страшно, страшно не написать where в delete'е :-) Мой приятель, администратор Оракла, перед выполнением руками delete'а непременно крестился, хотя, вроде, и неверующий.
  • uw © (14.05.08 13:41) [190]
    Хотя, когда справочник, то и не так страшно, если не использовать каскадное удаление, имхо.
  • Игорь Шевченко © (14.05.08 13:44) [191]
    uw ©   (14.05.08 13:33) [189]

    Обычно существует такая штука, как права доступа...Возвращаясь к Ораклу, существует такая штука, как пакеты и процедуры в них. К ним тоже есть права доступа.
    Кое-кто ошибочно предполагает, что я настаиваю на том, чтобы всю работу пользователя заменить на ввод им же операторов SQL.
    Он заблуждается.
  • uw © (14.05.08 13:48) [192]
    Игорь Шевченко ©   (14.05.08 13:44) [191]
    существует такая штука, как пакеты и процедуры в них


    Верно. Когда мой приятель вызывал ХП, то он уже не крестился.
  • User1 (14.05.08 13:58) [193]

    > uw ©   (14.05.08 13:33) [189]


    > Написать where в insert'е не страшно

    8-o лол...
    зы.
    > Игорь Шевченко ©   (14.05.08 13:09) [187]
    > MsGuns ©   (14.05.08 12:54) [184]
    >
    >
    > > Странные, однако, у тебя представления о методике ведения
    >
    > > справочников
    >
    >
    > Странная, однако, у тебя методика чтения.
    >
    >
    > > Вот, к примеру, твой просвещенный в сиквеле юзер, ваяя
    > очередной
    > > запрос типа insert/delete просто забудет написать Where.
    >
    > >
    >
    >
    > В insert where не пишется. Это к сведению.



    > Мой приятель, администратор Оракла, перед выполнением руками
    > delete'а непременно крестился, хотя, вроде, и неверующий.
    >


    Когда хотят удольть множество записей не крестятся а делают backup...
  • Palladin © (14.05.08 14:00) [194]

    > Когда хотят удольть множество записей не крестятся а делают
    > backup...

    таблички с ~11 миллионами записей? шутишь...
  • User1 (14.05.08 14:01) [195]

    > uw ©   (14.05.08 13:41) [190]
    > Хотя, когда справочник, то и не так страшно, если не использовать
    > каскадное удаление, имхо.

    Такое впечатление что тебе 5 лет (без обид...)

    Какая разница справочник или не справочник если ты удаляешь запись(и) "без завязки на ключи" поверь ты очень долго будешь мучатся и ворочаться ночью... :o)
  • uw © (14.05.08 14:11) [196]
    User1   (14.05.08 14:01) [195]
    Такое впечатление что тебе 5 лет (без обид...)

    Какие обиды! Мне даже приятно, что я так молодо выгляжу.

    Какая разница справочник или не справочник если ты удаляешь запись(и) "без завязки на ключи" поверь ты очень долго будешь мучатся и ворочаться ночью... :o)

    Только не говори мне, что ты проектируешь базы данных без внешних ключей...
  • User1 (14.05.08 14:15) [197]

    > uw ©   (14.05.08 14:11) [196]

    А зачем ?
  • DiamondShark © (14.05.08 14:19) [198]

    > Игорь Шевченко ©   (13.05.08 22:41) [168]
    >  А если на уровне СУБД есть такая проверка, и стоит
    >
    > date1 date not null,
    > date2 date not null,
    > constraint valid_birthday check (date1 + минимальный_детородный_возраст
    > < date2)

    И пугать пользователя ексепшеном со страшными инопланетянскими словами?
  • Anatoly Podgoretsky © (14.05.08 14:28) [199]
    > User1  (14.05.2008 14:01:15)  [195]

    До ночи не дойдет, немедленная гильотина на месте.
  • Игорь Шевченко © (14.05.08 14:40) [200]
    DiamondShark ©   (14.05.08 14:19) [198]


    > И пугать пользователя ексепшеном со страшными инопланетянскими
    > словами?


    В приложении как бы Exception-ы обычно перехватываются и представляются на понятном машинистке языке. При запросах таки да, на языке клиента СУБД ругаться будет.
  • boriskb © (14.05.08 15:06) [201]
    Пользователи - они разные.

    У одного кладовщица со средним.
    У другого служащий банка с двумя институтами.
    И приоритеты в их работе разные.

    И конторы у них разные: дисциплина, требования, ответственность и т.д.
    Поменяй в их программных инструментах подходы при программировании - обе взвоют - неудобно!!
    Вот вы про разных и спорите.

    Я лично не вижу противоречий в двух подходах. И тот и другой вполне годны.
  • DiamondShark © (14.05.08 15:28) [202]

    > Игорь Шевченко ©   (14.05.08 14:40) [200]

    Оракла у меня нет, но MS SQL для следующего случая:

    create table foo(date1 datetime, date2 datetime, constraint CK_VALID_DATE check(date2>date1))

    insert into foo values('20050101', '20050101')

    Сообщает:
    Server: Msg 547, Level 16, State 1, Line 1
    INSERT statement conflicted with TABLE CHECK constraint 'CK_VALID_DATE'. The conflict occurred in database 'ExPress', table 'foo'.

    Это в Query Analizer.

    При исполнении той же команды в Дельфи через ADOConnection получаю EOleException.

    Предложите способ получить из этой информации сообщение для секретарши: "Дата 2 должна быть больше Даты 1".

    Способ должен требовать не больше программного кода, и этот код должен быть не сложнее, не тормознее и не трудночитаемее, чем код:

    if DateEdit2.Value <= DateEdit1.Value
     then raise EInvalidInput.Create('Дата 2 должна быть больше Даты 1')
  • Игорь Шевченко © (14.05.08 15:45) [203]
    DiamondShark ©   (14.05.08 15:28) [202]


    > Способ должен требовать не больше программного кода, и этот
    > код должен быть не сложнее, не тормознее и не трудночитаемее,
    >  чем код:
    >
    > if DateEdit2.Value <= DateEdit1.Value
    >  then raise EInvalidInput.Create('Дата 2 должна быть больше
    > Даты 1')


    С такими условиями не предложу. Хочется дублировать проверку данных на клиенте - бога ради, никто не препятствует.

    Более сложный код предложить могу.
  • DiamondShark © (14.05.08 16:37) [204]

    > Более сложный код предложить могу.

    А можно? Интересно же.


    > Хочется дублировать проверку данных на клиенте - бога ради,
    >  никто не препятствует.

    Да просто как-то не кошерно напрягать сервер данными, которые заведомо будут отвергнутыми.

    На деле приходится всё вместе делать: и превалидацию, и декларативную целостность на сервере, и обработку исключений с приведением к машинисткочитаемости.
    :(
  • Игорь Шевченко © (14.05.08 16:42) [205]
    DiamondShark ©   (14.05.08 16:37) [204]


    > А можно? Интересно же.


    Для оракла в свое время напряглись и сделали в приложении, по номеру сообщения и имени CONSTRAINT, про MS SQL ничего не могу сказать, так как не в курсе, что он возвращает при EOleException


    > Да просто как-то не кошерно напрягать сервер данными, которые
    > заведомо будут отвергнутыми.


    Дык оно некошерно, но если кроме ввода через форму существуют еще какие-то методы ввода, то все одно придется читать сообщения на другом языке.


    > На деле приходится всё вместе делать: и превалидацию, и
    > декларативную целостность на сервере, и обработку исключений
    > с приведением к машинисткочитаемости.


    И это тоже
  • DiamondShark © (14.05.08 17:01) [206]

    > Игорь Шевченко ©   (14.05.08 16:42) [205]
    > Для оракла в свое время напряглись и сделали в приложении,
    >  по номеру сообщения и имени CONSTRAINT

    Я так и думал ;)
  • ketmar © (14.05.08 21:02) [207]
    >[188] Anatoly Podgoretsky © (2008-05-14 13:25:00)
    нет, триггер должен бережно сохранять удалённые записи для последующего восстановления, если что. ну, и заодно записывать в логи, кто это был такой умный, кого премии лишать.

    ---
    Understanding is not required. Only obedience.
Есть новые Нет новых   [134435   +13][b:0.002][p:0.02]