Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Окна редактирования записей таблиц(справочников)


Страницы:   1 2

StriderMan ©   (2007-07-31 11:07:00) 

не знаю в тему или нет, перенесите если что

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

Мастера, расскажите как у вас организовано редактирование элементов таблиц(справочников). Это просто формы или какая-то иерархия форм? А может автоматические построители форм? как со списками дела обстоят?
Как вообще организовано управление таблицами (удаление, вставка, редактирование): для каждой таблицы свой код или какие-то базовые классы есть?

или ткните что почитать на эту тему, плз.


StriderMan   (2007-07-31 11:35:00) [21]


> SlymRO ©   (31.07.07 11:29) [4]
> переделать в окно выбора из справочника не проблема:

не, я имею ввиду форму элемента. типа

               _Х
Имя:       [              ]
Возраст: [              ]
Пол        [              ]
         [ОК]  [отмена]


SlymRO   (2007-07-31 11:29:00) [22]

переделать в окно выбора из справочника не проблема:

ID:=Table.Locate(IDFieldName,ID,[]);
result:=GridEdit.ShowModal;
ID:=Table[IDFieldName].Value;

юзадж:
if ShowDict('Папы','Выбираем папу :)','IDFieldName',PapaID) then
 DoSexWith(PapaID);


StriderMan   (2007-07-31 11:28:00) [23]


> Sergey13 ©   (31.07.07 11:21) [1]
> А что значит "управление таблицами"?


> типовые действия (редактирование, удаление, вставка и т.
> д.), в том числе показывать визуальные формы редактирования
> элемента и списка



> Есть универсальные инструменты для конкретных СУБД, типа
> ИБЭксперта. Разовые нештатные работы делаю в них

ну это само собой, тоже им пользуюсь. Нужно именно для штатной работы.

> Была идея нарисовать нечто универсальное - подумал и отпустило

а меня таки не отпустило :) кое-что удалось сделать. в базовой форме элемента правда только поле "наименование" и кнопки "ОК", "Отмена", зато 90% логики в коде :)


> SlymRO

это для списка. а для элемента? для каждой таблички своя уникальная?


Sergey13   (2007-07-31 11:21:00) [24]

А что значит "управление таблицами"?

ИМХО все исключительно.

Есть универсальные инструменты для конкретных СУБД, типа ИБЭксперта. Разовые нештатные работы делаю в них.
Простых до безобразия справочников обычно не так много. Для них все равно рисую отдельные примитивные окошки - ибо фиг знает какую рюшечку запросит пользователь. Была идея нарисовать нечто универсальное - подумал и отпустило.
А для связанных таблиц, коих обычно большинство - сам бог велел рисовать оригинальные формы.


SlymRO   (2007-07-31 11:21:00) [25]

я делал так:
Обычная форма, все контролы привязаны к DataSource:
object GridEdit: TGridEdit
 object ToolBar1: TToolBar
   object ToolButton1: TToolButton
     Action = DataSetInsert1
   end
   object ToolButton2: TToolButton
     Action = DataSetEdit1
   end
   object ToolButton3: TToolButton
     Action = DataSetDelete1
   end
 end
 object DBGridEh1: TDBGridEh
   DataSource = DataSource
 end
 object ActionList1: TActionList
   Images = ImageList
   object DataSetInsert1: TDataSetInsert
     Category = 'Dataset'
     Caption = Insert
     DataSource = DataSource
   end
   object DataSetEdit1: TDataSetEdit
     Category = 'Dataset'
     Caption = Edit
     DataSource = DataSource
   end
   object DataSetDelete1: TDataSetDelete
     Category = 'Dataset'
     Caption = Delete
     DataSource = DataSource
   end
 end
 object DataSource: TDataSource
   OnStateChange = DataSourceStateChange
 end
end


использую:
procedure TDM.ShowDict(const TableName, Caption: string);
var
 Table:TADOTable;
 DS:TADODataSet;
 i:integer;
 GridEdit:TGridEdit;
begin
 Table:=TADOTable.Create(nil);
 try
   Table.Connection:=Conn;
   Table.TableName:=TableName;
   Table.ReadOnly:=not DM.adm;
   Table.Open;
   DS:=TADODataSet.Create(nil);
   try
     Conn.OpenSchema(siColumns,EmptyParam,EmptyParam,DS);
     with DS.FindField('DESCRIPTION') do
       for i:=0 to Table.FieldCount-1 do
         if DS.Locate('TABLE_NAME;COLUMN_NAME',VarArrayOf([TableName,Table.Fields[i].FieldNa me]),[]) then
           Table.Fields[i].DisplayLabel:=AsString;
   finally
     DS.Free;
   end;
    GridEdit:=TGridEdit.Create(self);
   try
     GridEdit.Caption:=Caption;
     GridEdit.DataSource.Dataset:=Table;
     GridEdit.ShowModal;
   finally
     GridEdit.Free;
   end;

 finally
   Table.Free;
 end;
end;


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо