![]() |
|
![]() ![]() ![]() |
|
Beltar |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 627 Регистрация: 11.1.2006 Репутация: нет Всего: 7 |
XE6 Build 20.0.15596.9843
В общем столкнулся с тем, что при редактировании таблицы в dbgrid для Lookup-поля после Insert отображается первое значение из связанной таблицы еще до того, как его ввели. На ADO проблема отсутствует. Тестовый проект с простейшей базой. Присоединённый файл ( Кол-во скачиваний: 1 ) ![]() -------------------- Опытный программист на C++ легко решает любые не существующие в Паскале проблемы. ![]() Пищущий на C++ мужик. Даже если это мужик сидит в написанном на Delphi и жрущем паскалевскую библиотеку билдере. |
|||
|
||||
Beltar |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 627 Регистрация: 11.1.2006 Репутация: нет Всего: 7 |
-------------------- Опытный программист на C++ легко решает любые не существующие в Паскале проблемы. ![]() Пищущий на C++ мужик. Даже если это мужик сидит в написанном на Delphi и жрущем паскалевскую библиотеку билдере. |
|||
|
||||
Beltar |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 627 Регистрация: 11.1.2006 Репутация: нет Всего: 7 |
-------------------- Опытный программист на C++ легко решает любые не существующие в Паскале проблемы. ![]() Пищущий на C++ мужик. Даже если это мужик сидит в написанном на Delphi и жрущем паскалевскую библиотеку билдере. |
|||
|
||||
Alexeis |
|
|||
![]() Амеба ![]() Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: нет Всего: 459 |
Честно говоря, я всегда думал, что Lookup нельзя редактировать (вводить через DBGrid). Ведь Insert ты делаешь для текущего датасета, а Insert для Lookup поля расположен в другом датасете. Соответственно, нужно переводить в режим Edit не основной датасет, а связанный. Тут наверняка могут быть особенности по настройке самих датасетов. По крайней мере нужно проверить что при переводе DBGrid-а в режим редактирования зависимый датасет тоже перейдет в режим edit. Если не так, то нужно курить маны по фаредаку на предмет связанных датасетов. -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
Beltar |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 627 Регистрация: 11.1.2006 Репутация: нет Всего: 7 |
Я же не лукап редактирую, а поле вместо которого этот лукап отображается (Id_завода). т лукапа требуется толкьо список допустимых значений отображать. Обычная техника со времен появления Delphi.
-------------------- Опытный программист на C++ легко решает любые не существующие в Паскале проблемы. ![]() Пищущий на C++ мужик. Даже если это мужик сидит в написанном на Delphi и жрущем паскалевскую библиотеку билдере. |
|||
|
||||
superVad |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 735 Регистрация: 6.4.2006 Где: Черкассы, Украина Репутация: 3 Всего: 15 |
Beltar, просто интересно, а можно отказаться от лукап поля и просто присоединить нужную таблицу в запросе?
Я в доставшемся мне проекте так и сделал со всеми лукап полями. Сильно оно все усложняло и работало порой странно. |
|||
|
||||
Alexeis |
|
|||
![]() Амеба ![]() Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: нет Всего: 459 |
Тогда причина может скрываться в запросе select dataseta из которого делается lookup. У меня обычно не было проблем, если этот датасет не имеет связи с мастер датасетом в котором выводится лукап поле. Т.е. нет отношений master-detail у основного датасета и того из которого делается lookup. -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
Beltar |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 627 Регистрация: 11.1.2006 Репутация: нет Всего: 7 |
А пользователям тогда показывать неизвестное им число Id? Не думаю, что они это оценят.
-------------------- Опытный программист на C++ легко решает любые не существующие в Паскале проблемы. ![]() Пищущий на C++ мужик. Даже если это мужик сидит в написанном на Delphi и жрущем паскалевскую библиотеку билдере. |
|||
|
||||
Alexeis |
|
|||
![]() Амеба ![]() Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: нет Всего: 459 |
Насколько я понял, что для работы механизма lookup связь master-detail не нужна. Датасеты сами разбираются меж собой, что откуда брать. Если не поможет, то можно попробовать раскидать их даже на разные транзакции. Не исключено, что перевод главного датасета в режим edit автоматически закрывает транзакцию, которую использует 2й датасет. Я с фаредаком не работал, так что могу предполагать только по общей схеме DataSet/DataSource/DBGrid. Это сообщение отредактировал(а) Alexeis - 1.4.2015, 16:06 -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
Beltar |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 627 Регистрация: 11.1.2006 Репутация: нет Всего: 7 |
Все связи там, обычный Foreign Key в базе.
Заводы: Id:Int PK Название:Varchar Оборудование: Id:Int PK Id_Завода:Int FK к Заводы.Id Название: Varchar Lookup Завод: String через Id_Завода к Заводы.Id Больше в Delphi ничего не делается, Master-detail не формируется. Все, что мне нужно, работать с понятным названием завода вместо его Id. Это делали на автомате еще в эпоху BDE. Оно же мне зачем-то показывает сразу после инсерта первую строку из заводов, еще до того, как пользователь что-то выбрал. Да, можно ес-но выбрать нужный завод, и оно все нормально запишется, но, если пользователя отображаемый пункт устраивает, он просто нажмет сохранить и получит эксепшен, что Id_Завода required. Это сообщение отредактировал(а) Beltar - 1.4.2015, 16:13 -------------------- Опытный программист на C++ легко решает любые не существующие в Паскале проблемы. ![]() Пищущий на C++ мужик. Даже если это мужик сидит в написанном на Delphi и жрущем паскалевскую библиотеку билдере. |
|||
|
||||
Alexeis |
|
|||
![]() Амеба ![]() Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: нет Всего: 459 |
Слушай, а может там (в таблице) ID завода имеет дефолтное значение и при инсерте автоматически проставляет дефолт? Я бы еще поковырял транзакции. Чтобы не вышло ситуации что зависимый датасет сбрасывается. Или может запрос refresh неверно сформирован. Т.е. для этой строки делает refresh и он подставляет что-то. -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
Beltar |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 627 Регистрация: 11.1.2006 Репутация: нет Всего: 7 |
Неа.
Запустил SQL-профайлер, но как и ожидалось TDataset.Insert отрабатывает исключительно на клиенте, и пока Post не вызовут, никаких обращений к серверу не происходит, что логично. Тут у TFDQuery какая-то непонятка, что он не NULL возвращает. -------------------- Опытный программист на C++ легко решает любые не существующие в Паскале проблемы. ![]() Пищущий на C++ мужик. Даже если это мужик сидит в написанном на Delphi и жрущем паскалевскую библиотеку билдере. |
||||
|
|||||
![]() ![]() ![]() |
Правила форума "Delphi: Базы данных и репортинг" | |
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами Обязательно указание: 1. Базы данных (Paradox, Oracle и т.п.) 2. Способа доступа (ADO, BDE и т.д.)
FAQ раздела лежит здесь! Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |