![]() |
|
|
![]()
|
|
| Chechaco |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 43 Регистрация: 6.10.2005 Где: из Канска Репутация: 1 Всего: 1 |
Здравствуйте, вопро с следующий:
Написал я запрос для TQuery
Причем в Table1 есть данные а Table2 пустая, в результате мне выдается запрос с одним пустым полем. Если объединяю два запроса через UNION - выдает ошибку. Как сделать чтобы в запросе выводились все значения полей из Table1 и рядом, соответственно, пустые поля из Table2? Это сообщение отредактировал(а) Chechaco - 20.10.2005, 05:12 |
|||
|
||||
| offline |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 474 Регистрация: 7.2.2005 Репутация: 7 Всего: 7 |
А у таблиц есть общие поля?
|
|||
|
||||
| Alex |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4147 Регистрация: 25.3.2002 Где: Москва Репутация: 17 Всего: 162 |
При объединении через union все поля в о обоих выборках должны иметь одинаковый тип и их кол-во должно быть равным
-------------------- Написать можно все - главное четко представлять, что ты хочешь получить в конце. |
|||
|
||||
| Самурай |
|
|||
|
Unregistered |
Проверено на базе данных Microsoft Access, откуда получен вывод, что должно работать на других базах данных. P. S. Table1 запелнена, а Table2 не заполнена. В противном случае меняется слово LEFT на слово RIGHT, что можно без труда сделать при автоматической генерации SQL-запроса в программе, т. е. преварительно посмотрев, какая из таблиц является пустой. |
|||
|
||||
| Chechaco |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 43 Регистрация: 6.10.2005 Где: из Канска Репутация: 1 Всего: 1 |
Спасибо, получилось!
То есть, если я правильно понял, чтобы объединить две таблицы (Paradox) в одном запросе у них должны быть общие ключевые поля? Других ограничений для объединения нет? |
|||
|
||||
| offline |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 474 Регистрация: 7.2.2005 Репутация: 7 Всего: 7 |
Да, что бы включть несколько таблиц в запрос, нужно, что бы они были связанны между собой, но не обязательно ключевыми полями. если Table1.id=Table2.id ID ключевое поле, а таблицы связанны не этими полями, то результат запроса буден неверным
|
|||
|
||||
| Chechaco |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 43 Регистрация: 6.10.2005 Где: из Канска Репутация: 1 Всего: 1 |
А может еще подскажете как вводить данные в таблицу через DBGrid -> Query без дополнительных действий типа нажимания кнопки после ввода, чтобы данные сохранялись в таблице просто после перехода в гриде на другую ячейку (или хотя бы по нажатию Enter)? Благодарю.
|
|||
|
||||
| Самурай |
|
||||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 64 Регистрация: 20.10.2005 Где: Воронежская облас ть > Семилуки Репутация: нет Всего: 1 |
Так что ли?
А если просто создать поле, которое всегда будет равняться единице у двух таблиц? Как в этом случае? |
||||||
|
|||||||
| YurikGL |
|
||||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 196 Регистрация: 5.7.2005 Где: Уфа Репутация: нет Всего: 2 |
Ну-ну.... по Enter осуществляется вход в редактирование поля записи (во всяком случае в EhGrid), и если оказалось, что заполнены не все поля и среди незаполненных остались обязательные к заполнению, будет Exception... Гораздо лучше post делать по закрытию окна, где редактировались данные.
Мммм.... зачем такое.....??? Это сообщение отредактировал(а) YurikGL - 22.10.2005, 18:30 --------------------
|
||||
|
|||||
| offline |
|
||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 474 Регистрация: 7.2.2005 Репутация: 7 Всего: 7 |
Тогда для связки таблиц лучше не использовать такое поле
Обрати внимание на пост YurikGL он верно сказал
Данные в сетки лучше не редактировать, это не очень хорошо Это сообщение отредактировал(а) kirilllius - 22.10.2005, 19:26 |
||||||
|
|||||||
| YurikGL |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 196 Регистрация: 5.7.2005 Где: Уфа Репутация: нет Всего: 2 |
Добавлю, что надо это делать в OnCloseQuery примерно так: try Table.post except on e:exception do begin canclose:=false; raise Exception.Create('Не могу подтвердить изменения записи. Произошла ошибка'+#13+e.Message); end; З.Ы. это в том случае, если все же решишь редактировать в сетке... --------------------
|
|||
|
||||
| offline |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 474 Регистрация: 7.2.2005 Репутация: 7 Всего: 7 |
Лучше вешать на отдельную кнопку. Я например хочу закрыть окно не сохраняя изменений. Да и использовать компоненты не связанные с DB, а простые. Хотя это все дело вкуса
|
|||
|
||||
| YurikGL |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 196 Регистрация: 5.7.2005 Где: Уфа Репутация: нет Всего: 2 |
Тогда уж Firebird + прямое управление транзакциями --------------------
|
|||
|
||||
| Chechaco |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 43 Регистрация: 6.10.2005 Где: из Канска Репутация: 1 Всего: 1 |
Так, а теперь по порядку. Я поставил Query, подцепил к ней базу, Поставил DataSource, поставил DBGrid, соединил все это дело. В Query написал
SELECT * FROM Table1 LEFT JOIN Table2 ON Table1.id=Table2.id; (по совету Самурая) Поставил RequestLive = true, Active = true Начинаю редактировать - а оно не редактируется, в то время как с выборкой из одной таблицы все проходит на ура. Т.е. я так понимаю должен быть какой-то другой выход, а какой? И еще, как сделать чтобы в выборке из двух таблиц (master-detail) запись, введенная в detail-таблицу соответствовала по внешнему ключу записи в master-таблице напротив которой она была введена?
В моем случае это нет суть важно, на крайний случай все данные есть на бумаге, главное не ставить кнопку "Удалить базу" |
|||
|
||||
| Grig |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 809 Регистрация: 29.4.2005 Где: Иркутск Репутация: 4 Всего: 16 |
А что именно не редактируется? Может ошибку выдает какую-нибудь? Query1.Post стоИт? -------------------- |
|||
|
||||
![]()
|
| Правила форума "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. |