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

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

Приемы работы с БД, поделитесь опытом.


Kolan ©   (2006-10-25 10:00:00) 

Здравствуйте,
 Хочу побыстрее пройти начальный этап обучения работы с БД. :)
Представьте, что есть база( MSDE) из 1 таблицы - "Пользователи" и мне надо уметь "Добавить", "Удалить", "Редактировать" пользователя. Как это можно сделать:

1. Кинуть на форму ADOQuery, DataSourse, DBGRid, DBNavigator. Настроить и работать..

2. Кинуть тоже самое, но без Навигатора. Написть 3 запроса на SQLи подставлять их в ADOQuery.

3. То к чему я склоняюсь, но нехочу наделать кучу ошибок.
Сделать класс "доступа к БД". В нем же создать все компоненты работы с БД. Сделать функции типа:
"Добавить пользоватея", "Вывести пользователей(TDBGRid)"ну и тд.

Как делаете это вы?


Petr V.Abramov   (2006-10-27 01:17:00) [1]

> ANB ©   (25.10.06 10:51) [5]
 ты со своими банками - нормальный у него объем :))))


MsGuns   (2006-10-26 23:25:00) [2]

При проектировании БД надо итти не от "компонент", "серверов", "таблиц" и т.д., а от "сущностей". Т.е. от того, ЧТО должна описыватьинформация, хранимая в БД. Начать надо с описания этих сущностей НА БУМАГЕ, попытаться нарисовать связи между ними (зависимости), выделить общие характеристики и способы поведения "в жизни", выяснить в подробностях вид, состав и характер входной информации и ожидаемых результатов. Иными словами - построить модель объекта автоматизации. И только потом заморачиваться на тему, писать ли библиотку классов или использовать "быструю", но менее унифицированную технологию программирования.


dr Gonzo   (2006-10-26 15:00:00) [3]


А компоненты доступа к БД ты в класс(например в общий придок) инкапсулируешь?


Не всегда. Обычно они создаются в теле метода. Для классов типа список кодов, значений с частыми перемещениями по нему можно держать постоянно открытым.

Еще советую сделать класс, который будет сразу отдавать настроенный и готовый к работе компонент доступа к данным (ADOStoredProcedure,  ADOQuery, ADOCommand). Паттерн даж вроде есть на этот счёт :)


Kolan   (2006-10-25 21:30:00) [4]

Решил так:
Сделаю менеджер базы, там будуут все компоненты для связи и выполнения запросов.
Сделаю по менеджеру для каждой таблицы(даже наверно сущности, те менеждер и  с несколькими таблицами работать может). А комммады будут типа таких:
function AddNewOperator(SurName, Name, PatronymicName: string; BaseManager: TBaseManager): boolean;
Те для выполнения команды нужен менеджер базы.

Все мелкие менеджеры потом объединю с пом. еще одного менеджера...

Ну как?


Kolan   (2006-10-25 20:27:00) [5]

> И последний шаг - выкинуть ADOQuery и заменить его на AdoDataset.
> И наиболее серьезная ошибка, а где AdoConnection?

Done.

dr Gonzo ©   (25.10.06 11:29)
А компоненты доступа к БД ты в класс(например в общий придок) инкапсулируешь?


Kolan   (2006-10-25 19:44:00) [6]

> И последний шаг - выкинуть ADOQuery и заменить его на AdoDataset.
> И наиболее серьезная ошибка, а где AdoConnection?

Понятно, надо с ADO еще поразбираться. Благодарю за совет.


> Все изменения - только через хранимки. Гранты только на
> селекты выполнение хранимок. В хранимках уточнять права
> конкретного пользователя на изменение именно этой строчки.

Пока ниасилю :) Но буду иметь в виду..


> [8] Sergey13 ©   (25.10.06 11:07)

Пользователь в Базе не для разграничения доступа к базе, а для сохранения кто работал, когда итд..


> dr Gonzo ©   (25.10.06 11:29)

Вот вот я об этом и думал.. Наверно так и сделаю..

Всех благодарю..


Sergey13   (2006-10-25 13:05:00) [7]

> [12] Anatoly Podgoretsky ©   (25.10.06 12:14)

Потому я и сомневался, и как видно не зря.

Сомнения его не обманули. (с) мультфильм


Anatoly Podgoretsky   (2006-10-25 12:14:00) [8]


> MSDE - а там что, нет встроенного механизма регламентации
> доступа?

Есть, это же полноценный MS SQL Server, на который наложены искуственные ограничения, маркетингового характера.


Anatoly Podgoretsky   (2006-10-25 12:10:00) [9]


> 2. Кинуть тоже самое, но без Навигатора. Написть

Если сделаешь сразу без нафигатора, то идешь правильным путем.
И последний шаг - выкинуть ADOQuery и заменить его на AdoDataset.
И наиболее серьезная ошибка, а где AdoConnection?


ANB   (2006-10-25 12:10:00) [10]


> Все изменения только через классы.

Все изменения - только через хранимки. Гранты только на селекты выполнение хранимок. В хранимках уточнять права конкретного пользователя на изменение именно этой строчки.


dr Gonzo   (2006-10-25 11:29:00) [11]

Я пользуюсь правилом БД контролы только для ПРОСМОТРАданнык.

Все изменения только через классы. Т.е. по логике должен быть класс :

TUser = Class (TXXXXX)
public
 function Load():...;
 function Save():...;
 function Delete():...;
end;


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


Sergey13   (2006-10-25 11:07:00) [12]

> [7] Kolan ©   (25.10.06 10:56)

MSDE - а там что, нет встроенного механизма регламентации доступа? Сомневаюсь я что-то в этом. Скорее всего есть, и желательно хорошенько разобраться в нем, чтобы не изобретать велосипед.
Сложные выборки с анализом по 6-7 таблицам, как и наличие ДБНафигатора на форме, не имеют никакого отношенияк наличию класса "доступа к БД".  

Я не пишу подобные классы и полагаюсь на систему аутентификации серверов БД - мне этого хватает.


Kolan   (2006-10-25 10:56:00) [13]

> Я к тому, что понятие "средний масштаб" очень у всех разное.

Ну таблиц всего 6-7, но задачи серьёзные надо решать. Анализ там итд.. Выборки сложные.

> Если это разовая задачка в первой разрабатываемой системе
> - заморачиваться на это не имеет смысла, ИМХО.


Как бы первая и не разовая. И делать хочется качественно..

Ну расскажите как вы делаете, а.. :)


Sergey13   (2006-10-25 10:52:00) [14]

> Средние масштабы.

Кому и кобыла невеста. (с) 12 стульев

Я к тому, что понятие "средний масштаб" очень у всех разное.
Если подзадача "доступ в БД" входит в несколько подсистем одной системы, и тем более, если она входит в несколько систем практически без изменения, то наверное целесообразно сделать класс. Если это разовая задачка в первой разрабатываемой системе - заморачиваться на это не имеет смысла, ИМХО.


ANB   (2006-10-25 10:51:00) [15]


> Надо будет переделаю..

Сначала напиши то, что потом переделывать будешь :)


Kolan   (2006-10-25 10:50:00) [16]

> [3] ANB ©   (25.10.06 10:36)
>
> >
> > Средние масштабы.
> >
> > Дело в том, что это моя первая работа с БД.
>
> Хреново стыкуется. Начни с оооочень маленьких масштабов.
> Иначе запорешь проект.

Пусть так, все в моих руках. Надо будет переделаю..


ANB   (2006-10-25 10:36:00) [17]


>
> Средние масштабы.
>
> Дело в том, что это моя первая работа с БД.

Хреново стыкуется. Начни с оооочень маленьких масштабов. Иначе запорешь проект.


Kolan   (2006-10-25 10:35:00) [18]

> ИМХО, все зависит от масштабов создаваемой системы.

Средние масштабы.

Дело в том, что это моя первая работа с БД. И я нехочу ошибко наделать... :)


Sergey13   (2006-10-25 10:18:00) [19]

ИМХО, все зависит от масштабов создаваемой системы.
Наличие на форме нафинатора никак не соотносится с наличием или отсутствием класса.


Наверх

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