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

Delphi Sources



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

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #16  
Старый 11.10.2011, 18:12
Аватар для Amilman
Amilman Amilman вне форума
Новичок
 
Регистрация: 27.03.2011
Адрес: г.Кемерово
Сообщения: 98
Версия Delphi: XE
Репутация: 10
По умолчанию

F1 у меня не работает ==
Ответить с цитированием
  #17  
Старый 11.10.2011, 18:26
Аватар для Viajero
Viajero Viajero вне форума
Активный
 
Регистрация: 14.06.2011
Адрес: РБ
Сообщения: 214
Версия Delphi: Delphi 7 FB 2.5
Репутация: 5849
По умолчанию

Цитата:
Сообщение от Amilman
F1 у меня не работает ==
Тяжёлый случай. Видимо ещё и клавиатуру сменить придётся.
__________________
- Товарищ прапорщик!!! Остановите поезд!!! - Поезд СТОЙ! РАЗ! ДВА!
Ответить с цитированием
  #18  
Старый 11.10.2011, 18:28
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

Цитата:
Сообщение от Viajero
Обычно формы привязываются к структуре а не наоборот. IMHO, без правильной структуры ничего путного не выйдет. Это ж потом практически всю программу придётся переделывать.
Переделывать придется по любому, ибо сейчас база нефункциональна. Но вот организацию связей, т.е сам принцип, можно попробовать сделать и на такой БД.
Что касается типа связи 1:1 или 1:N, это не влияет на предложенное решение нисколько.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #19  
Старый 11.10.2011, 18:43
Lucky192 Lucky192 вне форума
Прохожий
 
Регистрация: 04.10.2011
Сообщения: 28
Репутация: 1351
По умолчанию

Да вам вообще одна таблица пока что нужна:
1. У каждого работника обязательно есть паспорт и при том только один => паспорта выносить в отдельную таблицу незачем.
2. У каждого работника обязательно есть (и при том только одно): должность, табельный номер, ИНН, домашний, сотовый 1,... Если чего то из перечисленного нет - это сути не меняет - есть NULL.

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

ИМХО: Сливайте все поля в одну таблицу, использование трех таблиц ничем не оправдано.

P.S. Что-то сложное нужно делать, если от этого есть (или планируется в будущем) хоть какая-то польза. В данном случае от усложнения один вред.

Последний раз редактировалось Lucky192, 11.10.2011 в 19:02.
Ответить с цитированием
  #20  
Старый 11.10.2011, 18:47
Аватар для Viajero
Viajero Viajero вне форума
Активный
 
Регистрация: 14.06.2011
Адрес: РБ
Сообщения: 214
Версия Delphi: Delphi 7 FB 2.5
Репутация: 5849
По умолчанию

Цитата:
Сообщение от Страдалецъ
Переделывать придется по любому, ибо сейчас база нефункциональна.
Т. е делать никому не нужную, практически не работающую программу. Ну ну... Кстати видел как подобные поделки в некоторых учреждениях годами эксплуатировались. И в итоге. И нарастить функционал без полной переделки никак (а очень кому-то хочется), и данные за несколько лет никто не хочет терять, и думай как без потерь данные перезалить из никудышной структуры в более приемлемую - это значит ещё одну программу нужно делать, специально для перезаливки, и ещё хорошо если не будет проблем с многозначностью.
Цитата:
Сообщение от Lucky192
Да вам вообще одна таблица пока что нужна:
Вот и я о том же. Хотя кое что можно (нужно) выделить в отдельные таблицы (подразделения например), но явно не то что у TS.
__________________
- Товарищ прапорщик!!! Остановите поезд!!! - Поезд СТОЙ! РАЗ! ДВА!

Последний раз редактировалось Viajero, 11.10.2011 в 19:08.
Ответить с цитированием
  #21  
Старый 11.10.2011, 18:57
Аватар для Amilman
Amilman Amilman вне форума
Новичок
 
Регистрация: 27.03.2011
Адрес: г.Кемерово
Сообщения: 98
Версия Delphi: XE
Репутация: 10
По умолчанию

Цитата:
Сообщение от Lucky192
ИМХО: Сливайте все поля в одну таблицу, использование трех таблиц ничем не оправдано.

Думаю это не получится так как метод добавления у меня такой
Код:
  if DataModule1.ADOQuery4.Active = True then
    DataModule1.ADOQuery4.Close;
  DataModule1.ADOQuery4.sql.Text :=
    'insert into Основное (Должность, Дата_приёма_на_работу, ИНН, Табельный№, РегПФР, Домашний, Сотовый1, Сотовый2, Д_р_п_ж, id_info) values ("'
    + DBLookupComboBox1.Text + '", "' + String(MaskEdit4.Text) + '", "' +
    Edit7.Text + '", "' + Edit1.Text + '", "' + Edit6.Text + '", "' +
    String(MaskEdit8.Text) + '", "' + String(MaskEdit5.Text) + '", "' +
    String(MaskEdit6.Text) + '", "' + String(MaskEdit3.Text) + '", "' +
    Inttostr(seInfo.Value) + '")';
  DataModule1.ADOQuery4.ExecSQL;

Или хотя... Можно ли использовать этот код с этим ADOQuery только другими столбцами?
Ответить с цитированием
  #22  
Старый 11.10.2011, 19:18
Аватар для Viajero
Viajero Viajero вне форума
Активный
 
Регистрация: 14.06.2011
Адрес: РБ
Сообщения: 214
Версия Delphi: Delphi 7 FB 2.5
Репутация: 5849
По умолчанию

Цитата:
Сообщение от Amilman
Думаю это не получится так как метод добавления у меня такой
Причём тут метод. Ещё раз повторяю. Программа делается для БД, а не наоборот. Программа - этого всего лишь интерфейс для работы с базой. Программ для работы с одной базой может быть и несколько, и даже не на Delphi (PHP например). А структура БД, эта сама основа.
__________________
- Товарищ прапорщик!!! Остановите поезд!!! - Поезд СТОЙ! РАЗ! ДВА!

Последний раз редактировалось Viajero, 11.10.2011 в 19:29.
Ответить с цитированием
  #23  
Старый 11.10.2011, 19:19
Lucky192 Lucky192 вне форума
Прохожий
 
Регистрация: 04.10.2011
Сообщения: 28
Репутация: 1351
По умолчанию

Нужно:
1. В базе создать новую таблицу, куда войдут все поля из трех существующих.
2. Скопировать в нее существующие данные (если есть).
3. Удалить старые таблицы.

Если п.2 не нужен - легче вообще начать с пустой базы, выполнив на ней скорректированный скрипт создания таблицы.

Если есть какие-то запросы, нужно оставить один, добавив в него недостающие поля (или вообще заново создать).

В приведенном примере у вас выполняется скрипт INSERT, формируемый динамически. Это не совсем запрос, и добавление в него новых полей не представляет никакой сложности (просто дописываете и все).

Кстати для правки записей нужен еще UPDATE.
Ответить с цитированием
  #24  
Старый 11.10.2011, 19:42
Аватар для Amilman
Amilman Amilman вне форума
Новичок
 
Регистрация: 27.03.2011
Адрес: г.Кемерово
Сообщения: 98
Версия Delphi: XE
Репутация: 10
По умолчанию

Цитата:
Сообщение от Lucky192
Если п.2 не нужен - легче вообще начать с пустой базы, выполнив на ней скорректированный скрипт создания таблицы.

Что за скрипт создания таблицы?
Ответить с цитированием
  #25  
Старый 11.10.2011, 21:21
Lucky192 Lucky192 вне форума
Прохожий
 
Регистрация: 04.10.2011
Сообщения: 28
Репутация: 1351
По умолчанию

Все базы данных используют язык запросов SQL.
Язык SQL используется для создания таблиц (CREATE TABLE), запроса данных из таблиц (SELECT), вставки строк в таблицу (INSERT), правки отдельных полей (UPDATE) и пр.
Примерно так выглядит скрипт для создания таблицы:
Код:
CREATE TABLE schools (
  id smallint(5) unsigned NOT NULL,
  name char(100) default NULL,
  director char(100) default NULL,
  address char(255) default NULL,
  description char(255) default NULL
)
Обычно утилиты администрирования баз данных позволяют получить такой скрипт в текстовом виде.
Имея такие скрипты для каждой из трех таблиц, можно получить скрипт для создания общей таблицы простым копипастом.

Последний раз редактировалось Lucky192, 11.10.2011 в 21:24.
Ответить с цитированием
  #26  
Старый 12.10.2011, 18:29
Аватар для Amilman
Amilman Amilman вне форума
Новичок
 
Регистрация: 27.03.2011
Адрес: г.Кемерово
Сообщения: 98
Версия Delphi: XE
Репутация: 10
По умолчанию

Ну а как сделать при выборе записи в Grid и при нажатии на кнопку изменить компоненты на форме автоматически заполнялись информацией о выбранной записи?
Ответить с цитированием
  #27  
Старый 13.10.2011, 14:15
Lucky192 Lucky192 вне форума
Прохожий
 
Регистрация: 04.10.2011
Сообщения: 28
Репутация: 1351
По умолчанию

Вкладка DataControls в палитре компонентов. Там находятся визуальные компоненты для работы с базой данных. Все эти компоненты работают через TDataSource (каждый компонент содержит обязательно свойство DataSource).
Датасорс - это такой интерфейс для работы с набором записей. Сам набор записей это TDataSet (у TDataSource есть обязательное поле DataSet, где можно выбрать доступные источники данных - например SQL запрос). Одна из записей является текущей - на нее установлен т.н. "курсор". Текущая запись подсвечивается в компонентах типа DBGrid или просто выводится в компонентах, работающих с одним полем (DBText, DBEdit и т.д.).
Датасет можно перевести в режим редактирования, тогда поля текущей записи (на которую установлен курсор) можно будет редактировать с помощью компонентов со вкладки DataControls. Передача измененных значений в базу осуществляется методом Post. Метод Post автоматически вызывается при переходе на другую запись (естественно только в том случае, если текущая запись находилась в режиме редактирования).
У компонентов, работающих с конкретным полем обязательно нужно указывать имя поля (свойство DataField). У DBGrid можно ничего не указывать, а можно настроить список полей как удобно (убрать лишние, дать осмысленные названия, настроить параметры отображения и т.д.).
Также список полей можно настраивать у компонентов, относящихся к TDataSet (убирать поля, добавлять вычисляемые, настраивать их отображение и пр.)
Ответить с цитированием
Ответ


Delphi Sources

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

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

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

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


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


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

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

ВКонтакте   Facebook   Twitter