घर
Top.Mail.Ru Yandeks.Metrika
फोरम: "मामले";
वर्तमान संग्रह: 2007.12.09;
डाउनलोड करें: [xml.tar.bz2];

नीचे

संपादन तालिका प्रविष्टियों (निर्देशिका) के लिए विंडोज इसी तरह की शाखाएँ खोजें


StriderMan ©   (2007-07-31 11:07) [0]

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

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

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

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



Sergey13 ©   (2007-07-31 11:21) [1]

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

IMHO सब कुछ अनन्य है।

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



SlymRO ©   (2007-07-31 11:21) [2]

मैंने ऐसा किया:
Обычная форма, все контролы привязаны к 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;



StriderMan ©   (2007-07-31 11:28) [3]


> सर्गेइएक्सन्यूम्एक्स © (13 31.07.07: 11) [21]
> А что значит "управление таблицами"?


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



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

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

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

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


> SlymRO

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



SlymRO ©   (2007-07-31 11:29) [4]

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

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

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



StriderMan ©   (2007-07-31 11:35) [5]


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

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

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



SlymRO ©   (2007-07-31 11:41) [6]

स्ट्राइडरमैन © (31.07.07 11: 28) [3]
придется динамически контролы клепать... но ето не проблема: бежим по полям и делаем контролы нужного типа...

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



SlymRO ©   (2007-07-31 11:45) [7]

http://www.delphimaster.ru/articles/bdform/index.html



StriderMan ©   (2007-07-31 11:52) [8]


> SlymRO © (31.07.07 11: 41) [6]
> придется динамически контролы клепать...

я немного другим путем пошел - базовый класс формы (TCustomEditForm) с кнопкми ОК и ОТМЕНА и с логикой в коде. а в наследниках добрасываю контролов на форму и прописываю связи с полями и все.
Базовый класс датамодуля имеет абстрактный метод типа
function GetEditForm: TCustomEditForm; virtual; abstract;
а наследники-датамодули уже возвращают неабстрактные формы в этом методе



SlymRO ©   (2007-07-31 12:02) [9]

конечно крут :) но если будет 100 сущностей? будет и 100 датамодулей и 100 TEditFormов?
а если проект динамичный, и множество разработчиков? тады задолбаетесь новые формочки клепать...
можно канечно на пакеты разбить: в пакетах формы для сущьностей...
в пакете RegisterEditor("PapaEdit",TPapaEdit)
CreateEditor(const EditName)
if FindEditor(EditName,Editor) then
 return Editor
else return DefaultEditor;
и один DefaultEditForm с динамическим клепанием контролов для заглушки



StriderMan ©   (2007-07-31 12:35) [10]


> но если будет 100 сущностей? будет и 100
> датамодулей и 100 TEditFormов?
> а если проект динамичный, и множество разработчиков? тады
> задолбаетесь новые формочки клепать...

именно так сейчас дела и обстоят :)))


> можно канечно на пакеты разбить:

до этого пока не дожили :)



Petr V. Abramov ©   (2007-08-02 12:22) [11]

> स्ट्राइडरमैन © (31.07.07 11: 52) [8]
वही बात



StriderMan ©   (2007-08-02 13:13) [12]


> पेट्र वी। अब्रामोव © (02.08.07 12: 22) [11]

это вселяет оптимизм :))

есть даже некоторое желание оформить все это в виде готовых компонентов, пусть народ пользуется :)

типа "подключи БД за 5 минут" :))



Jeer ©   (2007-08-02 14:42) [13]


> есть даже некоторое желание оформить все это в виде готовых
> घटक


?
Для этого есть репозиторий.
Пример такой формы:
http://slil.ru/24694370



StriderMan ©   (2007-08-02 16:52) [14]


> Jeer © (02.08.07 14: 42) [13]
> Для этого есть репозиторий.

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



Игорь Шевченко ©   (2007-08-02 18:44) [15]

как делаю я -
есть Template для формы редактирования с кнопками Ok и Cancel и с методами DisplayObject и FillObject

есть Template для формы списка, натурально с гридом по вкусу, DataSource и с Actions Add, Update, Delete, Aggregate, Filter, Print, Excel.
Эта форма может вызываться как модальная и как не модальная. В первом случае еще две кнопки Ok и Cancel.
есть Template для датамодуля, реализующего два интерфейса - один для получения DataSet для того самого списка, а второй для загрузки объекта по ключевым полям и сохранения объекта (с указанием новый или существующий).

И есть объекты, собственно предметной области.

Все формы работают с методами интерфейсов, не зная, кто их реализует, все формы редактирования работают с объектами, а не с полями в записях.

यहाँ तो



Игорь Шевченко ©   (2007-08-02 18:46) [16]


> но если будет 100 сущностей? будет и 100 датамодулей и 100
> TEditFormов?


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



Gadenysh   (2007-08-02 19:44) [17]


> इगोर शेवचेंको © (02.08.07 18: 44) [15]


прям мануал к моей системе)
и генератор тоже есть))



Игорь Шевченко ©   (2007-08-03 10:05) [18]

