Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Базы данных
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 27.02.2008, 21:50
acl acl вне форума
Прохожий
 
Регистрация: 27.02.2008
Сообщения: 23
Репутация: 10
Вопрос Проектирование БД и Клиента

Доброго времени суток всем участникам!

Сразу перейду к делу. Постановка задачи:

Создать программу подбора персонала с использованием бд. С ТЗ уже определился, осталось спроектировать по ТЗ бд и написать саму прогу клиента. Отсюда ряд вопросов:
1. Как правильно спроектировать бд? (имеется ввиду хранить все данные о соискателях и фирмах-работодателях только в 2х таблицах, либо разбить каждую на дополнительные: Что-то вроде раздел "Образование", например, в отдельной таблице и т.д...)
2. Как правильно оформить внешний вид программы?
3. Какого провайдера для бд выбрать?

PS: Люди добрые , я новичок еще в программировании подобного рода приложений, поэтому помогите кто чем может. Заранее благодарю.
Ответить с цитированием
  #2  
Старый 28.02.2008, 08:25
Аватар для s0Creator
s0Creator s0Creator вне форума
Местный
 
Регистрация: 20.02.2008
Адрес: Московская область
Сообщения: 420
Репутация: 884
По умолчанию C чего начать?

Если попорядку сперва почитать бы литературу попрограмированию в среде Делфи и работе с БД (принципы построения реляционных БД и взаимодействие программ Делфи с БД)

1. прочитай про реляционные базы.
2. посмотри похожие программы или читай Архангельского
внешний вид должен быть по возможности стандартным и удобным для пользователя (чтобы тот не искал пол часа кнопку выкл
3. а это зависит от маштабов, удобства переноса программы и от твоих привычек

Как итог:
если бы выложил полное ТЗ
то мож ктонибудь за пару вечеров тебе основу программы накодил бы
а так вопросы настолько обширные, что по этому поводу килограммовые книги пишут (в том числе и для начинающих).
Посмотри также FAQ на сайте.
Наилутших пожеланий тебе и удачи!
Ответить с цитированием
  #3  
Старый 28.02.2008, 13:57
acl acl вне форума
Прохожий
 
Регистрация: 27.02.2008
Сообщения: 23
Репутация: 10
По умолчанию

Спасибо большое за ответ, он вполне емкий. Немного уточню, так как вижу небольшое непонимание. Дело в том, что с теориеей проектирования бд я знаком (в теории :-)), вопросы обширные потому, что не могу сформулировать конкретику. Постараюсь в ближайшее время сформировать "кратенькое", но подробно изложенное ТЗ и выложить его.
Цитата:
если бы выложил полное ТЗ
то мож ктонибудь за пару вечеров тебе основу программы накодил бы
А вот в этом плане я не против помощи, но написать, так сказать с нуля, хочу сам... :-)

