Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Редактирование данных в таблице через DBGrid / 16 сообщений из 16, страница 1 из 1
08.02.2013, 12:29
    #38143163
Baby1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Редактирование данных в таблице через DBGrid
Добрый день.
Есть задача: Имеем некоторое множество таблиц с разной, периодически меняющейся структурой. Необходимо чтобы при выборе одной из этих таблиц данные из нее отображались пользователю и он имел бы возможность их редактировать. При добавлении новых записей часть полей должна быть предзаполнена и не может быть изменена пользователем
Сейчас вывожу данные в DBGrid.
Добавляю новую запись так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
 Datagrid->Columns->Items[Table->Fields->FieldByName("Id")->Index]->ReadOnly = false;
Datagrid->Columns->Items[Table->Fields->FieldByName("Author")->Index]->ReadOnly = false;
Table->Insert();
Table->Fields->FieldByName("Id")->AsString = GetNewID();
Table->Fields->FieldByName("Author")->AsString = AuthorName();
Datagrid->Columns->Items[Table->Fields->FieldByName("Id")->Index]->ReadOnly = true;
Datagrid->Columns->Items[Table->Fields->FieldByName("Author")->Index]->ReadOnly = true; 


Приходит строка с 2 заполненными и закрытыми от редактирования полями. Остальные данные пользователь добавляет вручную.
Проблема в том, что эти данные автоматически сохраняются в таблице на сервере. Где я накосоручил и как сделать, чтобы сохранение внесенных данных происходило при нажатии на кнопку "Сохранить" и накак больше?
Заранее спасибо!
...
Рейтинг: 0 / 0
08.02.2013, 12:42
    #38143206
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Редактирование данных в таблице через DBGrid
Baby1Где я накосоручил и как сделать, чтобы сохранение внесенных данных происходило
при нажатии на кнопку "Сохранить" и накак больше?

Прочитать про транзакции. А заодно и про CachedUpdates.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
08.02.2013, 12:44
    #38143213
Паганель
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Редактирование данных в таблице через DBGrid
а может быть, как-то перепроектировать БД, чтобы ее структура не менялась?
...
Рейтинг: 0 / 0
08.02.2013, 12:58
    #38143255
Baby1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Редактирование данных в таблице через DBGrid
Паганель,
Вряд ли, это справочник по инструменту. По таблице на каждый тип - режущий, мерительный и т.д.
У каждого типа инструмента свои параметры, общих параметров максимум 15-20%. Если валить все в одну таблицу, то получится монстр.
Список параметров периодически меняяется администраторами справочника в зависимости от текущих потребностей, типа, решили что для слесарного инструмента будем хранить не только какие-то технические данные, но еще и текущую цену (вот захотелось кому-то сверху именно на слесарку получать отчеты по ценам) - ввели поле "Цена".
...
Рейтинг: 0 / 0
08.02.2013, 13:07
    #38143271
Паганель
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Редактирование данных в таблице через DBGrid
Baby1Список параметров периодически меняяется администраторами справочника в зависимости от текущих потребностейа, человеком, ну это не так страшно
я уж испугался что ПО на ходу создает/грохает поля
...
Рейтинг: 0 / 0
08.02.2013, 13:12
    #38143281
Baby1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Редактирование данных в таблице через DBGrid
Паганель,
не, у меня конечно случай запущенный, но не до такой же степени)))))))))
...
Рейтинг: 0 / 0
08.02.2013, 13:15
    #38143285
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Редактирование данных в таблице через DBGrid
Baby1У каждого типа инструмента свои параметры, общих параметров максимум 15-20%.
Если валить все в одну таблицу, то получится монстр.
А если развернуть в EAV, получится гораздо компактнее. Но тогда придётся использовать
мозги вместо DBGrid.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
08.02.2013, 13:28
    #38143316
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Редактирование данных в таблице через DBGrid
Baby1Есть задача: Имеем некоторое множество таблиц с разной, периодически меняющейся структурой.


Это уже безобразие. СТруктуры таблиц в БД не могут меняться в процессе эксплуатации системы.
Если это так у вас, то меняй подходы.

Baby1 Необходимо чтобы при выборе одной из этих таблиц данные из нее отображались пользователю и он имел бы возможность их редактировать. При добавлении новых записей часть полей должна быть предзаполнена и не может быть изменена пользователем
Сейчас вывожу данные в DBGrid.


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

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

Baby1Приходит строка с 2 заполненными и закрытыми от редактирования полями. Остальные данные пользователь добавляет вручную.
Проблема в том, что эти данные автоматически сохраняются в таблице на сервере. Где я накосоручил и как сделать, чтобы сохранение внесенных данных происходило при нажатии на кнопку "Сохранить" и накак больше?
Заранее спасибо!