Gadenysh   (02.08.07 19:44) [17]


> прям мануал к моей системе)
> и генератор тоже есть))


У дураков мысли сходятся ? :)
Или одного и того же Фаулера читали ?



StriderMan ©   (2007-08-03 11:30) [19]


> इगोर शेवचेंको © (02.08.07 18: 44) [15]

Как все похоже :) кстати тоже интерфейсы использую.


> На этот случай написан генератор кода

вот этого еще нет


> У дураков мысли сходятся ? :)
> Или одного и того же Фаулера читали ?

Видимо первое :) Фаулера не читал.



clickmaker ©   (2007-08-03 11:41) [20]


> Мастера, расскажите как у вас организовано редактирование
> элементов таблиц(справочников).

несколько таблиц-справочников. Русские заголовки таблиц и полей добавляются через sp_addextendedproperty "MS_Description", читаются через
sp_getextendedproperty.
Одна универсальная форма с гридом и кнопками + 1 query + UpdateSQL, скрипты для которого составляются динамически по списку полей.



StriderMan ©   (2007-08-03 12:00) [21]


> Одна универсальная форма с гридом и кнопками

это форма списка. а форма элемента? или их нет?


> Русские заголовки таблиц и полей добавляются через sp_addextendedproperty
> "MS_Description", читаются через
> sp_getextendedproperty

недопонял. где эти названия хранятся реально? Это встроенная фича MSSQL?



clickmaker ©   (2007-08-03 12:02) [22]


> это форма списка. а форма элемента? или их нет?

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


> где эти названия хранятся реально? Это встроенная фича MSSQL?

да. Description можно задать и при визуальном проектировании таблицы



StriderMan ©   (2007-08-03 12:10) [23]


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

В FB похоже тоже есть. По крайней мере из системной таблицы можно вытащить RDB$RELATIONS.RDB$DESCRIPTION



clickmaker ©   (2007-08-03 14:30) [24]


>  а форма элемента?

кстати, делал и такую. Динамическое создание полей ввода соответственно типам полей. Строка - Edit, Дата - DTPicker, Bool - флажок и т.д. Все на скроллбоксе на всякий случай.
Делал также вариант, когда имя-значение отображались в одном списке в виде гиперссылок. При щелчке открывался маленький диалог с соотв. полем ввода.



MsGuns ©   (2007-08-06 09:48) [25]

शुद्ध डेल्फी के माध्यम से सभी प्रकार की "निर्देशिकाओं" के साथ काम करने के इंटरफेस का सार्वभौमिकरण एक खतरनाक बीमारी है, समय के साथ यह बड़ी समस्याओं में आ जाएगा



पन्ने: 1 पूरी शाखा

फोरम: "मामले";
वर्तमान संग्रह: 2007.12.09;
डाउनलोड करें: [xml.tar.bz2];

ऊपर





मेमोरी: 0.66 एमबी
समय: 0.085 c
15-1194461905
vasIZmax
2007-11-07 21:58
2007.12.09
क्या आप एक ऐसी परियोजना को अपनाएँगे जो विफलता और # 133 के लिए बर्बाद है


1-1190278304
Tytus
2007-09-20 12:51
2007.12.09
क्षेत्र के चारों ओर फ्रेम ????


1-1190197939
ari_9
2007-09-19 14:32
2007.12.09
उपयोगकर्ता द्वारा इनपुट भाषा में परिवर्तन करने की घटना को कैसे प्राप्त करें?


6-1175434020
Lyberzon
2007-04-01 17:27
2007.12.09
TWebBrowser से प्रिंट करने के लिए दस्तावेज़ कैसे भेजें?


3-1185587116
wsv
2007-07-28 05:45
2007.12.09
एक निवेदन लिखिए





अफ्रीकी अल्बानियन अरबी भाषा अर्मेनियाई आज़रबाइजानी बस्क बेलारूसी बल्गेरियाई कैटलन सरलीकृत चीनी) चीनी पारंपरिक) क्रोएशियाई चेक डेनिश डच अंग्रेज़ी एस्तोनियावासी फिलिपिनो फिनिश फ्रेंच
गैलिशियन् जॉर्जियाई जर्मन यूनानी हाईटियन यहूदी हिंदी हंगरी आइसलैंड का इन्डोनेशियाई आयरिश इतालवी जापानी कोरियाई लात्वीयावासी लिथुआनियाई मेसीडोनियन मलायी मोलतिज़ नार्वेजियन
फ़ारसी पोलिश पुर्तगाली रोमानियाई रूसी सर्बियाई स्लोवाक स्लोवेनियाई स्पेनिश स्वाहिली स्वीडिश थाई तुर्की यूक्रेनी उर्दू वियतनामी वेल्श यहूदी बंगाली बोस्नियाई
सिबुआनो एस्पेरांतो गुजराती हौसा हमोंग ईग्बो जावानीस कन्नड़ खमेर लाओ लैटिन माओरी मराठी मंगोलियन नेपाली पंजाबी सोमाली तामिल तेलुगु योरूबा
ज़ुलु
Английский Французский Немецкий Итальянский Португальский Русский Испанский