powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Редактирование наборов данных
8 сообщений из 8, страница 1 из 1
Редактирование наборов данных
    #32614680
traktor123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вопрос следующий:
Есть определённое количество таблиц в базе;
Как нужно создавать формы, а точнее КАК ПРАВИЛЬНО будет создать формы
для редактирования этих таблиц ?,
- нужно ли дополнительно составлять Views, или сразу редактировать таблицы ?
- Нужно ли составлять редактируемые select на основе нескольких таблиц ?
....
как вообще правильно организовать множество форм с редактируемыми наборами данных ???

Хотелось бы услышать как реально это люди уже делали, а не догадки и
непроверенные предложения (у меня самого таких мыслей полно)

Спасибо.
...
Рейтинг: 0 / 0
Редактирование наборов данных
    #32614776
Фотография mv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как нужно создавать формы, а точнее КАК ПРАВИЛЬНО будет создать формы
для редактирования этих таблиц ?,
- нужно ли дополнительно составлять Views, или сразу редактировать таблицы ?


А Билл Гейтс его знает, как правиильно. Я, например, когда хочу реадктировать запись в отдельной форме, перекрываю вызов Insert/Update динамически создаю экземпляр модальной формы редактирования, в которую передаю текущий DataSet:

Код: plaintext
  MyRecordEditor.ShowRecordEditor(EditedDataSet: TDataSet): Integer;
Эта функция класса млей формы

Код: plaintext
1.
    class function ShowRecordEditor(EditedDataSet: TDataSet): Integer;
реализуется так

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
  with Self.Create(Application) do
  try
    DataSet := EditedDataSet; // Запоминаю, что редактируем
    if  DataSet.State in [dsEdit, dsInsert] then
      Color := clMoneyGreen; // Зелененькая, если разрешено редактирование
    Result := ShowModal;
  finally
    Free;
    Self := nil;
  end

В OnShow делаю что - то похожее на:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
  if DataSet.State = dsEdit then
    Caption := Caption +
       ' - изменение записи' else
  if DataSet.State = dsInsert then
    Caption := Caption +
       ' - добавление записи' else
    Caption := Caption +
       ' - просмотр записи';



На форме лежат внизу справа пара кнопок OK и Cancel, с соответственно настроенными Kind.

В OnCloseQuery принимается решение на то, что делать с записью после редактирования:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
 

  if ModalResult = mrOk then begin
    if not btbtnOk.Focused then // Перемещаем фокус, чтобы зафиксировать
      if btbtnOk.CanFocus then  // Modified текущего поля
      btbtnOk.SetFocus;

    if FDataSet.State in [dsEdit, dsInsert] then
      if FDataSet.Modified then
        FDataSet.Post else
        FDataSet.Cancel
  end
  else if FDataSet.Modified then // Не OK
    if MessageBox(self.Handle,
                  'Отказ от изменений?',
                  'Запись изменялась ',
                  MB_OKCANCEL	+ MB_ICONHAND)
      <> idOk
    then  CanClose := false
    else FDataSet.Cancel
  else FDataSet.Cancel;


Естественно, все эти дела делаем в базовой форме, от которой наследуем свою, под конкретный набор данных, и размещаем на нем DB - Aware контролы. Т.Е. чаще всего никакого кода писать не приходится., толко мышко поводить. Ну, естественно, для всяких там Lookup - справочников приходится повозиться.


- Нужно ли составлять редактируемые select на основе нескольких таблиц ? ....

Использую компонент FIBpDataSet. Он включает в себя 4 SQL - предложения - для select, insert, update, refresh - операций. То же самое умеет IBX - TIBDataSet.
...
Рейтинг: 0 / 0
Редактирование наборов данных
    #32615014
Guest_2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
авторКАК ПРАВИЛЬНО будет создать формы для редактирования этих таблиц ?
1 Придумываю select для выборки данных из таблицы (или таблиц).
2 Создаю DataWindow object на основе этого selecta
3 В DataWindow Painter'е определяю Update Properties
4 В нужную форму кидаю DataWindow control (DW), указываю, что работать
буду с созданным DataWindow object'ом, подключаю к объекту транзакции
через setTransObject(sqlca)

Для выборки данных использую команду Retrive(...) , где вместо точек использую списак аргументов, если они конечно же используются в Select'e.

Для добавления новых строк использую InsertRow(<rowNum>)
Для удаления deleteRow(<rowNum>)
Для сохранения изменений Update()

Заполнение новых данных по полям или их редактирование идет естественно в самом DW. Только рекомендую перед вызом update() обязательно выполнить acceptText() , т.е. сбросить буфер редактирования в Primary буфер DW.
...
Рейтинг: 0 / 0
Редактирование наборов данных
    #32615041
traktor123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Guest_2 авторКАК ПРАВИЛЬНО будет создать формы для редактирования этих таблиц ?
1 Придумываю select для выборки данных из таблицы (или таблиц).
2 Создаю DataWindow object на основе этого selecta
3 В DataWindow Painter'е определяю Update Properties
4 В нужную форму кидаю DataWindow control (DW), указываю, что работать
буду с созданным DataWindow object'ом, подключаю к объекту транзакции
через setTransObject(sqlca)

Для выборки данных использую команду Retrive(...) , где вместо точек использую списак аргументов, если они конечно же используются в Select'e.

Для добавления новых строк использую InsertRow(<rowNum>)
Для удаления deleteRow(<rowNum>)
Для сохранения изменений Update()

Заполнение новых данных по полям или их редактирование идет естественно в самом DW. Только рекомендую перед вызом update() обязательно выполнить acceptText() , т.е. сбросить буфер редактирования в Primary буфер DW.

очень интересно....
а
InsertRow(<rowNum>)
deleteRow(<rowNum>)

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

insertr
...
Рейтинг: 0 / 0
Редактирование наборов данных
    #32615271
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторочень интересно....
а
InsertRow(<rowNum>)
deleteRow(<rowNum>)

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

insertr
Для пометки и работы с множеством записей в DataWindow есть специальные методы.

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

P.S. В отличие от Guest_2 я вместо пункта 4 и дальнейших описанных действий обычно наследуюсь от нужного по функциональности и отработанного базового класса формы, в котором уже есть DataWindow Control и указываю ему просто, с каким описанным в пункте 2 DataWindow нужно работать. Вся остальная логика по получению, сохранению, добавлению, изменению, сортировки и фильтрации данных уже в базовой форме есть и остается только дописать только специфичную для данной формы логику. Единственное, где приходиться самому кидать DataWindow Control и прописывать полностью логику интерфейса - это в страничках визардов. При желании конечно дописать у базового визарда класс-контроллер для автоматизации управления DataWindow страничек не долго, однако кроме усложнения логики это ничего не даст, так как обычно логика там везде разная и быстрее в коде вызвать методы RETRIEVE и UPDATE, чем писать, тестировать и везде цеплять в общем то бесполезный здесь управляющий класс. Вместо этого базовый класс визарда централизованно управляет логикой визарда и в зависимости от ситуации и действий пользователя производит нужные действия и оповещения страничек путем вызова их событий, где уже и можно прописать нужную логику для обработки затребованной визардом ситуации (или не прописать, если страничка визарда не отслеживает это действие и доверяет по умолчанию провести действие самому визарду). IMHO технология ООП + DataWindow в PowerBuilder дает неплохие результаты, при условии конечно , что хорошо знаешь обе технологии).
...
Рейтинг: 0 / 0
Редактирование наборов данных
    #32615307
Фотография mv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DataWindow - это фича Power Builder? А то мы с трактором на Дельфях работаем... Или я ошибаюсь?
...
Рейтинг: 0 / 0
Редактирование наборов данных
    #32615427
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Угу, PowerBuilder. Правда по идее теперь у PowerBuilder 10 есть DataWindow.NET, который будет работать опять же по идее и в Delphi.NET .
...
Рейтинг: 0 / 0
Редактирование наборов данных
    #32615448
Фотография mv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не, мы не настолько крутые, чтобы с .Net заморачиваться. Дальше 7-го Delphi ни шагу - пока.
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Редактирование наборов данных
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]