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

Delphi Sources



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

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 28.06.2010, 20:26
Justin Justin вне форума
Прохожий
 
Регистрация: 16.12.2008
Сообщения: 29
Репутация: 10
По умолчанию Связь таблиц в БД

Добрый день!
Подскажите пожалуйста, как правиль организовать связь таблиц между собой.
Пишу базу на Delphi 7, средство доступа - BDE, таблицы - Paradox.
ИСпользуется несколько таблиц:
Doctor(Vrach,kod[*]), Otdelenie(Naimenovanie,KodOtdel[*),Base(Familia,Date,Kod (берется из Doctor) и Otdelenie (берется из Otdelenie) ). Как правильно считать коды Врача (Выбирается отдельно из ListBox-а, который заполняется из базы Doctor) и Отделения (соответственно тоже выбирается в ListBox-е) и внести их в таблицу Base?
Заранее благодарен!
Ответить с цитированием
  #2  
Старый 28.06.2010, 21:23
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

Даже не знаю с чего начать.
1. Для работы с БД обычно используются специальные компоненты типа DBGrid,DBEdit,DBListBox,DBLookupListBox и т.д. Их функционала хватает с избытком для стандартных задач. Находится все это счастье на вкладе Data control
2. Ваш вариант БД вызывает очень много вопросов и замечаний. Описывать в рамках данного ответа что и как вы сделали неправильно, я даже не возьмусь. Поэтому предлагаю альтернативу. Вы выкладываете описание задачи (как можно подробнее), мы здесь выкладываем вариант БД. Вы его изучаете, вносите свои поправки и задаете вопросы.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #3  
Старый 29.06.2010, 00:05
Аватар для Marvel
Marvel Marvel вне форума
Начинающий
 
Регистрация: 14.06.2010
Адрес: Пятигорск
Сообщения: 121
Репутация: 24
По умолчанию

Страдалецъ, +1
__________________
Коли навчався в школі я - в мені росли мозгЫ. КудИж вони поділися? гы-гы гы-гы гы-гы...


ICQ: 593977748
Nick: Marvel
Ответить с цитированием
  #4  
Старый 29.06.2010, 07:35
Justin Justin вне форума
Прохожий
 
Регистрация: 16.12.2008
Сообщения: 29
Репутация: 10
По умолчанию

Вот примерно такой вид имеет бущующая программа (в файле). Это программа записи людей на прием к врачу (врачам).
В самом верху выбирается фамилия врача и дата. И затем в базе осуществляется поиск по дате и фамилии и соответствующее время записывается в соответсвующую строчку. Если записанного нет, то строка остается свободной для возможности записи больного.
Т.о. имеется база врачей, база отделений (кардиология, кардиохирургия и т.д.) и общая база, в которую заносятся Дата, фамилия врача, фамилия больного, отделение, [еще кучя всякого] и сумма оплаты. Из всего этого потом нужно будет формировать отчет.
Изображения
Тип файла: jpg Прога.JPG (72.1 Кбайт, 21 просмотров)

Последний раз редактировалось Justin, 29.06.2010 в 07:39.
Ответить с цитированием
  #5  
Старый 29.06.2010, 13:24
Black Raider Black Raider вне форума
Местный
 
Регистрация: 31.05.2010
Адрес: Москва
Сообщения: 466
Версия Delphi: 7
Репутация: 40
По умолчанию

Цитата:
Сообщение от Justin
имеется база врачей, база отделений (кардиология, кардиохирургия и т.д.) и общая база, в которую заносятся Дата, фамилия врача, фамилия больного, отделение, [еще кучя всякого] и сумма оплаты.

Фамилию врача из 3-й таблицы в топку. она (фамилия) у тебя должна быть в таблице врачей. в 3-й за место нее храним ID номер из первой.
Та же песня и с отделением.

ПС. Таблица=База (вашим сленгом )
Ответить с цитированием
  #6  
Старый 29.06.2010, 19:39
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,020
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Руки оторвать таким программистам.
1. Берем нормальную БД, а не этот ублюдочный Paradox. Как ты собираешься на Paradox завсети 2х операторов на одной БД (точнее, это можно, но задача это не тривиальная).
2. Нафиг отдельные компоненты для вывода строчек. Для этого есть специальный компонент - DBGrid.
3. Структура БД для твоей проги будет прим ерно такая:
Код:
CREATE TABLE OTDELENIE
(
  ID INTEGER PRIMARY KEY,
  NAME VARCHAR(255)
);

CREATE TABLE DOCTOR
(
  ID INTEGER PRIMARY KEY,
  OTDELENIE_ID INTEGER REFERENCE OTDELENIE(ID),
  NAME VARCHAR(255)
  -- Здесь еще можно добавить разной фигни о враче
);

CREATE TABLE PATIENT
(
  ID INTEGER PRIMARY KEY,
  NAME VARCHAR(255),
  DOB DATE
  -- Здесь еще можно добавить разной фигни о пациенте
);

CREATE TABLE VISITS
(
  ID INTEGER PRIMARY KEY,
  V_DATE DATE, -- TIMESTAMP или отдельное поле TIME - зависит от БД
  DOCTOR_ID INTEGER REFERENCE DOCTOR(ID),
  PATIENT_ID INTEGER REFERENCE PATIENT(ID),
  PRICE NUMBER(18,4)  -- стоимость
  -- еще другая фигня о визите
);
Если копать глубже (т.е. это не курсач, а диплом или реальное задание по работе), то можно еще сделать несколько табличек, например, карта пациента, график работы врачей и т.д.
Ответить с цитированием
  #7  
Старый 30.06.2010, 07:53
Justin Justin вне форума
Прохожий
 
Регистрация: 16.12.2008
Сообщения: 29
Репутация: 10
По умолчанию

Цитата:
Сообщение от Black Raider
Фамилию врача из 3-й таблицы в топку. она (фамилия) у тебя должна быть в таблице врачей. в 3-й за место нее храним ID номер из первой.
Та же песня и с отделением.

ПС. Таблица=База (вашим сленгом )
Вот я это и имею ввиду, как правильно будет считать ID врача по фамилии из справочника и записать в 3 таблицу?
Ответить с цитированием
  #8  
Старый 30.06.2010, 07:59
Justin Justin вне форума
Прохожий
 
Регистрация: 16.12.2008
Сообщения: 29
Репутация: 10
По умолчанию

Цитата:
Сообщение от lmikle
Руки оторвать таким программистам.
1. Берем нормальную БД,
Что есть нормальная БД? SQL?
Цитата:
Сообщение от lmikle
Как ты собираешься на Paradox завсети 2х операторов на одной БД (точнее, это можно, но задача это не тривиальная)
Неужели не будет работать с 2-мя пользователями
Цитата:
Сообщение от lmikle

2. Нафиг отдельные компоненты для вывода строчек. Для этого есть специальный компонент - DBGrid.
Вывода строчек чего? Если Вы имеете ввиду кучу Edit-ов, то это для удобства и наглядности
Цитата:
Сообщение от lmikle

3. Структура БД для твоей проги будет прим ерно такая:
Код:
CREATE TABLE OTDELENIE
(
  ID INTEGER PRIMARY KEY,
  NAME VARCHAR(255)
);

CREATE TABLE DOCTOR
(
  ID INTEGER PRIMARY KEY,
  OTDELENIE_ID INTEGER REFERENCE OTDELENIE(ID),
  NAME VARCHAR(255)
  -- Здесь еще можно добавить разной фигни о враче
);

CREATE TABLE PATIENT
(
  ID INTEGER PRIMARY KEY,
  NAME VARCHAR(255),
  DOB DATE
  -- Здесь еще можно добавить разной фигни о пациенте
);

CREATE TABLE VISITS
(
  ID INTEGER PRIMARY KEY,
  V_DATE DATE, -- TIMESTAMP или отдельное поле TIME - зависит от БД
  DOCTOR_ID INTEGER REFERENCE DOCTOR(ID),
  PATIENT_ID INTEGER REFERENCE PATIENT(ID),
  PRICE NUMBER(18,4)  -- стоимость
  -- еще другая фигня о визите
);
Если копать глубже (т.е. это не курсач, а диплом или реальное задание по работе), то можно еще сделать несколько табличек, например, карта пациента, график работы врачей и т.д.
Какую БД Вы предлагаете? Честно, раньше немного программировал, но не базы. Сейчас хотелось бы получше все освоить, но кроме BDE и Paradox-a ничего по базам не знаю.
А вообще - это реальная работа. РАботаю в медицине. Дали задание написать такую прогу.
Ответить с цитированием
  #9  
Старый 30.06.2010, 08:13
Black Raider Black Raider вне форума
Местный
 
Регистрация: 31.05.2010
Адрес: Москва
Сообщения: 466
Версия Delphi: 7
Репутация: 40
По умолчанию

Используя например DBCombobox например.
либо так же грид.

ПС. Стукни в аську проще будет помочь 11198089четыре

Последний раз редактировалось Black Raider, 30.06.2010 в 08:27.
Ответить с цитированием
  #10  
Старый 30.06.2010, 08:18
Black Raider Black Raider вне форума
Местный
 
Регистрация: 31.05.2010
Адрес: Москва
Сообщения: 466
Версия Delphi: 7
Репутация: 40
По умолчанию

1. для такой задачи лучше брать все таки SQL-ную минимум Interbase Или его клон. хотя по мне лучше MSSql

2. с 2-мя пользователями будет работать но глючно и с танцами переодическими. типа с lock файлами там геморой.

3. все таки с гридом намного лучше.

Последний раз редактировалось Black Raider, 30.06.2010 в 08:25.
Ответить с цитированием
Ответ


Delphi Sources

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

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

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

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


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


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

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

ВКонтакте   Facebook   Twitter