И еще вопросик, если кто-то сталкивался с подобными программами -- киньте ссылку, я почему-то не нашел :-((
Ответить с цитированием
  #4  
Старый 28.02.2008, 18:02
Аватар для s0Creator
s0Creator s0Creator вне форума
Местный
 
Регистрация: 20.02.2008
Адрес: Московская область
Сообщения: 420
Репутация: 884
По умолчанию

Ну если теорию читал
по базам - выдели сущности и информацию
и попробуй ее расположить непротиворечиво и без избытка
если у тебя для сущности "Фирма"
будет храниться:
- Название
- адрес
- телефоны
- тип фирмы ...
Можно конечно для каждого типа фирмы создавать свою таблицу и дентичную по структуре, но вдруг надо добавить новый тип.
Можно в поле тип так и писать "Образование", "Торговля"...
только можно потом случайно записать для одной фирмы тип "тАрговля" и фильтры работать не будут
А можно завести таблицу "Типы фирм"
- ключ
- наименование типа
а в таблице "Фирма" в столбце - тип фирмы хранить этот ключ
да еще его проиндексировать
а потом еще определиться с взаимосвязями между таблицами и тд.
Про провайдера:
- если использовать BDE то для переноса программы прийдется перетаскивать и его
- зато во Всех Виндах есть ADO и ODBC
- есть еще компоненты позволяющие напрямую работать с БД
или вообще работать с отдельными таблицами без БД
- но если надо обрабатывать миллионы записей - то без сервера БД необойтись (MSSQL или MySLQ или Postgres...)
в общем гдето так
по поводу примеров
попробу посмотреть http://www.delphisources.ru/pages/so...ager_base.html
и
http://www.delphisources.ru/pages/so...base/1_db.html
прям здесь на сайте
Ответить с цитированием
  #5  
Старый 28.02.2008, 18:42
acl acl вне форума
Прохожий
 
Регистрация: 27.02.2008
Сообщения: 23
Репутация: 10
По умолчанию

Цитата:
Ну если теорию читал
по базам - выдели сущности и информацию
и попробуй ее расположить непротиворечиво и без избытка
если у тебя для сущности "Фирма"
будет храниться:
- Название
- адрес
- телефоны
- тип фирмы ...
Можно конечно для каждого типа фирмы создавать свою таблицу и дентичную по структуре, но вдруг надо добавить новый тип.
Можно в поле тип так и писать "Образование", "Торговля"...
только можно потом случайно записать для одной фирмы тип "тАрговля" и фильтры работать не будут
А можно завести таблицу "Типы фирм"
- ключ
- наименование типа
а в таблице "Фирма" в столбце - тип фирмы хранить этот ключ
да еще его проиндексировать
а потом еще определиться с взаимосвязями между таблицами и тд.

С этим все понятно и не проблема. :-)
Думаю использовать ADO (тем более немного с ним работал). В качестве провайдера думаю использовать базу Access. Вот только не уверен, что на современном офисном компьютере при достаточно больших выборках прога не будет тормозить. :-(

И еще, при использовании бд на Access, возможен ли вариант сетевого использования программы? Спасибо.
Ответить с цитированием
  #6  
Старый 28.02.2008, 23:57
Аватар для mav_c
mav_c mav_c вне форума
Активный
 
Регистрация: 26.03.2007
Адрес: Москва
Сообщения: 287
Репутация: 30
По умолчанию

Цитата:
Сообщение от acl
С этим все понятно и не проблема. :-)
Думаю использовать ADO (тем более немного с ним работал). В качестве провайдера думаю использовать базу Access. Вот только не уверен, что на современном офисном компьютере при достаточно больших выборках прога не будет тормозить. :-(

И еще, при использовании бд на Access, возможен ли вариант сетевого использования программы? Спасибо.
Ну смотря какие объёмы данных!

А насчёт использования по сети: использовать конечно можно, но будет создаваться локальная копия и поэтому работа по сети совершенно не целесообразна - фай сервер не рулит!
__________________
---------------------------------------------
Программирование - не профессия, а стиль жизни
Ответить с цитированием
  #7  
Старый 29.02.2008, 08:59
Аватар для s0Creator
s0Creator s0Creator вне форума
Местный
 
Регистрация: 20.02.2008
Адрес: Московская область
Сообщения: 420
Репутация: 884
По умолчанию

Если предпологается работа по сети и спреличными обьемами данных
осваивай сразу работу с серверами БД
- монстром от Майкрософт
- или бесплатным MySQL
Еще вариант трехзвеннку сделать но тут писать намного больше
Вчера натолкнулся на статейку
Организация работы MS Access-приложения с MySQL
http://www.interface.ru/home.asp?artId=9317
В ней описывается (для
Access):
1. Установить на сервере MySQL
2. Настроить поддержку кириллицы для MySQL
3. Создать базу данных Вашего приложения
4. Установить драйвер ODBC на все машины, на которых работает Ваше приложение
5. В случае MS Access 2003 -- установить обновления для корректной работы ODBC
6. Изменить код приложения -- для автоматического подключения таблиц

Пункты 1-4 помогут и тебе
а после установки ODBC можно работать через компоненты ADO
Есть еще статейки и на этом сайте по MySQL.
Ну а дальше дерзай (при неправильной настройке ADO компонентов они будут тебе тоже делать локальные копии данных)

Ну а мне щас приходиться кодить в связке HTML - JS - PHP - Postgres
на одной из старых версий Линиксов
Ответить с цитированием
  #8  
Старый 11.03.2008, 13:12
acl acl вне форума
Прохожий
 
Регистрация: 27.02.2008
Сообщения: 23
Репутация: 10
По умолчанию

Столкнулся сейчас еще с одной проблемой.(Ну по крайней мере для меня).
Так как кодил с использованием бд мало, то всегда использовал только DBGrid, а тут такая ситуация:
- После двойного клика на строке грида я получаю uid, создаю с ним запрос, выполняю его (через TADOQuery), вопрос: Как мне обработать результат запроса и запихнуть все это на форму в такие компоненты как TEdit и т.п.?

Почему-то теряются значения в дбгрид-е и вылетает ошибка: Ошибка в параметре FROM. Проверял, никакой ошибки нет...
Код:
ADOQuery1.Close;
ADOQuery1.SQL.Add('SELECT * FROM tbl_names');
ADOQuery1.Open;// Это когда просто вывод в дбгрид
а потом такой код:
ADOQuery1.SQL.Add('SELECT * FROM tbl_names WHERE uid='+IntToStr(id));
ADOQuery1.ExecSQL;
ShowMessage(ADOQuery1.FieldByName('name').AsString ); // Ну для проверки, например...
ХЭЛП!!!!!!

Последний раз редактировалось acl, 11.03.2008 в 14:41.
Ответить с цитированием
  #9  
Старый 11.03.2008, 15:13
Аватар для Yurk@
Yurk@ Yurk@ вне форума
Специалист
 
Регистрация: 07.09.2007
Адрес: Украина, г. Днепропетровск
Сообщения: 892
Версия Delphi: 7 + ОгнеПтица
Репутация: выкл
По умолчанию

Код:
ADOQuery1.SQL.Add('SELECT * FROM tbl_names WHERE (uid LIKE "'+IntToStr(id)+'")');
__________________
Поживу - увижу, Доживу - узнаю, Выживу - учту.
[P.S.]->Выражая благодарность за помощь - Вы получаете шанс на помощь в следующий раз
Ответить с цитированием
  #10  
Старый 11.03.2008, 15:21
Аватар для mav_c
mav_c mav_c вне форума
Активный
 
Регистрация: 26.03.2007
Адрес: Москва
Сообщения: 287
Репутация: 30
По умолчанию

Цитата:
Сообщение от acl
Столкнулся сейчас еще с одной проблемой.(Ну по крайней мере для меня).
Так как кодил с использованием бд мало, то всегда использовал только DBGrid, а тут такая ситуация:
- После двойного клика на строке грида я получаю uid, создаю с ним запрос, выполняю его (через TADOQuery), вопрос: Как мне обработать результат запроса и запихнуть все это на форму в такие компоненты как TEdit и т.п.?

Почему-то теряются значения в дбгрид-е и вылетает ошибка: Ошибка в параметре FROM. Проверял, никакой ошибки нет...
Код:
ADOQuery1.Close;
ADOQuery1.SQL.Add('SELECT * FROM tbl_names');
ADOQuery1.Open;// Это когда просто вывод в дбгрид
а потом такой код:
ADOQuery1.SQL.Add('SELECT * FROM tbl_names WHERE uid='+IntToStr(id));
ADOQuery1.ExecSQL;
ShowMessage(ADOQuery1.FieldByName('name').AsString ); // Ну для проверки, например...
ХЭЛП!!!!!!

Нельзя использовать ExecSQL для запросов которые возвращают данные. Используй Open;
__________________
---------------------------------------------
Программирование - не профессия, а стиль жизни
Ответить с цитированием
  #11  
Старый 12.03.2008, 18:50
acl acl вне форума
Прохожий
 
Регистрация: 27.02.2008
Сообщения: 23
Репутация: 10
По умолчанию

Цитата:
Сообщение от Yurk@
Код:
ADOQuery1.SQL.Add('SELECT * FROM tbl_names WHERE (uid LIKE "'+IntToStr(id)+'")');
А зачем так то? Поле uid типа int (integer)????
Ответить с цитированием
  #12  
Старый 12.03.2008, 18:51
acl acl вне форума
Прохожий
 
Регистрация: 27.02.2008
Сообщения: 23
Репутация: 10
По умолчанию

Цитата:
Сообщение от mav_c
Нельзя использовать ExecSQL для запросов которые возвращают данные. Используй Open;
Ээээ.... Если можно, то объясните безграмотному -- в чем разница между ними????
Ответить с цитированием
  #13  
Старый 12.03.2008, 19:48
Phedor Phedor вне форума
Начинающий
 
Регистрация: 28.02.2008
Сообщения: 118
Репутация: 21
По умолчанию

Цитата:
Сообщение от Yurk@
Код:
ADOQuery1.SQL.Add('SELECT * FROM tbl_names WHERE (uid LIKE "'+IntToStr(id)+'")');
ADOQuery1.SQL.Add('SELECT * FROM tbl_names WHERE uid=:Id');
ADOQuery1.Params.ParamByName('Id').Value := Id;
Ответить с цитированием
  #14  
Старый 12.03.2008, 21:34
Аватар для s0Creator
s0Creator s0Creator вне форума
Местный
 
Регистрация: 20.02.2008
Адрес: Московская область
Сообщения: 420
Репутация: 884
По умолчанию

Delphi help:
(дословно):
Description

Call ExecSQL to execute the SQL statement currently assigned to the SQL property. Use ExecSQL to execute queries that do not return a cursor to data (such as INSERT, UPDATE, DELETE, and CREATE TABLE).
используй ExecSQL для выполнения запросов не возвращающих данных
(таких как INSERT, UPDATE, DELETE, and CREATE TABLE)
Ответить с цитированием
  #15  
Старый 12.03.2008, 21:49
Аватар для s0Creator
s0Creator s0Creator вне форума
Местный
 
Регистрация: 20.02.2008
Адрес: Московская область
Сообщения: 420
Репутация: 884
По умолчанию

Цитата:
Сообщение от acl
...
Как мне обработать результат запроса и запихнуть все это на форму в такие компоненты как TEdit и т.п.?
...
Почему-то теряются значения в дбгрид-е и вылетает ошибка: Ошибка в параметре FROM. Проверял, никакой ошибки нет...
...
ХЭЛП!!!!!!
- у тебя ADOQuery1 связан с дбгрид-е
- есть еще DBEdit...
- если хочешь чтоб в гриде одно а в другом месте другое
создай еще один Query
насчет Params - тогда уж лучше создать другой параметрический Query
и задавать ему параметры,
а то и вовсе связку с первым мастер - деталь сделать
(если правильно помню)
про лайк ты и сам знаешь

Удачи
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 11:08.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter