![]() |
|
|
![]()
|
|
| Eva1 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 21 Регистрация: 20.3.2006 Репутация: нет Всего: нет |
Всем привет!
Существует такая проблема: Имеются таблицы: FIO(id, fio), Address(id, address, telephone), Address_Book(id, fio_id, address_id, birtday) в базе данных MSAccess2000. С помощью запроса :
отображаем данные таблиц в DBGrid. Далее, когда добавляем новые записи в DBGrid таблицы FIO и Address дополняются, а таблица Address_Book нет. Как можно решить эту проблему? ЗАРАНЕЕ СПАСИБО! |
|||
|
||||
| Vas |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 830 Регистрация: 29.6.2005 Где: Stavropol region Репутация: 23 Всего: 28 |
Запретить редактировать данные в DBGrid. А при добавлении записи показывать пользователю модальное диалоговое окно. -------------------- И опыт, сын ошибок трудных, И гений, парадоксов друг, И случай, бог изобретатель. ... (А.С. Пушкин) |
|||
|
||||
| bas |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 446 Регистрация: 14.8.2002 Где: Молдова, Кишинев Репутация: 1 Всего: 2 |
||||
|
||||
| Eva1 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 21 Регистрация: 20.3.2006 Репутация: нет Всего: нет |
Почему не добавляется по собственному желанию я, наверно, понимаю: в таблице Address_Book полю fio_id и address_id не присваиваются значения FIO.id и Address.id, но может в DBGrid есть какой-то умный обработчик событий, который может это сделать? Диалоговое окошко пока использовать не хочется, если это конечно не единственный вариант. ЗАРАНЕЕ СПАСИБО! |
|||
|
||||
| SergeBS |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1111 Регистрация: 10.6.2005 Где: Владимир Репутация: 11 Всего: 22 |
Eva1,
1. LookupField. 2. ADOdataset. И диалоговые окошки будут не нужны. |
|||
|
||||
| Eva1 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 21 Регистрация: 20.3.2006 Репутация: нет Всего: нет |
БОЛЬШОЕ СПАСИБО, SergeBS!
Пытаюсь сделать то, что вы посоветовали, но возникают ошибки. Не мог бы кто-нибудь подсказать в чем проблема? В ADODataSet1 установлены такие свойства: CommandText - select id, fio, address_id, address_id , birtday from Address_Book Connection - ADOConnection1 Столбцы введены с помощью Add fields в редакторе столбцов: id, fio, Expr1002, address_id, birtday. Свойства Expr1002: FildKind - fkLookup KeyFilds - id LookupDataSet - ADODataSet2 LookupKeyFilds - id LookupResultFild - address Свойства address_id: FildKind - fkLookup KeyFilds - id LookupDataSet - ADODataSet2 LookupKeyFilds - id LookupResultFild - telephone В ADODataSet2 установлены такие свойства: CommandText - select id, address, telephone from Address Connection - ADOConnection1 Столбцы введены с помощью Add all fields в редакторе столбцов. Когда пытаешься активизировать ADODataSet1 выводится ошибка: Invalid value for field 'Expr1002'. |
|||
|
||||
| SergeBS |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1111 Регистрация: 10.6.2005 Где: Владимир Репутация: 11 Всего: 22 |
Eva1,
Значит в таблице Address_book где-то есть значение (id), которого нет в справочнике Address. Да, что за дичь: в одном справочнике и телефон и адрес? Они между собой не связаны, т.е. телефонов может быть несколько (рабочий, домашний, мобила), они могут меняться. Аналогично с адресом: дурной тон держать весь адрес в одном поле. Это тогда не адрес, а контактная информация. |
|||
|
||||
| Eva1 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 21 Регистрация: 20.3.2006 Репутация: нет Всего: нет |
Спасибо, будем исправлять эту дичь, если других ошибок нет.
|
|||
|
||||
| Eva1 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 21 Регистрация: 20.3.2006 Репутация: нет Всего: нет |
Таблицы переделаны: Address(id, address), Telephone(id, telephone), Address_Book(id, fio, address_id, telephone_id, birtday) - база данных MSAccess2000.
Адрес пусть будет пока в одном поле, так как не представляю, как будет смотрется в качестве LookupField номер дома и квартира. DBGrid выводит строку из БД, толко в полях Lookup пусто и туда ничего нельзя записать. Привожу часть файла описания, чтобы ничего не упустить:
Кто-нибудь может помочь советом? ЗАРАНЕЕ СПАСИБО! |
|||
|
||||
| Eva1 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 21 Регистрация: 20.3.2006 Репутация: нет Всего: нет |
Кто знает почему поля Lookup не выводят записи и их нельзя редактировать?
Таблицы: Address(id, address), Telephone(id, telephone), Address_Book(id, fio, address_id, telephone_id, birtday) - база данных MSAccess2000. На форме размещены элементы: ADOConnection1; ADODataSet1, ADODataSet2, ADODataSet3, связанные с ADOConnection1; DataSource1, связанный с ADODataSet3; DBGrid1, связанная с DataSource1. В ADODataSet3 установлено такое свойство: CommandText - select id, fio, address_id, telephone_id , birtday from Address_Book Столбцы введены с помощью Add all fields в редакторе столбцов. telephone_id: FildKind - fkLookup KeyFilds - telephone_id Что здесь надо устанавливать id либо telephone_id? И так и так один результат. LookupDataSet - ADODataSet1 LookupKeyFilds - id LookupResultFild - address address_id: FildKind - fkLookup KeyFilds - address_id LookupDataSet - ADODataSet2 LookupKeyFilds - id LookupResultFild - telephone В ADODataSet2 установлено такое свойство: CommandText - select id, address from Address Столбцы введены с помощью Add all fields в редакторе столбцов. В ADODataSet1 установлено такое свойство: CommandText - select id, telephone from Telephone Столбцы введены с помощью Add all fields в редакторе столбцов. Нет ли в этом ошибок? |
|||
|
||||
| SergeBS |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1111 Регистрация: 10.6.2005 Где: Владимир Репутация: 11 Всего: 22 |
Eva1,
Ну что, совсем лень доки читать Еще раз: 1. СОЗДАЕТСЯ лукап-поле. Field-New. type - string, length = length(telephone). Реально его в таблице НЕТ! 2. Radiogroup ->field type = lookup. 3. Ниже - dataset - где реальное поле. Key fields - поле которое связано кодом с таблицей телефонов. lookup key - id из таблицы телефонов. Result - telephone. В ДБГриде появится поле, по нему пощелкать - вылетит список. Там еще и настройки есть. В ЛЮБОЙ книжке по Делфи это все есть. И в демках Делфи тоже. |
|||
|
||||
| Eva1 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 21 Регистрация: 20.3.2006 Репутация: нет Всего: нет |
Спасибо, SergeBS!
Дело в том, что прочитав книжку, я так и делаю, только там еще необходимо добавить KeyFilds - определяет поле (или поля) из исходного набора данных, для которого создается поле синхронного просмотра или ключевое поле таблицы синхронного просмотра(в одной и той же статье пишется по разному forum.game-portal.ru/lofiversion/index.php?t101-150.html), и при этом пощелкав в DBGrid ничего не выводится. Это сообщение отредактировал(а) Eva1 - 27.3.2006, 17:11 |
|||
|
||||
| Eva1 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 21 Регистрация: 20.3.2006 Репутация: нет Всего: нет |
Мне не желательно использовать Lookup поля, так как в них не добавляются новые записи, а как пользователь будет добавлять телефоны или адреса в таблицы Address и Telephone.
Можно еще как-нибудь, без дополнительных элементов типа Edit, ComboBox добавлять данные во все таблицы (Address, Telephone, Address_Book) одновременно когда работаешь только с одним DBGrid? |
|||
|
||||
| SergeBS |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1111 Регистрация: 10.6.2005 Где: Владимир Репутация: 11 Всего: 22 |
Eva1,
Задача1: заполнение контактных данных - это делают операторы. Задача2: заполнение справочников. Это делает администратор. По большому счету выносить номера телефонов в справочник - не обязательно. Т.е. правильно - вынести в справочники названия улиц (и городов/районов/почтовых отделений) - они часто повторяются и их список ограничен. Телефоны - не обязательно и как правило не нужно.
Невозможно принципиально. Рекомендую почитать книжки на тему принципов построения реляционных баз данных. Например, Дейта (очень рекомендую). Список - на форуме есть. Приципиально имеется несколько разных сущностей, между которыми устанавливаются (и меняются) связи. Каждая сущность требует свои атрибуты и правила заполнения. |
|||
|
||||
| Eva1 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 21 Регистрация: 20.3.2006 Репутация: нет Всего: нет |
Спасибо, SergeBS.
Я делаю курсовик и мое задание сделать, что-то типа электронной записной книги с разделами: адресная книга, книга расходов и записная - где хотелось, как в обычной тетради, добавлять и изменять записи непосредственно. Поэтому необходимо в DBGrid заполнять три таблицы одновременно при добавлении одной записи. Но теперь придется перегружать форму дополнительными элементами, что не наглядно. |
|||
|
||||
![]()
|
| Правила форума "Delphi: Базы данных и репортинг" | |
|
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами Обязательно указание: 1. Базы данных (Paradox, Oracle и т.п.) 2. Способа доступа (ADO, BDE и т.д.)
FAQ раздела лежит здесь! Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |