![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Окна редактирования записей таблиц(справочников)
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;