Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как вывести запрос состоящий из двух таблиц, Если одна из них пустая 
:(
    Опции темы
Chechaco
Дата 24.10.2005, 04:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 43
Регистрация: 6.10.2005
Где: из Канска

Репутация: 1
Всего: 1



Вообще не дает редактировать данные в Гриде т.е. не вставить не изменить.

Query1.Post у меня стоить в OnCloseQuery:

Цитата(YurikGL @ 22.10.2005, 20:56)

try
Table.post
except
on e:exception do begin
canclose:=false;
raise Exception.Create('Не могу подтвердить изменения записи. Произошла ошибка'+#13+e.Message);
end;


Правда в этом случе если закрыть Query без ввода то вылетает сообщение Query1: DataSet not in edit or insert mode. Мол Кверя не была в режме редактирования и т.д.

Это сообщение отредактировал(а) Chechaco - 24.10.2005, 04:20
PM MAIL   Вверх
offline
Дата 24.10.2005, 09:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 474
Регистрация: 7.2.2005

Репутация: 7
Всего: 7



Для того, чтобы всё это нормально работало, нужно, чтобы в TQuery были включены RequestLive и CashedUpdates. Соответственно, для
подтверждения изменений нужно вызывать TQuery.ApplyUpdates и
TQuery.CommitUpdates, либо TDatabase.ApplyUpdates, а для отмены -
CancelUpdates.
Добавлено @ 10:04
Цитата
Правда в этом случе если закрыть Query без ввода то вылетает сообщение Query1: DataSet not in edit or insert mode


Так и будет, т.к. ты пытаешься применить метод Table.post для таблицы не переведеную в редактирование. Перед тем как вызвать Table.post, проверь, состояние набора данных и если он не в режиме просмотра, то вызывай Table.post, а если в режиме просмотра, то ничего не делай, тогда и ошибки не будет.

Код

if not (ADOTable1.State = dsBrowse)
 then ADOTable1.Post;


Это сообщение отредактировал(а) kirilllius - 24.10.2005, 10:07
PM MAIL   Вверх
Chechaco
Дата 24.10.2005, 11:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 43
Регистрация: 6.10.2005
Где: из Канска

Репутация: 1
Всего: 1



RequestLive и CashedUpdate у меня включены.

Цитата(kirilllius @ 24.10.2005, 09:59)
для
подтверждения изменений нужно вызывать TQuery.ApplyUpdates и
TQuery.CommitUpdates, либо TDatabase.ApplyUpdates, а для отмены -
CancelUpdates.


А где это вызывать?

На счет Query.Post спасибо, помогло smile
PM MAIL   Вверх
offline
Дата 24.10.2005, 11:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 474
Регистрация: 7.2.2005

Репутация: 7
Всего: 7



Это вызывается тогда, когда тебе нужно принять изменения. Если ты принимаешь их когда закрываешь запрос, вот туда и вешай.
PM MAIL   Вверх
Chechaco
Дата 25.10.2005, 04:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 43
Регистрация: 6.10.2005
Где: из Канска

Репутация: 1
Всего: 1



Все равно не изменяется. Я поставил TUpdateSQL, сгенерировал в нем запросы на изменение, написал TQuery.ApplyUpdates в таком виде:
Код

procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
if not (Query1.State = dsBrowse) then
begin
try
Query1.post;
Query1.ApplyUpdates;
except
...


теперь я могу изменять данные в таблице, но при выходе изменения не сохраняются.
PM MAIL   Вверх
Grig
Дата 25.10.2005, 06:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 809
Регистрация: 29.4.2005
Где: Иркутск

Репутация: 4
Всего: 16



Ну вот например как я делал:
перед закрытием просто прогонял в цикле по всем записям и записывал их в базу данных.

Код

Query1.First;
    while not Query1.Eof do
     begin
Query1.Edit;
  Query1.FieldByName('aaa').Asstring:=DbGrid1.Fields[1].Value ;
Query1.Post;
end;


Правда наверное, бабушкин метод.. Зато работает!!

Это сообщение отредактировал(а) Grig - 25.10.2005, 06:23


--------------------
        
PM MAIL ICQ   Вверх
Chechaco
Дата 25.10.2005, 07:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 43
Регистрация: 6.10.2005
Где: из Канска

Репутация: 1
Всего: 1



Все равно ничего не сохраняется, может потому что в запросе одновременно 2 таблицы, у меня даже автоинкремент не создается при вводе новой записи.
PM MAIL   Вверх
offline
Дата 25.10.2005, 09:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 474
Регистрация: 7.2.2005

Репутация: 7
Всего: 7



Если ты работаешь с ADO, то чтобы увидеть изменение в таблицах после запроса на изменение то нужно их переоткрыть. Это можно сделать например так ADOTable1.Requery;


PM MAIL   Вверх
Chechaco
Дата 25.10.2005, 18:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 43
Регистрация: 6.10.2005
Где: из Канска

Репутация: 1
Всего: 1



Нет. я работаю (точнее пытаюсь работать) с BDE-Paradox7
Мне уже не до запросов с двумя таблицами, хотя бы в простейшем запросе в одной таблице понять как редактируются данные через Query.

Запрос пишу такой:
SELECT * FROM Table1
ORDER BY Pole1

Вводить данные могу, а сохранять - нет, и инкремент, как я уже говорил, не создается, причем никакие ApplyUpdate и Post не помогают.
Хотя если убрать сортировку по Pole1 - можно и редактировать и сохранять, и инкремент создается smile smile
PM MAIL   Вверх
YurikGL
Дата 25.10.2005, 18:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 196
Регистрация: 5.7.2005
Где: Уфа

Репутация: нет
Всего: 2



Цитата
Хотя если убрать сортировку по Pole1 - можно и редактировать и сохранять, и инкремент создается

Если я не ошибаюсь, то Query не предназначен для редактирования т.к. там может быть хитрый запрос, результаты которого редактировать принципиально нельзя. Например, если в одном из полей будет сумма других полей. Система отрабатывает это примерно так: Если набор данных в query точно можно редактировать (select * from) то редактирование разрешается. Если у системы есть подозрение, что редактировать нельзя, то идет запрет на редактирование. Это - мое ИМХО, основанное на опыте и не подтвержденное точными теоритическими знаниями.
Автору: Я бы для редактирования использовал Table-ы с lookup полями. Или вообще стандартные edit-ы (не db) и посылал бы команды на сервер типа 'insert into' или 'update table'. Эти команды формируются на основе текстов из едитов.
Что-то типа
'Insert into table1 (pole1) values '+Edit1.text;
--------------------
 
PM MAIL WWW ICQ   Вверх
offline
Дата 25.10.2005, 19:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 474
Регистрация: 7.2.2005

Репутация: 7
Всего: 7



Так я не понял, то ты пишешь запрос на обновление данных, то ты просто форимруешь набор, а потом пытаешься его отредактировать и куда то сохранить. smile
Что там у тебя за задача?

PM MAIL   Вверх
Chechaco
Дата 26.10.2005, 08:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 43
Регистрация: 6.10.2005
Где: из Канска

Репутация: 1
Всего: 1



Запрос на обновление я пишу в любом случае, в UpdateSQL, но я так понял, обновление через Query не работает даже при простейшей сортировке, YurikGL примерно то же говорил. Может быть потому что автоинкремент в таком случае идет не по порядку.
Сделать я хочу следующее: есть таблица со значениями (Мастер), есть пустая таблица (Деталь), мне нужно в одном Гриде (или как-нибудь так) отобразить значения мастер-таблицы и напротив них вводить значения в деталь-таблицу, так, чтобы автоматически создавались связи мастер-деталь.
PM MAIL   Вверх
offline
Дата 26.10.2005, 10:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 474
Регистрация: 7.2.2005

Репутация: 7
Всего: 7



А почему бы не сделать это в двух таблицал, в первой выводишь мастеров, а во вторую детали и связывешь отношением один ко многому, т.е. одному мастеоу соответствует множество деталей. Тут м будут создаваться автоматически связи мастер-детали.
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Базы данных и репортинг"
Vit
Петрович

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


Обязательно указание:

1. Базы данных (Paradox, Oracle и т.п.)

2. Способа доступа (ADO, BDE и т.д.)


  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • Вопросы по SQL и вопросы по базам данных не связанные с Дельфи задавать здесь

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема »


 




[ Время генерации скрипта: 0.0521 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.