![]() |
|
|
![]()
|
|
| Chechaco |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 43 Регистрация: 6.10.2005 Где: из Канска Репутация: 1 Всего: 1 |
Вообще не дает редактировать данные в Гриде т.е. не вставить не изменить.
Query1.Post у меня стоить в OnCloseQuery:
Правда в этом случе если закрыть Query без ввода то вылетает сообщение Query1: DataSet not in edit or insert mode. Мол Кверя не была в режме редактирования и т.д. Это сообщение отредактировал(а) Chechaco - 24.10.2005, 04:20 |
|||
|
||||
| offline |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 474 Регистрация: 7.2.2005 Репутация: 7 Всего: 7 |
Для того, чтобы всё это нормально работало, нужно, чтобы в TQuery были включены RequestLive и CashedUpdates. Соответственно, для
подтверждения изменений нужно вызывать TQuery.ApplyUpdates и TQuery.CommitUpdates, либо TDatabase.ApplyUpdates, а для отмены - CancelUpdates. Добавлено @ 10:04
Так и будет, т.к. ты пытаешься применить метод Table.post для таблицы не переведеную в редактирование. Перед тем как вызвать Table.post, проверь, состояние набора данных и если он не в режиме просмотра, то вызывай Table.post, а если в режиме просмотра, то ничего не делай, тогда и ошибки не будет.
Это сообщение отредактировал(а) kirilllius - 24.10.2005, 10:07 |
||||
|
|||||
| Chechaco |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 43 Регистрация: 6.10.2005 Где: из Канска Репутация: 1 Всего: 1 |
RequestLive и CashedUpdate у меня включены.
А где это вызывать? На счет Query.Post спасибо, помогло |
|||
|
||||
| offline |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 474 Регистрация: 7.2.2005 Репутация: 7 Всего: 7 |
Это вызывается тогда, когда тебе нужно принять изменения. Если ты принимаешь их когда закрываешь запрос, вот туда и вешай.
|
|||
|
||||
| Chechaco |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 43 Регистрация: 6.10.2005 Где: из Канска Репутация: 1 Всего: 1 |
Все равно не изменяется. Я поставил TUpdateSQL, сгенерировал в нем запросы на изменение, написал TQuery.ApplyUpdates в таком виде:
теперь я могу изменять данные в таблице, но при выходе изменения не сохраняются. |
|||
|
||||
| Grig |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 809 Регистрация: 29.4.2005 Где: Иркутск Репутация: 4 Всего: 16 |
Ну вот например как я делал:
перед закрытием просто прогонял в цикле по всем записям и записывал их в базу данных.
Правда наверное, бабушкин метод.. Зато работает!! Это сообщение отредактировал(а) Grig - 25.10.2005, 06:23 -------------------- |
|||
|
||||
| Chechaco |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 43 Регистрация: 6.10.2005 Где: из Канска Репутация: 1 Всего: 1 |
Все равно ничего не сохраняется, может потому что в запросе одновременно 2 таблицы, у меня даже автоинкремент не создается при вводе новой записи.
|
|||
|
||||
| offline |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 474 Регистрация: 7.2.2005 Репутация: 7 Всего: 7 |
Если ты работаешь с ADO, то чтобы увидеть изменение в таблицах после запроса на изменение то нужно их переоткрыть. Это можно сделать например так ADOTable1.Requery;
|
|||
|
||||
| Chechaco |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 43 Регистрация: 6.10.2005 Где: из Канска Репутация: 1 Всего: 1 |
Нет. я работаю (точнее пытаюсь работать) с BDE-Paradox7
Мне уже не до запросов с двумя таблицами, хотя бы в простейшем запросе в одной таблице понять как редактируются данные через Query. Запрос пишу такой: SELECT * FROM Table1 ORDER BY Pole1 Вводить данные могу, а сохранять - нет, и инкремент, как я уже говорил, не создается, причем никакие ApplyUpdate и Post не помогают. Хотя если убрать сортировку по Pole1 - можно и редактировать и сохранять, и инкремент создается |
|||
|
||||
| YurikGL |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 196 Регистрация: 5.7.2005 Где: Уфа Репутация: нет Всего: 2 |
Если я не ошибаюсь, то Query не предназначен для редактирования т.к. там может быть хитрый запрос, результаты которого редактировать принципиально нельзя. Например, если в одном из полей будет сумма других полей. Система отрабатывает это примерно так: Если набор данных в query точно можно редактировать (select * from) то редактирование разрешается. Если у системы есть подозрение, что редактировать нельзя, то идет запрет на редактирование. Это - мое ИМХО, основанное на опыте и не подтвержденное точными теоритическими знаниями. Автору: Я бы для редактирования использовал Table-ы с lookup полями. Или вообще стандартные edit-ы (не db) и посылал бы команды на сервер типа 'insert into' или 'update table'. Эти команды формируются на основе текстов из едитов. Что-то типа 'Insert into table1 (pole1) values '+Edit1.text; --------------------
|
|||
|
||||
| offline |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 474 Регистрация: 7.2.2005 Репутация: 7 Всего: 7 |
Так я не понял, то ты пишешь запрос на обновление данных, то ты просто форимруешь набор, а потом пытаешься его отредактировать и куда то сохранить.
Что там у тебя за задача? |
|||
|
||||
| Chechaco |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 43 Регистрация: 6.10.2005 Где: из Канска Репутация: 1 Всего: 1 |
Запрос на обновление я пишу в любом случае, в UpdateSQL, но я так понял, обновление через Query не работает даже при простейшей сортировке, YurikGL примерно то же говорил. Может быть потому что автоинкремент в таком случае идет не по порядку.
Сделать я хочу следующее: есть таблица со значениями (Мастер), есть пустая таблица (Деталь), мне нужно в одном Гриде (или как-нибудь так) отобразить значения мастер-таблицы и напротив них вводить значения в деталь-таблицу, так, чтобы автоматически создавались связи мастер-деталь. |
|||
|
||||
| offline |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 474 Регистрация: 7.2.2005 Репутация: 7 Всего: 7 |
А почему бы не сделать это в двух таблицал, в первой выводишь мастеров, а во вторую детали и связывешь отношением один ко многому, т.е. одному мастеоу соответствует множество деталей. Тут м будут создаваться автоматически связи мастер-детали.
|
|||
|
||||
![]()
|
| Правила форума "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. |