Как бы если перейдёшь на запросы, эти проблемы отпадут сами собой.
...
Рейтинг: 0 / 0
08.02.2013, 13:31
    #38143325
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Редактирование данных в таблице через DBGrid
Baby1Список параметров периодически меняяется администраторами справочника в зависимости от текущих потребностей, типа, решили что для слесарного инструмента будем хранить не только какие-то технические данные, но еще и текущую цену (вот захотелось кому-то сверху именно на слесарку получать отчеты по ценам) - ввели поле "Цена".

Это однозначно безобразие, такого быть не должно.
EAV надо в БД в таких случаях применять.
Расскажи своему DB Developer или сам почитай, если это ты и есть.

Ну и цены в товаре быть не должно. Она в прайслистах.
...
Рейтинг: 0 / 0
08.02.2013, 13:31
    #38143328
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Редактирование данных в таблице через DBGrid
Dimitry SibiryakovBaby1У каждого типа инструмента свои параметры, общих параметров максимум 15-20%.
Если валить все в одну таблицу, то получится монстр.
А если развернуть в EAV, получится гораздо компактнее. Но тогда придётся использовать
мозги вместо DBGrid.


DBGrid тоже можно, только совместно с мозгами, а не вместо их.
...
Рейтинг: 0 / 0
08.02.2013, 13:32
    #38143329
Baby1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Редактирование данных в таблице через DBGrid
Dimitry Sibiryakov
Спасибо за наводку. Пойду читать про CachedUpdates, EAV (про эту штуку я вообще впервые слышу) и мозги, как альтернативу DBGrid.
...
Рейтинг: 0 / 0
08.02.2013, 13:39
    #38143348
Baby1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Редактирование данных в таблице через DBGrid
MasterZiv
Как бы редактировать таблицы напрямую, используя эти дурацкие дельфовые TTable, а не запросы (не говоря уже о хранимых процедурах) -- очень дурной тон. Т.е. настолько дурной, что ты сейчас, делая так, проектируешь условно работающую программу,
так сказать, действующую модель.

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


Да знаю я и про процедуры, и про запросы. Только как я напишу эту чертову процедуру на обновление или вставку, если таблица постоянно меняется?! Ну если только на удаление данных, там пофигу сколько столбцов.

MasterZivЭто уже безобразие. СТруктуры таблиц в БД не могут меняться в процессе эксплуатации системы.
Если это так у вас, то меняй подходы.

Да я бы с радостью, только этому "безобразию" лет больше, чем мне и на него столько всего завязано, что соваться страшно...
Кстати, я видел вполне себе успешные коммерческие проекты, где подход к справочникам был такой-же... не иначе у нас списывали)))))
...
Рейтинг: 0 / 0
08.02.2013, 13:45
    #38143365
Паганель
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Редактирование данных в таблице через DBGrid
Baby1Только как я напишу эту чертову процедуру на обновление или вставку, если таблица постоянно меняется?!пусть принимает на вход xml
и разгребает его реагируя на структуру БД
а ПО пусть генерит xml также исходя из структуры БД

еще можно обновляемые вьюхи попробовать

или действительно EAV
...
Рейтинг: 0 / 0
08.02.2013, 13:47
    #38143370
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Редактирование данных в таблице через DBGrid
Да знаю я и про процедуры, и про запросы. Только как я напишу эту чертову процедуру на обновление или вставку, если таблица постоянно меняется?! Ну если только на удаление данных, там пофигу сколько столбцов.

Ещё раз, ТАБЛИЦА НЕ ДОЛЖНА МЕНЯТЬСЯ в процессе эксплуатации.
Прежде, чем что-то делать с формой, добейся ЭТОГО. Не знаю, как.
Да и вообще это не вопрос С++, это вопрос проектирования БД.
...
Рейтинг: 0 / 0
08.02.2013, 13:48
    #38143378
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Редактирование данных в таблице через DBGrid
Да знаю я и про процедуры, и про запросы. Только как я напишу эту чертову процедуру на обновление или вставку, если таблица постоянно меняется?! Ну если только на удаление данных, там пофигу сколько столбцов.


Простейший вариант -- сделать на первое время вид, что новые поля не добавляются, а старые не удаляются, написать процедуры,
а при изменении структуры менять и их. Это в общем-то не очень и сложно.
...
Рейтинг: 0 / 0
08.02.2013, 14:01
    #38143415
Baby1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Редактирование данных в таблице через DBGrid
MasterZivПростейший вариант -- сделать на первое время вид, что новые поля не добавляются, а старые не удаляются, написать процедуры,
а при изменении структуры менять и их. Это в общем-то не очень и сложно.
А еще код программы, нужно же в процедуру передавать что-то....
Об этом я уже и сам думал, только надеялся, что есть другой, приемлемый в настоящее время, способ...

EAV конечно интересно, я оказывается это даже видел, только названия не знал, но если переходить на него "одна малюсенька доработка на 1-2 дня" (шеф)))) выльется в полное переписание всего и вся.... хотя факультативно....
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Редактирование данных в таблице через DBGrid / 16 сообщений из 16, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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